Bug 152347 - Improve JSObject::put performance
Summary: Improve JSObject::put performance
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:
Blocks:
 
Reported: 2015-12-16 11:11 PST by Filip Pizlo
Modified: 2015-12-16 14:39 PST (History)
12 users (show)

See Also:


Attachments
the patch (50.44 KB, patch)
2015-12-16 11:15 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (49.62 KB, patch)
2015-12-16 11:17 PST, Filip Pizlo
ggaren: review+
Details | Formatted Diff | Diff
patch for landing (47.56 KB, patch)
2015-12-16 12:50 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
patch for landing (48.03 KB, patch)
2015-12-16 13:07 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff
one more time! (48.81 KB, patch)
2015-12-16 13:13 PST, Filip Pizlo
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Filip Pizlo 2015-12-16 11:11:47 PST
The JSObject::put code used to be fast, and then we made it slow by incrementally adding stuff to it, like hooks for immutability inference and property type inference.

This bug is about recovering some of that lost performance.
Comment 1 Filip Pizlo 2015-12-16 11:15:15 PST
Created attachment 267473 [details]
the patch
Comment 2 Filip Pizlo 2015-12-16 11:16:48 PST
Comment on attachment 267473 [details]
the patch

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

> Source/JavaScriptCore/dfg/DFGUnificationPhase.cpp:63
> -                    
> -                    phi->children.child(childIdx)->variableAccessData()->unify(phi->variableAccessData());
> +
> +                    phi->variableAccessData()->unify(phi->children.child(childIdx)->variableAccessData());

This will go away after rebasing.
Comment 3 Filip Pizlo 2015-12-16 11:17:57 PST
Created attachment 267475 [details]
the patch
Comment 4 Filip Pizlo 2015-12-16 11:19:45 PST
There's no real improvement on JS benchmarks, though it is an improvement on dynbench.


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 (r194112)
"FastDyn" at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r194112)

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                  FastDyn                                      
SunSpider:
   3d-cube                                            4.8062+-0.2261            4.7676+-0.2795        
   3d-morph                                           5.4520+-0.2068     ?      5.5819+-0.2702        ? might be 1.0238x slower
   3d-raytrace                                        5.3260+-0.0714     ?      5.3624+-0.0917        ?
   access-binary-trees                                2.2604+-0.1684            2.2272+-0.0889          might be 1.0149x faster
   access-fannkuch                                    5.8504+-0.1034     ?      5.9780+-0.4266        ? might be 1.0218x slower
   access-nbody                                       2.7314+-0.4145            2.5905+-0.0879          might be 1.0544x faster
   access-nsieve                                      3.4799+-0.0697     ?      3.5633+-0.1435        ? might be 1.0240x slower
   bitops-3bit-bits-in-byte                           1.2166+-0.0661            1.1838+-0.0352          might be 1.0277x faster
   bitops-bits-in-byte                                3.1660+-0.0726     ?      3.2013+-0.0615        ? might be 1.0111x slower
   bitops-bitwise-and                                 2.0880+-0.1416            2.0553+-0.0640          might be 1.0159x faster
   bitops-nsieve-bits                                 3.0582+-0.0579     ?      3.0795+-0.1096        ?
   controlflow-recursive                              2.4509+-0.0811            2.3843+-0.0628          might be 1.0279x faster
   crypto-aes                                         4.1283+-0.1386     ?      4.2589+-0.2740        ? might be 1.0316x slower
   crypto-md5                                         2.5492+-0.0910     ?      2.6425+-0.2071        ? might be 1.0366x slower
   crypto-sha1                                        2.5662+-0.2266     ?      2.7400+-0.3582        ? might be 1.0677x slower
   date-format-tofte                                  7.2140+-0.3809     ?      7.2671+-0.3132        ?
   date-format-xparb                                  4.8650+-0.3614            4.6654+-0.0397          might be 1.0428x faster
   math-cordic                                        2.9746+-0.1056            2.9613+-0.0848        
   math-partial-sums                                  4.9702+-0.1396            4.9037+-0.2236          might be 1.0136x faster
   math-spectral-norm                                 1.9683+-0.0295     ?      1.9829+-0.0183        ?
   regexp-dna                                         6.2741+-0.4020            6.1270+-0.2110          might be 1.0240x faster
   string-base64                                      4.3263+-0.2587            4.3100+-0.1055        
   string-fasta                                       5.8998+-0.2212            5.8074+-0.1070          might be 1.0159x faster
   string-tagcloud                                    8.0880+-0.3777     ?      8.2385+-0.4568        ? might be 1.0186x slower
   string-unpack-code                                18.5733+-0.9530           18.4810+-0.6218        
   string-validate-input                              4.2980+-0.2151            4.2140+-0.0677          might be 1.0199x faster

   <arithmetic>                                       4.6377+-0.0507            4.6375+-0.0379          might be 1.0001x faster

                                                        TipOfTree                  FastDyn                                      
LongSpider:
   3d-cube                                          811.1832+-3.7705     !    828.4631+-4.2653        ! definitely 1.0213x slower
   3d-morph                                        1505.4361+-13.2534        1504.1077+-18.6474       
   3d-raytrace                                      610.5899+-14.4316    ?    611.2495+-7.4107        ?
   access-binary-trees                              793.4760+-3.4673     ?    796.5321+-10.9711       ?
   access-fannkuch                                  299.0790+-6.3427          296.0164+-3.0650          might be 1.0103x faster
   access-nbody                                     516.2148+-4.7166          511.0889+-3.0352          might be 1.0100x faster
   access-nsieve                                    384.0373+-10.7023         376.1438+-9.0207          might be 1.0210x faster
   bitops-3bit-bits-in-byte                          34.8303+-1.4462           34.1868+-1.0368          might be 1.0188x faster
   bitops-bits-in-byte                               91.2872+-5.7748     ?     94.5846+-1.8974        ? might be 1.0361x slower
   bitops-nsieve-bits                               404.3275+-4.1608          403.7714+-6.6485        
   controlflow-recursive                            452.2962+-5.7365          448.6312+-4.1281        
   crypto-aes                                       561.3986+-5.1278     ?    562.9038+-7.5903        ?
   crypto-md5                                       552.6064+-5.5698     ?    554.9961+-5.2938        ?
   crypto-sha1                                      666.0371+-7.3508     ?    668.7074+-10.0379       ?
   date-format-tofte                                554.4112+-13.8950         549.5686+-8.9596        
   date-format-xparb                                653.6119+-13.4359    ?    687.4691+-93.7482       ? might be 1.0518x slower
   hash-map                                         151.8223+-2.4795     ?    155.7837+-2.5639        ? might be 1.0261x slower
   math-cordic                                      485.3815+-4.8623     ?    488.0196+-5.6387        ?
   math-partial-sums                                466.2560+-2.7411     ^    458.5137+-2.0950        ^ definitely 1.0169x faster
   math-spectral-norm                               550.6015+-3.3905     ?    551.4488+-4.1872        ?
   string-base64                                    380.5418+-6.2917          375.0042+-7.1368          might be 1.0148x faster
   string-fasta                                     359.4338+-2.8657     ?    361.2347+-7.4759        ?
   string-tagcloud                                  176.5131+-2.3265          174.4681+-1.8429          might be 1.0117x faster

   <geometric>                                      399.7619+-2.0639     ?    400.3494+-2.5646        ? might be 1.0015x slower

                                                        TipOfTree                  FastDyn                                      
V8Spider:
   crypto                                            50.0931+-1.8196     ?     51.2071+-1.8449        ? might be 1.0222x slower
   deltablue                                         77.7564+-2.8303           77.2987+-2.7958        
   earley-boyer                                      41.9518+-1.4075     ?     43.1828+-1.4786        ? might be 1.0293x slower
   raytrace                                          30.1456+-1.3002     ?     30.8414+-1.5381        ? might be 1.0231x slower
   regexp                                            62.9191+-1.2311           62.7930+-2.2814        
   richards                                          52.3614+-0.9243           51.3997+-1.7509          might be 1.0187x faster
   splay                                             37.8675+-1.3211     ?     38.3548+-1.3392        ? might be 1.0129x slower

   <geometric>                                       48.2891+-0.1818     ?     48.6981+-0.4325        ? might be 1.0085x slower

                                                        TipOfTree                  FastDyn                                      
Octane:
   encrypt                                           0.15892+-0.00442          0.15615+-0.00076         might be 1.0177x faster
   decrypt                                           2.85672+-0.01276    ?     2.86967+-0.02125       ?
   deltablue                                x2       0.14106+-0.00604          0.13863+-0.00121         might be 1.0175x faster
   earley                                            0.28603+-0.00549          0.28245+-0.00245         might be 1.0127x faster
   boyer                                             4.35769+-0.13401    ?     4.40072+-0.14975       ?
   navier-stokes                            x2       4.84630+-0.02393          4.83823+-0.02869       
   raytrace                                 x2       0.85385+-0.00549          0.85248+-0.00562       
   richards                                 x2       0.08789+-0.00115          0.08742+-0.00077       
   splay                                    x2       0.34617+-0.00272    ?     0.35227+-0.00724       ? might be 1.0176x slower
   regexp                                   x2      24.96795+-0.56853         24.70541+-0.40982         might be 1.0106x faster
   pdfjs                                    x2      37.23461+-0.25518         37.10589+-0.09419       
   mandreel                                 x2      42.82896+-0.74135         42.67242+-0.47356       
   gbemu                                    x2      31.32761+-3.42886         29.99639+-1.67174         might be 1.0444x faster
   closure                                           0.59343+-0.00764          0.58443+-0.00414         might be 1.0154x faster
   jquery                                            7.51379+-0.06606          7.40873+-0.05210         might be 1.0142x faster
   box2d                                    x2       9.22881+-0.07709          9.12857+-0.08669         might be 1.0110x faster
   zlib                                     x2     386.03731+-14.91993   ?   389.39022+-4.71129       ?
   typescript                               x2     675.31459+-4.47539    ?   682.24139+-6.00110       ? might be 1.0103x slower

   <geometric>                                       5.34913+-0.04574          5.32111+-0.01827         might be 1.0053x faster

                                                        TipOfTree                  FastDyn                                      
Kraken:
   ai-astar                                          127.062+-1.014      ?     127.731+-1.140         ?
   audio-beat-detection                               49.636+-0.464             49.245+-0.377         
   audio-dft                                          96.339+-2.231      ?      96.965+-2.860         ?
   audio-fft                                          35.365+-0.728             35.074+-0.540         
   audio-oscillator                                   58.136+-0.970             57.770+-0.952         
   imaging-darkroom                                   60.127+-0.528             60.078+-0.538         
   imaging-desaturate                                 49.163+-2.099             48.525+-0.541           might be 1.0131x faster
   imaging-gaussian-blur                              87.224+-1.089      ?      87.443+-1.067         ?
   json-parse-financial                               39.680+-2.193             38.058+-1.756           might be 1.0426x faster
   json-stringify-tinderbox                           23.564+-1.942             23.541+-0.874         
   stanford-crypto-aes                                43.632+-1.056      ?      44.134+-1.792         ? might be 1.0115x slower
   stanford-crypto-ccm                                38.344+-1.266             36.652+-1.393           might be 1.0462x faster
   stanford-crypto-pbkdf2                             97.123+-0.680      ?      97.506+-1.198         ?
   stanford-crypto-sha256-iterative                   37.923+-1.223             37.887+-1.113         

   <arithmetic>                                       60.237+-0.400             60.044+-0.383           might be 1.0032x faster

                                                        TipOfTree                  FastDyn                                      
JSRegress:
   abc-forward-loop-equal                            30.3678+-0.9492     ?     30.8469+-1.0817        ? might be 1.0158x slower
   abc-postfix-backward-loop                         29.8835+-0.6997     ?     30.5970+-0.9346        ? might be 1.0239x slower
   abc-simple-backward-loop                          30.1996+-1.7415     ?     30.4675+-0.7587        ?
   abc-simple-forward-loop                           29.8619+-0.8809     ?     30.1140+-1.1832        ?
   abc-skippy-loop                                   21.6897+-0.5679     ?     23.7615+-5.2538        ? might be 1.0955x slower
   abs-boolean                                        2.4729+-0.0360     ?      2.5356+-0.1167        ? might be 1.0254x slower
   adapt-to-double-divide                            16.8593+-0.7659           16.4355+-0.3344          might be 1.0258x faster
   aliased-arguments-getbyval                         1.2899+-0.1509            1.2281+-0.0618          might be 1.0504x faster
   allocate-big-object                                2.6586+-0.2575            2.5814+-0.0585          might be 1.0299x faster
   arguments-named-and-reflective                    10.7203+-0.3251           10.5201+-0.2972          might be 1.0190x faster
   arguments-out-of-bounds                            9.4038+-0.5425     ?      9.4167+-0.2575        ?
   arguments-strict-mode                              9.9556+-0.4220     ?     10.0450+-0.6914        ?
   arguments                                          8.5806+-0.2282     ?      8.6060+-0.4281        ?
   arity-mismatch-inlining                            0.9358+-0.0548            0.8800+-0.0204          might be 1.0635x faster
   array-access-polymorphic-structure                 8.4841+-0.5298            8.4053+-0.1742        
   array-nonarray-polymorhpic-access                 25.1267+-0.6771     ?     25.3320+-0.9567        ?
   array-prototype-every                             76.2497+-2.2771     ?     76.2667+-1.3007        ?
   array-prototype-forEach                           74.7102+-1.0581     ?     76.3437+-1.1671        ? might be 1.0219x slower
   array-prototype-map                               83.4722+-2.5562     ?     83.9098+-0.8453        ?
   array-prototype-reduce                            73.6844+-1.0730           73.1017+-0.9279        
   array-prototype-reduceRight                       73.3012+-1.3804           71.6880+-0.8729          might be 1.0225x faster
   array-prototype-some                              77.3660+-1.2181           76.2775+-1.0380          might be 1.0143x faster
   array-splice-contiguous                           23.7749+-0.8498     ?     25.0578+-1.2410        ? might be 1.0540x slower
   array-with-double-add                              3.5936+-0.1049     ?      3.6819+-0.2045        ? might be 1.0246x slower
   array-with-double-increment                        3.3785+-0.2916     ?      3.4098+-0.4074        ?
   array-with-double-mul-add                          4.6214+-0.4204            4.4942+-0.0974          might be 1.0283x faster
   array-with-double-sum                              3.2203+-0.0638            3.2147+-0.0466        
   array-with-int32-add-sub                           6.2881+-0.1715            6.2648+-0.0377        
   array-with-int32-or-double-sum                     3.2889+-0.0458            3.2844+-0.0712        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     26.0995+-1.2601     ?     26.1315+-1.1334        ?
   ArrayBuffer-DataView-alloc-long-lived             12.1874+-0.2475     ?     12.3070+-0.3088        ?
   ArrayBuffer-Int32Array-byteOffset                  3.7124+-0.3358            3.5521+-0.0482          might be 1.0451x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     27.1693+-1.2032           26.0552+-0.2642          might be 1.0428x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.9900+-1.1414           19.8054+-0.8164        
   ArrayBuffer-Int8Array-alloc-long-lived            11.7475+-0.4018           11.3693+-0.4867          might be 1.0333x faster
   ArrayBuffer-Int8Array-alloc                        9.8566+-0.5481     ?      9.9472+-0.5726        ?
   arrowfunction-call                                11.1985+-0.2350           11.1672+-0.3340        
   asmjs_bool_bug                                     7.6768+-0.5224     ?      7.7191+-0.3339        ?
   assign-custom-setter-polymorphic                   2.3007+-0.0237     ?      2.3888+-0.1358        ? might be 1.0383x slower
   assign-custom-setter                               3.4603+-0.0851     ?      3.5687+-0.2818        ? might be 1.0313x slower
   basic-set                                          7.6051+-0.3719     ?      7.8968+-0.4935        ? might be 1.0384x slower
   big-int-mul                                        3.5455+-0.0806            3.4766+-0.0621          might be 1.0198x faster
   boolean-test                                       3.0333+-0.0570            3.0110+-0.0844        
   branch-fold                                        3.6310+-0.0678            3.6290+-0.0727        
   branch-on-string-as-boolean                       17.5343+-1.0241           17.3147+-0.6040          might be 1.0127x faster
   by-val-generic                                     2.5310+-0.0763     ?      2.5764+-0.1063        ? might be 1.0179x slower
   call-spread-apply                                 29.0187+-0.9016     ?     29.4459+-1.5344        ? might be 1.0147x slower
   call-spread-call                                  24.5324+-1.0217           22.9454+-0.7867          might be 1.0692x faster
   captured-assignments                               0.4764+-0.0446            0.4583+-0.0151          might be 1.0397x faster
   cast-int-to-double                                 5.1061+-0.0361     ?      5.2046+-0.0951        ? might be 1.0193x slower
   cell-argument                                      6.0658+-0.4862            5.9245+-0.3843          might be 1.0239x faster
   cfg-simplify                                       2.9173+-0.0489     ?      3.1144+-0.2876        ? might be 1.0676x slower
   chain-getter-access                                8.4330+-0.2813            8.3526+-0.2818        
   cmpeq-obj-to-obj-other                            12.0871+-0.7763     ?     12.8947+-1.3523        ? might be 1.0668x slower
   constant-test                                      4.8448+-0.1002     ?      4.8789+-0.1095        ?
   create-lots-of-functions                           9.6406+-0.4650     ?      9.7011+-0.6497        ?
   cse-new-array-buffer                               2.3614+-0.0520     ?      2.4289+-0.0856        ? might be 1.0286x slower
   cse-new-array                                      2.4915+-0.0798     ?      2.5342+-0.0753        ? might be 1.0171x slower
   custom-setter-getter-as-put-get-by-id              0.5221+-0.0187     ?      0.5455+-0.0357        ? might be 1.0449x slower
   DataView-custom-properties                        31.9896+-1.2251           31.7383+-0.9300        
   delay-tear-off-arguments-strictmode               13.5119+-0.5894           13.1191+-0.3344          might be 1.0299x faster
   deltablue-varargs                                165.0703+-2.7391          163.7434+-1.4131        
   destructuring-arguments                          162.7003+-1.2325     ^    157.0008+-1.7634        ^ definitely 1.0363x faster
   destructuring-parameters-overridden-by-function   
                                                      0.5126+-0.0382            0.4835+-0.0162          might be 1.0600x faster
   destructuring-swap                                 4.8450+-0.1013     ?      4.9281+-0.1594        ? might be 1.0172x slower
   direct-arguments-getbyval                          1.2267+-0.0854     ?      1.2926+-0.1168        ? might be 1.0536x slower
   div-boolean-double                                 5.3580+-0.2529            5.2891+-0.0741          might be 1.0130x faster
   div-boolean                                        8.0981+-0.0328     ?      8.2447+-0.3356        ? might be 1.0181x slower
   double-get-by-val-out-of-bounds                    4.6477+-0.2300            4.4949+-0.1400          might be 1.0340x faster
   double-pollution-getbyval                          8.4729+-0.2302            8.3462+-0.0627          might be 1.0152x faster
   double-pollution-putbyoffset                       3.7072+-0.0984     ?      3.8385+-0.2256        ? might be 1.0354x slower
   double-real-use                                   24.5242+-0.6690     ?     25.0744+-0.7946        ? might be 1.0224x slower
   double-to-int32-typed-array-no-inline              2.2827+-0.0951     ?      2.4432+-0.3064        ? might be 1.0703x slower
   double-to-int32-typed-array                        2.2216+-0.2101            2.0852+-0.0526          might be 1.0654x faster
   double-to-uint32-typed-array-no-inline             2.4415+-0.1511            2.3790+-0.1479          might be 1.0262x faster
   double-to-uint32-typed-array                       2.1309+-0.1003     ?      2.2210+-0.3509        ? might be 1.0423x slower
   elidable-new-object-dag                           35.8098+-1.0152           34.2377+-0.7552          might be 1.0459x faster
   elidable-new-object-roflcopter                    33.7351+-1.5415           33.3510+-2.1961          might be 1.0115x faster
   elidable-new-object-then-call                     32.5748+-2.1756           32.1326+-0.8997          might be 1.0138x faster
   elidable-new-object-tree                          38.4101+-0.8758           37.6004+-0.4345          might be 1.0215x faster
   empty-string-plus-int                              4.7767+-0.0812     ?      4.8769+-0.2843        ? might be 1.0210x slower
   emscripten-cube2hash                              27.1675+-1.1637     ?     27.3705+-1.3202        ?
   exit-length-on-plain-object                       18.2179+-0.9233     ?     18.3368+-0.6717        ?
   external-arguments-getbyval                        1.2479+-0.0684            1.2303+-0.0648          might be 1.0143x faster
   external-arguments-putbyval                        2.3814+-0.1843            2.3045+-0.1686          might be 1.0334x faster
   fixed-typed-array-storage-var-index                1.2811+-0.0756            1.2557+-0.0518          might be 1.0202x faster
   fixed-typed-array-storage                          1.0582+-0.1747            0.9805+-0.0727          might be 1.0792x faster
   Float32Array-matrix-mult                           4.5790+-0.2868     ?      4.7449+-0.4833        ? might be 1.0362x slower
   Float32Array-to-Float64Array-set                  50.3901+-1.0642           49.3495+-0.8127          might be 1.0211x faster
   Float64Array-alloc-long-lived                     60.9659+-2.1066     ?     61.0994+-1.5003        ?
   Float64Array-to-Int16Array-set                    62.7219+-2.7604           60.3827+-0.7521          might be 1.0387x faster
   fold-double-to-int                                12.7301+-0.5920           12.3301+-0.1298          might be 1.0324x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.2350+-1.1016           10.9343+-0.8905          might be 1.0275x faster
   fold-get-by-id-to-multi-get-by-offset             10.4511+-1.0588           10.2013+-1.2393          might be 1.0245x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.6358+-2.0718            7.9908+-1.6846          might be 1.0807x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.2134+-1.7549     ?      8.6477+-1.4992        ? might be 1.0529x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.6757+-2.0741     ?     10.3277+-1.0001        ? might be 1.0674x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     11.2099+-1.1816           10.7230+-1.3517          might be 1.0454x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.1861+-1.1502     ?     10.1878+-0.7855        ?
   fold-put-by-id-to-multi-put-by-offset             10.3698+-0.9990     ?     11.2558+-2.1708        ? might be 1.0854x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.7600+-0.8686            9.9324+-0.7322          might be 1.0833x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.5267+-1.5649           10.5249+-0.9831        
   fold-put-structure                                 8.1187+-0.6804     ?      8.7016+-2.2906        ? might be 1.0718x slower
   for-of-iterate-array-entries                      11.2221+-0.2509           10.7841+-0.4220          might be 1.0406x faster
   for-of-iterate-array-keys                          3.8861+-0.2053     ?      3.9280+-0.2628        ? might be 1.0108x slower
   for-of-iterate-array-values                        3.5921+-0.3735     ?      3.6300+-0.2358        ? might be 1.0105x slower
   fround                                            18.0648+-0.9057     ?     18.6393+-0.5985        ? might be 1.0318x slower
   ftl-library-inlining-dataview                     58.2903+-0.5542           57.3994+-1.6747          might be 1.0155x faster
   ftl-library-inlining                              18.0017+-1.1066           17.3217+-0.8754          might be 1.0393x faster
   ftl-polymorphic-div                              211.1903+-2.9375     ?    211.7982+-1.5733        ?
   ftl-polymorphic-mul                              236.7826+-2.4343     ?    239.0426+-7.9104        ?
   ftl-polymorphic-sub                              312.5896+-1.2389          312.3924+-2.3536        
   function-call                                     11.2376+-0.5674           10.9495+-0.1929          might be 1.0263x faster
   function-dot-apply                                 2.1186+-0.1476            2.0889+-0.0264          might be 1.0142x faster
   function-test                                      2.8504+-0.1418            2.7290+-0.0323          might be 1.0445x faster
   function-with-eval                                85.1210+-1.6192     ?     87.1676+-2.5999        ? might be 1.0240x slower
   gcse-poly-get-less-obvious                        21.6294+-0.5545           21.6269+-0.6661        
   gcse-poly-get                                     21.7802+-0.3703     ?     22.1680+-0.8593        ? might be 1.0178x slower
   gcse                                               3.4472+-0.0869     ?      3.4900+-0.1540        ? might be 1.0124x slower
   generator-create                                   0.8300+-0.0768            0.7836+-0.0499          might be 1.0593x faster
   generator-fib                                    100.4296+-2.0298     ?    100.6447+-4.1837        ?
   generator-function-create                          0.8300+-0.2270            0.7402+-0.0388          might be 1.1214x faster
   generator-sunspider-access-nsieve                  5.6612+-0.1500     ?      5.6693+-0.2305        ?
   generator-with-several-types                     309.5152+-8.1015          307.4637+-4.7430        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7129+-0.1133            2.6226+-0.0570          might be 1.0344x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.7353+-0.0819            4.7286+-0.0954        
   get-by-id-chain-from-try-block                     2.6252+-0.0621            2.6201+-0.0371        
   get-by-id-check-structure-elimination              4.1045+-0.4231            3.9767+-0.0608          might be 1.0321x faster
   get-by-id-proto-or-self                           16.7927+-1.5234           16.5284+-0.8310          might be 1.0160x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8888+-0.0397     ?      2.9438+-0.2370        ? might be 1.0191x slower
   get-by-id-self-or-proto                           16.7908+-1.4315     ?     16.8544+-1.2461        ?
   get-by-val-out-of-bounds                           4.4285+-0.1943     ?      4.4360+-0.2639        ?
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7797+-0.0907            2.7219+-0.0176          might be 1.0212x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.1723+-0.2353     ?      6.1827+-0.4270        ?
   get-by-val-with-string-chain-from-try-block   
                                                      2.7337+-0.1310            2.6314+-0.0329          might be 1.0389x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.6674+-0.1534            5.6397+-0.1474        
   get-by-val-with-string-proto-or-self              17.2842+-1.5714           17.0560+-0.7476          might be 1.0134x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.0865+-0.0575            3.0818+-0.0656        
   get-by-val-with-string-self-or-proto              16.1474+-0.7283     ?     16.5557+-0.7376        ? might be 1.0253x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.1770+-0.0850     ?      3.2131+-0.0658        ? might be 1.0114x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3881+-0.0832     ?     12.7693+-0.4764        ? might be 1.0308x slower
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.6944+-0.0840     ?      2.7632+-0.2064        ? might be 1.0256x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.4956+-0.2595     ?     11.5584+-0.1880        ?
   get-by-val-with-symbol-proto-or-self              17.3272+-1.1096           16.7583+-1.3619          might be 1.0340x faster
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.6763+-0.0099     ?      3.7283+-0.0887        ? might be 1.0142x slower
   get-by-val-with-symbol-self-or-proto              16.7326+-0.8501           16.5689+-0.8153        
   get_callee_monomorphic                             2.5751+-0.2417     ?      2.7686+-0.2735        ? might be 1.0751x slower
   get_callee_polymorphic                             3.6323+-0.1593     ?      3.6856+-0.2546        ? might be 1.0147x slower
   getter-no-activation                               5.0370+-0.5392     ?      5.1874+-0.8372        ? might be 1.0299x slower
   getter-prototype                                   8.1386+-0.4838     ?      8.3270+-0.7917        ? might be 1.0231x slower
   getter-richards-try-catch                        990.6144+-14.0252    ?    993.9612+-14.1654       ?
   getter-richards                                  125.3737+-22.6863         114.9616+-5.1629          might be 1.0906x faster
   getter                                             5.8913+-0.8444            5.7627+-0.7553          might be 1.0223x faster
   global-object-access-with-mutating-structure   
                                                      5.9324+-0.3212            5.6406+-0.1730          might be 1.0517x faster
   global-var-const-infer-fire-from-opt               0.7453+-0.0530     ?      0.8030+-0.1821        ? might be 1.0774x slower
   global-var-const-infer                             0.6402+-0.0193     ?      0.6435+-0.0252        ?
   hard-overflow-check-equal                         26.8173+-0.8812     ?     27.2498+-0.5897        ? might be 1.0161x slower
   hard-overflow-check                               27.1974+-1.2840           26.8636+-0.8529          might be 1.0124x faster
   HashMap-put-get-iterate-keys                      26.6273+-2.4773     ?     27.3704+-1.7698        ? might be 1.0279x slower
   HashMap-put-get-iterate                           28.6505+-0.4044           28.3879+-1.7276        
   HashMap-string-put-get-iterate                    24.7798+-1.9988           24.7229+-1.0515        
   hoist-make-rope                                    8.6926+-0.6866     ?      9.1154+-0.5983        ? might be 1.0486x slower
   hoist-poly-check-structure-effectful-loop   
                                                      3.7832+-0.1933     ?      3.7859+-0.2515        ?
   hoist-poly-check-structure                         3.1440+-0.0859     ?      3.2017+-0.0895        ? might be 1.0184x slower
   imul-double-only                                   7.6722+-0.3187            7.6594+-0.4216        
   imul-int-only                                      8.6572+-1.1333     ?      8.8630+-1.3790        ? might be 1.0238x slower
   imul-mixed                                         7.1301+-0.6902            6.9879+-0.6372          might be 1.0204x faster
   in-four-cases                                     18.8048+-0.6975           18.4901+-0.2840          might be 1.0170x faster
   in-one-case-false                                 10.6331+-0.5864           10.3153+-0.3046          might be 1.0308x faster
   in-one-case-true                                  10.3799+-0.4380           10.2549+-0.2928          might be 1.0122x faster
   in-two-cases                                      10.5691+-0.2193     ?     10.7924+-0.5743        ? might be 1.0211x slower
   indexed-properties-in-objects                      2.8371+-0.0515            2.8303+-0.0810        
   infer-closure-const-then-mov-no-inline             3.6836+-0.0757            3.6400+-0.1176          might be 1.0120x faster
   infer-closure-const-then-mov                      16.2108+-0.4772     ?     16.4072+-0.1992        ? might be 1.0121x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.0898+-0.3419           10.9410+-0.2992          might be 1.0136x faster
   infer-closure-const-then-put-to-scope             23.1510+-0.5746           22.7375+-0.9793          might be 1.0182x faster
   infer-closure-const-then-reenter-no-inline   
                                                     46.7696+-1.6995           45.7586+-1.5770          might be 1.0221x faster
   infer-closure-const-then-reenter                  23.5065+-0.7885           23.4614+-0.2335        
   infer-constant-global-property                     3.6318+-0.2888            3.5029+-0.1554          might be 1.0368x faster
   infer-constant-property                            2.7313+-0.1585            2.6191+-0.0408          might be 1.0428x faster
   infer-one-time-closure-ten-vars                    8.0223+-0.5464            7.7778+-0.4264          might be 1.0314x faster
   infer-one-time-closure-two-vars                    7.5074+-0.5435     ?      7.6341+-0.4072        ? might be 1.0169x slower
   infer-one-time-closure                             7.2864+-0.1241     !      8.1156+-0.6913        ! definitely 1.1138x slower
   infer-one-time-deep-closure                       10.8826+-0.3530     ?     11.0083+-0.3341        ? might be 1.0116x slower
   inline-arguments-access                            3.9367+-0.3641            3.7952+-0.2933          might be 1.0373x faster
   inline-arguments-aliased-access                    3.8150+-0.2379     ?      3.8318+-0.3102        ?
   inline-arguments-local-escape                      3.9107+-0.3002     ?      4.1896+-0.5934        ? might be 1.0713x slower
   inline-get-scoped-var                              4.5689+-0.1568     ?      4.6273+-0.1131        ? might be 1.0128x slower
   inlined-put-by-id-transition                      10.4813+-1.0530           10.3165+-0.5119          might be 1.0160x faster
   inlined-put-by-val-with-string-transition   
                                                     44.3980+-1.3479     ?     45.7768+-2.1086        ? might be 1.0311x slower
   inlined-put-by-val-with-symbol-transition   
                                                     43.6133+-1.2236     ?     44.0684+-1.2127        ? might be 1.0104x slower
   int-or-other-abs-then-get-by-val                   4.5763+-0.1591     ?      4.5836+-0.1111        ?
   int-or-other-abs-zero-then-get-by-val             15.9208+-0.5030     ?     16.1219+-1.1718        ? might be 1.0126x slower
   int-or-other-add-then-get-by-val                   4.2619+-0.1037            4.2243+-0.0401        
   int-or-other-add                                   5.3857+-0.9832            5.1174+-0.2958          might be 1.0524x faster
   int-or-other-div-then-get-by-val                   3.8485+-0.0869     ?      3.8984+-0.1085        ? might be 1.0130x slower
   int-or-other-max-then-get-by-val                   3.8648+-0.1261     ?      3.8810+-0.0612        ?
   int-or-other-min-then-get-by-val                   3.9876+-0.2084            3.8639+-0.1055          might be 1.0320x faster
   int-or-other-mod-then-get-by-val                   3.6510+-0.0361     ?      3.6537+-0.0387        ?
   int-or-other-mul-then-get-by-val                   3.6299+-0.0199     ?      3.6902+-0.1316        ? might be 1.0166x slower
   int-or-other-neg-then-get-by-val                   4.1597+-0.0361     !      4.2583+-0.0366        ! definitely 1.0237x slower
   int-or-other-neg-zero-then-get-by-val             15.9041+-0.4917           15.7674+-0.4763        
   int-or-other-sub-then-get-by-val                   4.1724+-0.0583            4.1645+-0.0711        
   int-or-other-sub                                   3.5414+-0.1743            3.5203+-0.0822        
   int-overflow-local                                 4.3131+-0.2739     ?      4.3646+-0.3609        ? might be 1.0120x slower
   Int16Array-alloc-long-lived                       45.6779+-1.2955     ?     46.0633+-1.6710        ?
   Int16Array-bubble-sort-with-byteLength            22.8134+-0.7659           21.9526+-0.3753          might be 1.0392x faster
   Int16Array-bubble-sort                            20.6830+-0.7429     ?     21.4669+-1.1069        ? might be 1.0379x slower
   Int16Array-load-int-mul                            1.6672+-0.2212            1.5969+-0.1113          might be 1.0441x faster
   Int16Array-to-Int32Array-set                      45.5819+-0.7727     ?     46.3759+-1.3484        ? might be 1.0174x slower
   Int32Array-alloc-large                            12.5947+-0.4868           12.1942+-0.5315          might be 1.0328x faster
   Int32Array-alloc-long-lived                       50.5643+-1.6367           50.3169+-1.4325        
   Int32Array-alloc                                   3.2571+-0.1001            3.1625+-0.1265          might be 1.0299x faster
   Int32Array-Int8Array-view-alloc                    5.9389+-0.2953     ?      6.0649+-0.2991        ? might be 1.0212x slower
   int52-spill                                        4.7963+-0.1696            4.7792+-0.2464        
   Int8Array-alloc-long-lived                        42.2169+-1.5021           41.8659+-1.7092        
   Int8Array-load-with-byteLength                     3.4647+-0.0818     ?      3.4841+-0.0577        ?
   Int8Array-load                                     3.4466+-0.0583     ?      3.4493+-0.0534        ?
   integer-divide                                    10.3760+-0.1525     ?     10.4465+-0.3007        ?
   integer-modulo                                     1.6426+-0.0650     ?      1.7432+-0.2026        ? might be 1.0613x slower
   is-boolean-fold-tricky                             3.8095+-0.0740            3.7481+-0.0248          might be 1.0164x faster
   is-boolean-fold                                    2.6830+-0.0556            2.6669+-0.0469        
   is-function-fold-tricky-internal-function   
                                                      9.8333+-0.1392            9.5560+-0.1992          might be 1.0290x faster
   is-function-fold-tricky                            4.0459+-0.0901     ?      4.2534+-0.2815        ? might be 1.0513x slower
   is-function-fold                                   2.6800+-0.0606     ?      2.8168+-0.1632        ? might be 1.0511x slower
   is-number-fold-tricky                              4.0834+-0.2236            3.9463+-0.0719          might be 1.0347x faster
   is-number-fold                                     2.7081+-0.0856            2.6811+-0.0391          might be 1.0101x faster
   is-object-or-null-fold-functions                   2.8922+-0.2271            2.7997+-0.1912          might be 1.0330x faster
   is-object-or-null-fold-less-tricky                 4.0767+-0.1281     ?      4.1368+-0.1788        ? might be 1.0147x slower
   is-object-or-null-fold-tricky                      5.1335+-0.4184            4.8901+-0.1805          might be 1.0498x faster
   is-object-or-null-fold                             2.6891+-0.0505     ?      2.7105+-0.0463        ?
   is-object-or-null-trickier-function                4.1081+-0.1032            4.0287+-0.0890          might be 1.0197x faster
   is-object-or-null-trickier-internal-function   
                                                      9.7331+-0.1236     ?     10.0073+-0.6459        ? might be 1.0282x slower
   is-object-or-null-tricky-function                  4.0703+-0.0715     ?      4.0746+-0.0871        ?
   is-object-or-null-tricky-internal-function   
                                                      7.3404+-0.0328            7.3101+-0.2811        
   is-string-fold-tricky                              4.2396+-0.6704            4.0291+-0.1800          might be 1.0522x faster
   is-string-fold                                     2.7256+-0.1699            2.6801+-0.0408          might be 1.0170x faster
   is-undefined-fold-tricky                           3.3944+-0.0845            3.3620+-0.0531        
   is-undefined-fold                                  2.7233+-0.0958            2.6700+-0.0695          might be 1.0199x faster
   JSONP-negative-0                                   0.2864+-0.0114     ?      0.2893+-0.0252        ?
   large-int-captured                                 4.1503+-0.0661     ?      4.2484+-0.2341        ? might be 1.0236x slower
   large-int-neg                                     13.9961+-0.2439     ?     14.5700+-0.6797        ? might be 1.0410x slower
   large-int                                         13.0755+-0.1751     ?     13.6576+-1.2919        ? might be 1.0445x slower
   load-varargs-elimination                          21.4432+-1.4373           20.9776+-0.7784          might be 1.0222x faster
   logical-not-weird-types                            3.1639+-0.2285            3.1019+-0.0617          might be 1.0200x faster
   logical-not                                        4.4610+-0.0772     ?      4.5331+-0.0846        ? might be 1.0162x slower
   lots-of-fields                                    10.2998+-0.3663            9.6913+-0.5463          might be 1.0628x faster
   make-indexed-storage                               2.9233+-0.0986            2.9162+-0.2040        
   make-rope-cse                                      3.9633+-0.2125            3.8304+-0.1586          might be 1.0347x faster
   marsaglia-larger-ints                             32.5304+-1.1504     ?     32.5691+-0.8361        ?
   marsaglia-osr-entry                               21.7617+-0.6664     ?     22.0083+-0.6273        ? might be 1.0113x slower
   math-random                                       11.7957+-0.7027           11.4657+-0.2233          might be 1.0288x faster
   math-with-out-of-bounds-array-values              22.7008+-0.4971           21.7178+-0.6771          might be 1.0453x faster
   max-boolean                                        2.7097+-0.1197            2.6726+-0.0555          might be 1.0139x faster
   method-on-number                                  17.1987+-1.4205           16.7081+-0.7233          might be 1.0294x faster
   min-boolean                                        2.6403+-0.0479     ?      2.7679+-0.1338        ? might be 1.0483x slower
   minus-boolean-double                               3.2539+-0.2761            3.2123+-0.2618          might be 1.0130x faster
   minus-boolean                                      2.3518+-0.0516     ?      2.3688+-0.0438        ?
   misc-strict-eq                                    29.6355+-1.1038           29.2971+-1.3487          might be 1.0116x faster
   mod-boolean-double                                11.3233+-0.2139           11.2588+-0.2485        
   mod-boolean                                        8.3353+-0.1955     ?      8.4618+-0.1349        ? might be 1.0152x slower
   mul-boolean-double                                 3.6664+-0.1008            3.6341+-0.1429        
   mul-boolean                                        2.9042+-0.1053     ?      2.9470+-0.0874        ? might be 1.0147x slower
   neg-boolean                                        3.1341+-0.0464            3.1228+-0.0511        
   negative-zero-divide                               0.4405+-0.0708            0.3915+-0.0375          might be 1.1252x faster
   negative-zero-modulo                               0.3714+-0.0082     ?      0.4129+-0.0387        ? might be 1.1115x slower
   negative-zero-negate                               0.3733+-0.0349     ?      0.3918+-0.0548        ? might be 1.0496x slower
   nested-function-parsing                           46.7397+-0.9239           46.4178+-1.3744        
   new-array-buffer-dead                             87.9237+-0.6844     ?     88.9602+-1.3622        ? might be 1.0118x slower
   new-array-buffer-push                              6.7965+-0.2457     ?      7.3048+-0.6249        ? might be 1.0748x slower
   new-array-dead                                    15.5291+-0.7478           15.2931+-0.9425          might be 1.0154x faster
   new-array-push                                     4.6360+-0.3747            4.4539+-0.2184          might be 1.0409x faster
   no-inline-constructor                             30.4717+-0.8290     ?     31.0397+-1.2005        ? might be 1.0186x slower
   number-test                                        3.0634+-0.1283            3.0229+-0.1556          might be 1.0134x faster
   object-closure-call                                4.8930+-0.0697     ?      5.1064+-0.3300        ? might be 1.0436x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.6458+-0.6801     ?      4.8013+-0.7427        ? might be 1.0335x slower
   object-test                                        2.7827+-0.1716     ?      2.8650+-0.3666        ? might be 1.0296x slower
   obvious-sink-pathology-taken                      99.4376+-1.7261           99.1679+-1.3846        
   obvious-sink-pathology                            30.0693+-0.3519     ?     31.1021+-2.1565        ? might be 1.0343x slower
   obviously-elidable-new-object                     29.0850+-0.6837           29.0477+-0.7457        
   plus-boolean-arith                                 2.4018+-0.0309     !      2.5015+-0.0648        ! definitely 1.0415x slower
   plus-boolean-double                                3.1506+-0.0427            3.0985+-0.0147          might be 1.0168x faster
   plus-boolean                                       2.5464+-0.0537            2.5290+-0.0270        
   poly-chain-access-different-prototypes-simple   
                                                      2.6280+-0.0559     ?      2.6615+-0.0760        ? might be 1.0127x slower
   poly-chain-access-different-prototypes             2.6319+-0.1051            2.6183+-0.1056        
   poly-chain-access-simpler                          2.6465+-0.0376            2.6063+-0.0550          might be 1.0154x faster
   poly-chain-access                                  2.5815+-0.0771            2.5572+-0.0226        
   poly-stricteq                                     53.2695+-1.0358           52.4821+-0.9138          might be 1.0150x faster
   polymorphic-array-call                             1.4248+-0.2578            1.2704+-0.0401          might be 1.1216x faster
   polymorphic-get-by-id                              2.9204+-0.0532            2.9164+-0.0551        
   polymorphic-put-by-id                             25.6916+-1.0124     ?     27.3895+-1.7828        ? might be 1.0661x slower
   polymorphic-put-by-val-with-string                27.3751+-0.4162           27.2852+-0.4042        
   polymorphic-put-by-val-with-symbol                28.0659+-0.6849     ?     28.6196+-1.4889        ? might be 1.0197x slower
   polymorphic-structure                             12.4918+-0.2599     ?     12.6239+-0.2827        ? might be 1.0106x slower
   polyvariant-monomorphic-get-by-id                  6.5589+-0.8719     ?      6.7360+-0.6891        ? might be 1.0270x slower
   proto-getter-access                                8.3059+-0.2952     ?      8.5059+-0.3354        ? might be 1.0241x slower
   prototype-access-with-mutating-prototype           5.4838+-0.2185     ?      5.5070+-0.1919        ?
   put-by-id-replace-and-transition                   8.4331+-0.7330     ?      9.3868+-1.9798        ? might be 1.1131x slower
   put-by-id-slightly-polymorphic                     2.7363+-0.0324            2.7128+-0.0554        
   put-by-id                                         10.4288+-0.3948            9.9801+-0.5461          might be 1.0450x faster
   put-by-val-direct                                  0.3945+-0.0197     ?      0.4018+-0.0283        ? might be 1.0185x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.5424+-0.3956            5.3834+-0.1713          might be 1.0295x faster
   put-by-val-machine-int                             2.6846+-0.1395     ?      2.7364+-0.1420        ? might be 1.0193x slower
   put-by-val-with-string-replace-and-transition   
                                                     10.5342+-0.2300     ?     10.6267+-0.6077        ?
   put-by-val-with-string-slightly-polymorphic   
                                                      3.1549+-0.4190            2.9858+-0.0350          might be 1.0566x faster
   put-by-val-with-string                            10.9401+-0.6417           10.5373+-0.5496          might be 1.0382x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     12.0973+-0.4540     ?     12.5972+-0.4060        ? might be 1.0413x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2365+-0.0911            3.1916+-0.0809          might be 1.0141x faster
   put-by-val-with-symbol                            11.1254+-0.7773     ?     11.1654+-1.7667        ?
   rare-osr-exit-on-local                            14.0502+-0.2537           13.8329+-0.1167          might be 1.0157x faster
   raytrace-with-empty-try-catch                      5.4707+-0.0913     ?      5.4863+-0.1317        ?
   raytrace-with-try-catch                           11.0917+-1.3056     ?     11.6473+-1.0037        ? might be 1.0501x slower
   register-pressure-from-osr                        16.7136+-0.5419     ?     16.7453+-0.5039        ?
   repeat-multi-get-by-offset                        20.7320+-0.7370     ?     21.3690+-0.7724        ? might be 1.0307x slower
   richards-empty-try-catch                          61.4268+-0.7291           60.2858+-1.7372          might be 1.0189x faster
   richards-try-catch                               237.1702+-1.1212          235.8557+-1.6636        
   setter-prototype                                   7.9708+-0.2794            7.9325+-0.3730        
   setter                                             5.6239+-0.4127     ?      5.6264+-0.6630        ?
   simple-activation-demo                            24.4445+-0.6533     ?     24.6763+-0.7692        ?
   simple-getter-access                              10.6575+-0.1337     ?     10.7454+-0.3555        ?
   simple-poly-call-nested                            8.6481+-0.5471     ?      9.2164+-0.8856        ? might be 1.0657x slower
   simple-poly-call                                   1.4904+-0.1727            1.3216+-0.0446          might be 1.1278x faster
   sin-boolean                                       20.2495+-1.7737           19.1635+-1.8783          might be 1.0567x faster
   singleton-scope                                   57.1729+-2.3547           56.0645+-0.6488          might be 1.0198x faster
   sink-function                                     10.0847+-0.7243            9.6688+-1.0804          might be 1.0430x faster
   sink-huge-activation                              17.0705+-0.8813           16.6033+-0.7077          might be 1.0281x faster
   sinkable-new-object-dag                           52.9301+-1.2133           52.1761+-1.5855          might be 1.0145x faster
   sinkable-new-object-taken                         42.0698+-1.5683     ?     42.8830+-2.3188        ? might be 1.0193x slower
   sinkable-new-object                               31.2441+-1.0657           30.2010+-0.8672          might be 1.0345x faster
   slow-array-profile-convergence                     2.7642+-0.1351            2.6420+-0.1177          might be 1.0462x faster
   slow-convergence                                   2.6124+-0.1891            2.5796+-0.1349          might be 1.0127x faster
   slow-ternaries                                    17.9786+-0.6012     ?     17.9943+-1.5711        ?
   sorting-benchmark                                 17.9616+-0.8831           17.7994+-0.6436        
   sparse-conditional                                 1.2624+-0.1391            1.1891+-0.0169          might be 1.0617x faster
   splice-to-remove                                  12.8320+-0.9285           12.5158+-0.3701          might be 1.0253x faster
   string-char-code-at                               13.4225+-0.4471           13.1915+-0.2235          might be 1.0175x faster
   string-concat-object                               2.4030+-0.2784            2.1897+-0.0618          might be 1.0974x faster
   string-concat-pair-object                          2.1734+-0.1110     ?      2.2109+-0.0668        ? might be 1.0172x slower
   string-concat-pair-simple                          9.6307+-0.3744     ?      9.9141+-0.8784        ? might be 1.0294x slower
   string-concat-simple                               9.7135+-0.9760            9.2987+-0.1994          might be 1.0446x faster
   string-cons-repeat                                 6.6109+-0.0854     ?      6.8525+-0.7315        ? might be 1.0365x slower
   string-cons-tower                                  7.0437+-0.3795            6.7192+-0.2245          might be 1.0483x faster
   string-equality                                   20.7936+-0.3165     ^     18.3229+-0.3072        ^ definitely 1.1348x faster
   string-get-by-val-big-char                         6.5120+-0.1361     ?      6.5597+-0.0699        ?
   string-get-by-val-out-of-bounds-insane             3.1029+-0.0760     ?      3.1266+-0.1069        ?
   string-get-by-val-out-of-bounds                    4.0743+-0.1267            3.9530+-0.0837          might be 1.0307x faster
   string-get-by-val                                  2.8408+-0.0746     ?      2.9363+-0.1082        ? might be 1.0337x slower
   string-hash                                        2.0219+-0.2594            1.8886+-0.0232          might be 1.0706x faster
   string-long-ident-equality                        15.1934+-0.5932           15.1691+-0.4677        
   string-out-of-bounds                              10.0580+-0.2809     ?     10.3759+-0.5642        ? might be 1.0316x slower
   string-repeat-arith                               25.7879+-0.8062     ?     26.8907+-1.3225        ? might be 1.0428x slower
   string-rope-with-object                           20.9983+-1.7417     ?     21.1098+-0.5121        ?
   string-sub                                        32.1211+-0.3760     !     34.7462+-1.6557        ! definitely 1.0817x slower
   string-test                                        2.9137+-0.1548            2.8686+-0.0082          might be 1.0157x faster
   string-var-equality                               29.1145+-1.6265           28.1971+-0.3376          might be 1.0325x faster
   structure-hoist-over-transitions                   2.3709+-0.0986            2.3667+-0.0914        
   substring-concat-weird                            35.9656+-0.7267     ?     37.1201+-1.3406        ? might be 1.0321x slower
   substring-concat                                  39.6964+-0.9941           39.5175+-0.9661        
   substring                                         44.8358+-0.8950     ?     45.8905+-1.7141        ? might be 1.0235x slower
   switch-char-constant                               2.7334+-0.0356     ?      2.7343+-0.0661        ?
   switch-char                                        6.7403+-1.0319            6.1025+-0.9188          might be 1.1045x faster
   switch-constant                                   10.0359+-1.3205            8.8996+-1.2356          might be 1.1277x faster
   switch-string-basic-big-var                       14.8060+-0.5475           14.3126+-0.4141          might be 1.0345x faster
   switch-string-basic-big                           14.8367+-0.5199     ?     15.2126+-0.5235        ? might be 1.0253x slower
   switch-string-basic-var                           13.2536+-0.2764     ?     13.6806+-0.4608        ? might be 1.0322x slower
   switch-string-basic                               12.8506+-0.2123     ?     13.2926+-0.6779        ? might be 1.0344x slower
   switch-string-big-length-tower-var                18.5384+-0.4424     ?     19.4410+-1.7357        ? might be 1.0487x slower
   switch-string-length-tower-var                    13.3627+-0.1813     !     14.2546+-0.3565        ! definitely 1.0667x slower
   switch-string-length-tower                        12.3667+-0.7742           11.9456+-0.3364          might be 1.0353x faster
   switch-string-short                               12.1031+-0.4446           12.0143+-0.3562        
   switch                                            11.4988+-0.5910     ?     11.6169+-0.6553        ? might be 1.0103x slower
   symbol-tostringtag                                 3.6540+-0.7163            3.3597+-0.2700          might be 1.0876x faster
   tear-off-arguments-simple                          3.1641+-0.2400     ?      3.1747+-0.1877        ?
   tear-off-arguments                                 4.1836+-0.2078            4.1208+-0.0975          might be 1.0152x faster
   temporal-structure                                11.6993+-0.0915     ?     11.8173+-0.2786        ? might be 1.0101x slower
   to-int32-boolean                                  12.5309+-0.1546     ?     13.1243+-0.6319        ? might be 1.0474x slower
   try-catch-get-by-val-cloned-arguments             10.1902+-0.7085            9.8657+-0.4423          might be 1.0329x faster
   try-catch-get-by-val-direct-arguments              2.4705+-0.2983            2.2910+-0.0760          might be 1.0783x faster
   try-catch-get-by-val-scoped-arguments              4.6873+-0.4757            4.5447+-0.4261          might be 1.0314x faster
   typed-array-get-set-by-val-profiling              28.1272+-1.1738           27.7713+-0.6721          might be 1.0128x faster
   undefined-property-access                        213.5545+-0.8045     ?    215.7687+-3.7059        ? might be 1.0104x slower
   undefined-test                                     3.0206+-0.1574     ?      3.2204+-0.4080        ? might be 1.0661x slower
   unprofiled-licm                                    9.6554+-0.6111            9.3550+-0.1878          might be 1.0321x faster
   v8-raytrace-with-empty-try-catch                  57.1261+-1.8032     ?     57.1710+-1.9938        ?
   v8-raytrace-with-try-catch                        68.2616+-2.2285           67.1704+-1.3114          might be 1.0162x faster
   varargs-call                                      13.0924+-0.3044     ?     13.4502+-0.6015        ? might be 1.0273x slower
   varargs-construct-inline                          22.6349+-1.0228           22.4932+-1.3316        
   varargs-construct                                 20.7483+-0.6551           20.3505+-0.6285          might be 1.0195x faster
   varargs-inline                                     8.7249+-0.1966     ?      8.8072+-0.1666        ?
   varargs-strict-mode                               10.0214+-0.6831            9.9267+-0.3989        
   varargs                                            9.7186+-0.1755     ?      9.7642+-0.3223        ?
   weird-inlining-const-prop                          2.4086+-0.1799            2.3780+-0.1210          might be 1.0128x faster

   <geometric>                                        8.4233+-0.0240            8.4025+-0.0299          might be 1.0025x faster

                                                        TipOfTree                  FastDyn                                      
AsmBench:
   bigfib.cpp                                       488.7426+-90.8830         448.9087+-8.2549          might be 1.0887x faster
   cray.c                                           393.4331+-2.6926          392.9294+-2.4441        
   dry.c                                            425.0575+-5.6374          424.3868+-8.4364        
   FloatMM.c                                        684.5850+-2.5567     ?    689.5412+-11.3132       ?
   gcc-loops.cpp                                   3431.6389+-9.4354     ?   3432.8980+-19.2557       ?
   n-body.c                                         824.4081+-2.8235     ?    828.0731+-6.7211        ?
   Quicksort.c                                      411.6755+-5.2824          408.2388+-2.0263        
   stepanov_container.cpp                          3496.0503+-19.2473    ?   3530.7854+-108.4979      ?
   Towers.c                                         237.5852+-4.0042          236.0856+-1.2685        

   <geometric>                                      722.1598+-12.3658         716.6909+-4.0888          might be 1.0076x faster

                                                        TipOfTree                  FastDyn                                      
CompressionBench:
   huffman                                           61.9609+-0.5393     ?     62.6242+-1.6132        ? might be 1.0107x slower
   arithmetic-simple                                276.1444+-2.1664          275.6372+-2.5819        
   arithmetic-precise                               253.8611+-2.4425          253.0480+-2.2872        
   arithmetic-complex-precise                       256.5291+-14.3699         249.0761+-2.9646          might be 1.0299x faster
   arithmetic-precise-order-0                       288.7501+-3.8005          286.9470+-0.7351        
   arithmetic-precise-order-1                       308.5241+-2.9162     ?    309.2931+-4.4422        ?
   arithmetic-precise-order-2                       355.7136+-3.0981          355.5125+-4.1996        
   arithmetic-simple-order-1                        322.6538+-3.1348          322.0189+-2.0808        
   arithmetic-simple-order-2                        377.2183+-6.7780          375.4242+-6.4170        
   lz-string                                        333.5010+-40.1963         313.2198+-5.9923          might be 1.0648x faster

   <geometric>                                      260.1908+-2.5337          257.8413+-1.4029          might be 1.0091x faster

                                                        TipOfTree                  FastDyn                                      
Geomean of preferred means:
   <scaled-result>                                   50.9826+-0.1137           50.8705+-0.0551          might be 1.0022x faster
Comment 5 WebKit Commit Bot 2015-12-16 11:20:56 PST
Attachment 267475 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dynbench.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:142:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:208:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:223:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 6 Geoffrey Garen 2015-12-16 12:03:39 PST
Build is angry: 


Last 500 characters of output:
__ZN3JSC9Structure33prototypeChainMayInterceptStoreToERNS_2VMENS_12PropertyNameE", referenced from:
      __ZN3JSC8JSObject11putInternalEPNS_6JSCellEPNS_9ExecStateENS_12PropertyNameENS_7JSValueERNS_15PutPropertySlotE in dynbench.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Comment 7 Geoffrey Garen 2015-12-16 12:09:36 PST
Comment on attachment 267475 [details]
the patch

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

r=me if you fix the build

> Source/JavaScriptCore/runtime/JSCJSValueInlines.h:755
> +ALWAYS_INLINE void JSValue::putInternal(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)

Why isn't JSValue::putInternal just the new put()?

I think either this should be the new put or, if it's too big, it should be renamed to putInline() and called by put(), and put() should move out-of-line.

> Source/JavaScriptCore/runtime/JSObject.h:144
> +    static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&);

I'd call this putInline() or inlinePut().

"Internal" doesn't tell me when I'm allowed to use this. I think I'm allowed to use this whenever I like, as long as I'm willing to pay for inlining.
Comment 8 Filip Pizlo 2015-12-16 12:21:22 PST
(In reply to comment #7)
> Comment on attachment 267475 [details]
> the patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=267475&action=review
> 
> r=me if you fix the build

I think I've got it.  An easy fix would have been to make GetterSetter.h into a private header and then mark more things JS_EXPORT_PRIVATE.  I'm going in a different direction: I'm adding a putInternalSlow() that goes into JSObject.cpp, and contains all of those parts of putInternal() that require getter/setter code.

> 
> > Source/JavaScriptCore/runtime/JSCJSValueInlines.h:755
> > +ALWAYS_INLINE void JSValue::putInternal(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
> 
> Why isn't JSValue::putInternal just the new put()?

It's huge.

> 
> I think either this should be the new put or, if it's too big, it should be
> renamed to putInline() and called by put(), and put() should move
> out-of-line.

Sure.

> 
> > Source/JavaScriptCore/runtime/JSObject.h:144
> > +    static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&);
> 
> I'd call this putInline() or inlinePut().

Sure.

> 
> "Internal" doesn't tell me when I'm allowed to use this. I think I'm allowed
> to use this whenever I like, as long as I'm willing to pay for inlining.

That's true.
Comment 9 Filip Pizlo 2015-12-16 12:25:53 PST
> > > Source/JavaScriptCore/runtime/JSObject.h:144
> > > +    static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&);
> > 
> > I'd call this putInline() or inlinePut().
> 
> Sure.

I went with putInline().
Comment 10 Filip Pizlo 2015-12-16 12:50:25 PST
Created attachment 267484 [details]
patch for landing
Comment 11 WebKit Commit Bot 2015-12-16 12:52:05 PST
Attachment 267484 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dynbench.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:142:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:208:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:223:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 12 Filip Pizlo 2015-12-16 13:02:14 PST
Here's the performance of dynbench before this change:

Non Strict Dynamic Get By Id: :                                                           20.1933 +- 0.1588
Non Strict Dynamic Put By Id Replace: :                                                   67.5606 +- 0.9416
Non Strict Dynamic Allocation and Put By Id Transition: :                                118.6623 +- 1.5057
Non Strict Dynamic Get By Id With Dynamic Store Context: :                                20.9737 +- 1.2768
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: :                        46.9602 +- 1.4932
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: :      99.3949 +- 1.1866

Here's the performance after:

Non Strict Dynamic Get By Id: :                                                           19.7731 +- 0.3310
Non Strict Dynamic Put By Id Replace: :                                                   59.9378 +- 0.5400
Non Strict Dynamic Allocation and Put By Id Transition: :                                107.3013 +- 2.6068
Non Strict Dynamic Get By Id With Dynamic Store Context: :                                20.0169 +- 0.6318
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: :                        37.7219 +- 1.5186
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: :      90.0028 +- 2.8719
Comment 13 Filip Pizlo 2015-12-16 13:07:14 PST
Created attachment 267485 [details]
patch for landing
Comment 14 WebKit Commit Bot 2015-12-16 13:08:52 PST
Attachment 267485 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dynbench.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:142:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:208:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:223:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 15 Filip Pizlo 2015-12-16 13:13:48 PST
Created attachment 267486 [details]
one more time!
Comment 16 WebKit Commit Bot 2015-12-16 13:15:29 PST
Attachment 267486 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dynbench.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:142:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:208:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:223:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 17 Filip Pizlo 2015-12-16 14:39:59 PST
Landed in http://trac.webkit.org/changeset/194175