Bug 145995 - Function parameters should be parsed in the same parser arena as the function body
Summary: Function parameters should be parsed in the same parser arena as the function...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Saam Barati
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-06-15 17:26 PDT by Saam Barati
Modified: 2015-07-17 11:50 PDT (History)
10 users (show)

See Also:


Attachments
it begins (14.71 KB, patch)
2015-07-11 18:29 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (64.39 KB, patch)
2015-07-11 20:23 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (80.52 KB, patch)
2015-07-13 13:13 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (82.36 KB, patch)
2015-07-14 00:03 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (190.94 KB, patch)
2015-07-14 17:21 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (190.94 KB, patch)
2015-07-14 17:28 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (190.18 KB, patch)
2015-07-14 18:19 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (190.19 KB, patch)
2015-07-16 15:18 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (191.23 KB, patch)
2015-07-16 17:05 PDT, Saam Barati
no flags Details | Formatted Diff | Diff
patch (194.23 KB, patch)
2015-07-17 10:53 PDT, Saam Barati
ysuzuki: review+
commit-queue: commit-queue-
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Saam Barati 2015-06-15 17:26:00 PDT
This will allow destructuring nodes with default values in a function parameter to work.
Also, this will help simplify default function parameter values.
Comment 1 Saam Barati 2015-07-11 18:29:31 PDT
Created attachment 256671 [details]
it begins
Comment 2 Saam Barati 2015-07-11 20:23:12 PDT
Created attachment 256675 [details]
patch

More work is done.
I need to make some things clearer and also find all the places we assume SourceCode starts with "{", and find other assumptions we make about a SourceCode representing
a function body.
Comment 3 Saam Barati 2015-07-13 13:13:57 PDT
Created attachment 256716 [details]
patch

getting closer
Comment 4 Saam Barati 2015-07-14 00:03:16 PDT
Created attachment 256762 [details]
patch

almost there, just need to do some cleanup work.
Comment 5 Saam Barati 2015-07-14 17:21:34 PDT
Created attachment 256813 [details]
patch
Comment 6 WebKit Commit Bot 2015-07-14 17:24:06 PDT
Attachment 256813 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/FunctionPrototype.cpp:94:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/parser/Parser.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/parser/Parser.cpp:1466:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/parser/Parser.cpp:1468:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 65 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 7 Saam Barati 2015-07-14 17:28:16 PDT
Created attachment 256814 [details]
patch
Comment 8 WebKit Commit Bot 2015-07-14 17:31:19 PDT
Attachment 256814 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/FunctionPrototype.cpp:94:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/parser/Parser.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/parser/Parser.cpp:1466:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/parser/Parser.cpp:1468:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 65 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 9 Saam Barati 2015-07-14 18:19:55 PDT
Created attachment 256815 [details]
patch

fix style.
Comment 10 Saam Barati 2015-07-14 23:10:27 PDT
Looks like a win for Octane's jquery/closure

VMs tested:
"original" at /Volumes/Data/WK/c/OpenSource/WebKitBuild/Release/jsc (r186808)
"parserArena" at /Volumes/Data/WK/a/OpenSource/WebKitBuild/Release/jsc (r186808)

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

                                                         original                parserArena                                    
SunSpider:
   3d-cube                                            4.0566+-0.1041     ?      4.1190+-0.0549        ? might be 1.0154x slower
   3d-morph                                           5.0283+-0.2384            4.9284+-0.1246          might be 1.0203x faster
   3d-raytrace                                        4.9236+-0.1528            4.8785+-0.1876        
   access-binary-trees                                2.0665+-0.2026            1.9825+-0.0652          might be 1.0424x faster
   access-fannkuch                                    4.9886+-0.0823            4.9330+-0.0327          might be 1.0113x faster
   access-nbody                                       2.3308+-0.0945            2.3128+-0.0790        
   access-nsieve                                      3.0926+-0.0659            3.0914+-0.1209        
   bitops-3bit-bits-in-byte                           1.3527+-0.0412            1.3420+-0.0227        
   bitops-bits-in-byte                                3.0561+-0.0586     ?      3.0905+-0.0356        ? might be 1.0112x slower
   bitops-bitwise-and                                 1.9004+-0.0647            1.8739+-0.0310          might be 1.0141x faster
   bitops-nsieve-bits                                 2.7601+-0.0475            2.7473+-0.0262        
   controlflow-recursive                              1.9079+-0.0988            1.8944+-0.1164        
   crypto-aes                                         3.5603+-0.1074     ?      3.6525+-0.1513        ? might be 1.0259x slower
   crypto-md5                                         2.3054+-0.0584     ?      2.4748+-0.1810        ? might be 1.0735x slower
   crypto-sha1                                        2.3412+-0.1412     ?      2.3564+-0.1662        ?
   date-format-tofte                                  6.3396+-0.2528     ?      6.3408+-0.2156        ?
   date-format-xparb                                  4.6555+-0.4075            4.4728+-0.1608          might be 1.0409x faster
   math-cordic                                        2.6022+-0.0583            2.5785+-0.0596        
   math-partial-sums                                  4.2284+-0.0596     ?      4.2563+-0.0805        ?
   math-spectral-norm                                 1.7198+-0.0353            1.6850+-0.0297          might be 1.0206x faster
   regexp-dna                                         6.3488+-0.3446     ?      6.3596+-0.3710        ?
   string-base64                                      4.2674+-0.1844            4.2332+-0.1612        
   string-fasta                                       5.6248+-0.2156     ?      5.7251+-0.1470        ? might be 1.0178x slower
   string-tagcloud                                    7.8296+-0.2894            7.7648+-0.1495        
   string-unpack-code                                18.9322+-0.4571           18.7162+-0.2444          might be 1.0115x faster
   string-validate-input                              4.3131+-0.0942     ?      4.3279+-0.0936        ?

   <arithmetic>                                       4.3282+-0.0281            4.3130+-0.0240          might be 1.0035x faster

                                                         original                parserArena                                    
LongSpider:
   3d-cube                                          748.5720+-4.5781          746.6973+-2.5905        
   3d-morph                                        1427.6650+-3.7510     ?   1433.4964+-6.0359        ?
   3d-raytrace                                      591.9726+-5.8679          590.4996+-5.6967        
   access-binary-trees                              775.5763+-10.8665    ?    818.2841+-100.9616      ? might be 1.0551x slower
   access-fannkuch                                  263.1493+-2.4986     ?    263.3152+-1.6356        ?
   access-nbody                                     488.0519+-5.1511          486.3771+-4.5767        
   access-nsieve                                    351.8096+-7.5674     ?    353.7068+-8.0424        ?
   bitops-3bit-bits-in-byte                          38.8309+-1.0788           38.5149+-0.9129        
   bitops-bits-in-byte                               76.5209+-2.0781     ?     78.8891+-1.5606        ? might be 1.0309x slower
   bitops-nsieve-bits                               393.7701+-4.7512     ?    394.0207+-4.0610        ?
   controlflow-recursive                            411.9420+-20.2079         409.2651+-7.7972        
   crypto-aes                                       555.0009+-8.5518     ?    556.1525+-6.9283        ?
   crypto-md5                                       445.7911+-3.2292          445.1364+-2.4506        
   crypto-sha1                                      603.7799+-3.4355     ?    604.8678+-6.0550        ?
   date-format-tofte                                485.6542+-12.9571         483.1949+-14.1721       
   date-format-xparb                                639.4885+-12.7862    ?    651.5853+-11.2405       ? might be 1.0189x slower
   hash-map                                         145.2804+-1.2656     ?    146.1568+-2.1473        ?
   math-cordic                                      477.8722+-15.5550         476.3781+-20.2708       
   math-partial-sums                                394.2970+-4.0859          391.0750+-2.0822        
   math-spectral-norm                               524.6047+-1.9298     ?    526.6829+-3.2963        ?
   string-base64                                    329.3938+-3.0386     ?    332.9461+-5.5650        ? might be 1.0108x slower
   string-fasta                                     343.8171+-3.0897          343.1503+-3.9150        
   string-tagcloud                                  171.6422+-1.0676     ?    172.7533+-2.3961        ?

   <geometric>                                      372.5883+-1.1834     ?    374.0938+-2.0383        ? might be 1.0040x slower

                                                         original                parserArena                                    
V8Spider:
   crypto                                            47.0468+-1.1781     ?     47.5657+-0.7732        ? might be 1.0110x slower
   deltablue                                         70.3542+-2.0757     ?     72.2536+-2.1230        ? might be 1.0270x slower
   earley-boyer                                      37.4238+-0.8364           37.2653+-0.7720        
   raytrace                                          27.9650+-0.9724     ?     27.9977+-0.8601        ?
   regexp                                            59.1407+-1.5173           58.4058+-0.2362          might be 1.0126x faster
   richards                                          64.1301+-1.7435     ?     65.9872+-1.6044        ? might be 1.0290x slower
   splay                                             32.5140+-1.1838           32.3408+-1.0002        

   <geometric>                                       45.8395+-0.5232     ?     46.1449+-0.3697        ? might be 1.0067x slower

                                                         original                parserArena                                    
Octane:
   encrypt                                           0.19537+-0.00440    ?     0.19578+-0.00098       ?
   decrypt                                           3.22690+-0.04501          3.21874+-0.04187       
   deltablue                                x2       0.14691+-0.00117    ?     0.14820+-0.00266       ?
   earley                                            0.26578+-0.00194    ?     0.26620+-0.00167       ?
   boyer                                             3.96423+-0.02669          3.94717+-0.02673       
   navier-stokes                            x2       4.72862+-0.01753    ?     4.75172+-0.02210       ?
   raytrace                                 x2       0.94449+-0.02937    ?     0.98266+-0.01986       ? might be 1.0404x slower
   richards                                 x2       0.09789+-0.00065          0.09729+-0.00103       
   splay                                    x2       0.32604+-0.00277    ?     0.32969+-0.00200       ? might be 1.0112x slower
   regexp                                   x2      24.05858+-0.34172         23.89150+-0.33594       
   pdfjs                                    x2      35.62041+-0.62453    ?    35.79472+-0.50881       ?
   mandreel                                 x2      41.95899+-0.24553    ?    46.19874+-8.60987       ? might be 1.1010x slower
   gbemu                                    x2      33.63284+-1.34343         32.44587+-0.39006         might be 1.0366x faster
   closure                                           0.51189+-0.00361    ^     0.50253+-0.00293       ^ definitely 1.0186x faster
   jquery                                            6.59774+-0.03488    ^     6.52435+-0.02778       ^ definitely 1.0112x faster
   box2d                                    x2       9.47209+-0.08205          9.43057+-0.04648       
   zlib                                     x2     354.21082+-10.90381   ?   362.08746+-4.00420       ? might be 1.0222x slower
   typescript                               x2     619.52705+-10.66928       617.57588+-8.79139       

   <geometric>                                       5.32512+-0.02146    ?     5.35934+-0.04898       ? might be 1.0064x slower

                                                         original                parserArena                                    
Kraken:
   ai-astar                                          212.457+-3.624      ?     216.583+-6.814         ? might be 1.0194x slower
   audio-beat-detection                               70.231+-1.146             69.713+-0.862         
   audio-dft                                         104.248+-2.320      ?     105.430+-2.173         ? might be 1.0113x slower
   audio-fft                                          59.877+-0.091      ?      60.049+-0.184         ?
   audio-oscillator                                   58.341+-0.200      ?      58.987+-0.947         ? might be 1.0111x slower
   imaging-darkroom                                   88.540+-0.914             88.394+-1.374         
   imaging-desaturate                                 52.388+-2.224             51.487+-3.138           might be 1.0175x faster
   imaging-gaussian-blur                              80.839+-1.584             80.613+-1.455         
   json-parse-financial                               36.972+-2.081             35.193+-0.343           might be 1.0505x faster
   json-stringify-tinderbox                           26.183+-0.402             25.710+-0.475           might be 1.0184x faster
   stanford-crypto-aes                                50.193+-0.361             49.898+-0.233         
   stanford-crypto-ccm                                37.195+-1.116             36.910+-1.365         
   stanford-crypto-pbkdf2                             91.993+-4.449             91.388+-1.830         
   stanford-crypto-sha256-iterative                   34.846+-0.609      ?      34.901+-0.321         ?

   <arithmetic>                                       71.736+-0.542      ?      71.804+-0.530         ? might be 1.0009x slower

                                                         original                parserArena                                    
JSRegress:
   abc-forward-loop-equal                            28.2504+-0.7628     ?     28.5449+-1.1769        ? might be 1.0104x slower
   abc-postfix-backward-loop                         27.9740+-0.5299     ?     28.2337+-1.0800        ?
   abc-simple-backward-loop                          29.3584+-2.9488           27.8823+-0.8474          might be 1.0529x faster
   abc-simple-forward-loop                           27.9806+-0.9275     ?     28.0172+-0.5514        ?
   abc-skippy-loop                                   20.7948+-0.8707     ?     21.1445+-1.2724        ? might be 1.0168x slower
   abs-boolean                                        2.2619+-0.0490     ?      2.2952+-0.0525        ? might be 1.0147x slower
   adapt-to-double-divide                            15.3046+-0.3206     !     16.2585+-0.6312        ! definitely 1.0623x slower
   aliased-arguments-getbyval                         1.1120+-0.0545     ?      1.1469+-0.0865        ? might be 1.0313x slower
   allocate-big-object                                2.3657+-0.1036     ?      2.5035+-0.1194        ? might be 1.0582x slower
   arguments-named-and-reflective                    10.4029+-0.2268     ?     10.6197+-0.4598        ? might be 1.0208x slower
   arguments-out-of-bounds                            9.3481+-0.3061     ?      9.5527+-0.3002        ? might be 1.0219x slower
   arguments-strict-mode                              9.0991+-0.4123            9.0334+-0.2580        
   arguments                                          8.0334+-0.3045            8.0054+-0.1385        
   arity-mismatch-inlining                            0.7460+-0.0097            0.7278+-0.0246          might be 1.0250x faster
   array-access-polymorphic-structure                 5.4756+-0.1210     ?      5.7168+-0.2938        ? might be 1.0440x slower
   array-nonarray-polymorhpic-access                 23.4629+-0.4444           23.3675+-0.4516        
   array-prototype-every                             76.0206+-1.9847           72.9562+-1.8086          might be 1.0420x faster
   array-prototype-forEach                           73.4281+-1.4709     ^     70.0372+-0.2095        ^ definitely 1.0484x faster
   array-prototype-map                               78.5586+-0.7656           78.3777+-1.5337        
   array-prototype-reduce                            67.0933+-0.2143           67.0624+-0.5810        
   array-prototype-reduceRight                       68.6675+-1.5384           67.6617+-1.0059          might be 1.0149x faster
   array-prototype-some                              75.3539+-1.6476     ^     72.3977+-0.7687        ^ definitely 1.0408x faster
   array-splice-contiguous                           19.5671+-0.4430           19.3347+-0.3994          might be 1.0120x faster
   array-with-double-add                              3.2628+-0.0993            3.1261+-0.0508          might be 1.0437x faster
   array-with-double-increment                        2.9321+-0.1311            2.9036+-0.1724        
   array-with-double-mul-add                          3.9039+-0.0304     ?      3.9382+-0.1502        ?
   array-with-double-sum                              3.0231+-0.0757     ?      3.0415+-0.1221        ?
   array-with-int32-add-sub                           5.3918+-0.1423            5.3627+-0.0861        
   array-with-int32-or-double-sum                     3.1855+-0.1830            3.0322+-0.0579          might be 1.0506x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.6499+-1.0183           25.6038+-1.1116        
   ArrayBuffer-DataView-alloc-long-lived             11.7049+-0.6586           11.6969+-0.2959        
   ArrayBuffer-Int32Array-byteOffset                  3.4437+-0.0941            3.4079+-0.1059          might be 1.0105x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     25.1471+-0.2456     ?     25.2796+-0.1722        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     18.9575+-0.5122     ?     19.7909+-1.3674        ? might be 1.0440x slower
   ArrayBuffer-Int8Array-alloc-long-lived            11.5741+-0.9685           10.9811+-0.4140          might be 1.0540x faster
   ArrayBuffer-Int8Array-alloc                        9.3788+-0.5428            9.2822+-0.3494          might be 1.0104x faster
   asmjs_bool_bug                                    15.3720+-0.1736     ?     15.3957+-0.2268        ?
   assign-custom-setter-polymorphic                   2.4228+-0.1134     ?      2.4976+-0.1095        ? might be 1.0309x slower
   assign-custom-setter                               3.1357+-0.0880     ?      3.2191+-0.0891        ? might be 1.0266x slower
   basic-set                                          7.3530+-0.2171     ?      7.6046+-0.2961        ? might be 1.0342x slower
   big-int-mul                                        3.4695+-0.0369     ?      3.5238+-0.0687        ? might be 1.0157x slower
   boolean-test                                       2.7039+-0.0470            2.6869+-0.0499        
   branch-fold                                        3.4358+-0.0818     ?      3.4417+-0.1071        ?
   branch-on-string-as-boolean                       15.3260+-0.3956     ?     15.8961+-0.6797        ? might be 1.0372x slower
   by-val-generic                                     6.6744+-0.1622            6.6075+-0.1058          might be 1.0101x faster
   call-spread-apply                                 25.2201+-0.6602           25.0700+-0.4996        
   call-spread-call                                  20.6206+-0.9027     ?     20.7403+-0.3753        ?
   captured-assignments                               0.3419+-0.0090     ?      0.3422+-0.0165        ?
   cast-int-to-double                                 4.7456+-0.0961     ?      4.7996+-0.1476        ? might be 1.0114x slower
   cell-argument                                      6.0943+-0.1808            5.9579+-0.1928          might be 1.0229x faster
   cfg-simplify                                       2.5928+-0.0859     ?      2.6271+-0.0796        ? might be 1.0132x slower
   chain-getter-access                                7.6756+-0.2153     ?      7.7881+-0.2325        ? might be 1.0147x slower
   cmpeq-obj-to-obj-other                            10.8312+-0.8802     ?     11.3740+-0.5417        ? might be 1.0501x slower
   constant-test                                      4.5040+-0.0526     ?      4.6375+-0.2298        ? might be 1.0296x slower
   create-lots-of-functions                           9.0361+-0.3184            8.9270+-0.2931          might be 1.0122x faster
   cse-new-array-buffer                               2.2055+-0.0728            2.1454+-0.0870          might be 1.0280x faster
   cse-new-array                                      2.2425+-0.1361            2.2395+-0.1289        
   DataView-custom-properties                        29.7905+-0.8924           29.7473+-0.7282        
   delay-tear-off-arguments-strictmode               11.2224+-0.1464     !     12.1765+-0.3552        ! definitely 1.0850x slower
   deltablue-varargs                                143.7879+-2.7115     ?    144.8324+-3.5357        ?
   destructuring-arguments                          156.0806+-3.7434     ?    156.5025+-0.8516        ?
   destructuring-parameters-overridden-by-function   
                                                      0.4269+-0.0203     ^      0.3919+-0.0063        ^ definitely 1.0891x faster
   destructuring-swap                                 4.4591+-0.1276            4.4462+-0.0566        
   direct-arguments-getbyval                          1.1023+-0.0581            1.0809+-0.0351          might be 1.0198x faster
   div-boolean-double                                 4.9172+-0.0844     ?      5.0284+-0.0847        ? might be 1.0226x slower
   div-boolean                                        7.7483+-0.0851     ?      7.8088+-0.1433        ?
   double-get-by-val-out-of-bounds                    4.0844+-0.1237     ?      4.0984+-0.1554        ?
   double-pollution-getbyval                          8.2120+-0.0729     ?      8.2151+-0.1713        ?
   double-pollution-putbyoffset                       3.6035+-0.1011            3.5994+-0.1173        
   double-real-use                                   24.8062+-2.3664     ?     25.5277+-1.4764        ? might be 1.0291x slower
   double-to-int32-typed-array-no-inline              1.9218+-0.0205     ?      1.9282+-0.0585        ?
   double-to-int32-typed-array                        1.6265+-0.0386     ?      1.6864+-0.0913        ? might be 1.0368x slower
   double-to-uint32-typed-array-no-inline             2.0136+-0.1051            1.9543+-0.0294          might be 1.0303x faster
   double-to-uint32-typed-array                       1.6867+-0.0421     ?      1.8144+-0.1234        ? might be 1.0757x slower
   elidable-new-object-dag                           31.9121+-0.2561     ?     32.1786+-0.7192        ?
   elidable-new-object-roflcopter                    31.3835+-0.2917     ?     32.2628+-0.8835        ? might be 1.0280x slower
   elidable-new-object-then-call                     29.7952+-0.3773     ?     30.0837+-0.8608        ?
   elidable-new-object-tree                          34.1771+-0.2393           34.0107+-0.2609        
   empty-string-plus-int                              4.4986+-0.1401     ?      4.5334+-0.1037        ?
   emscripten-cube2hash                              25.4675+-0.9270           25.3688+-0.8807        
   exit-length-on-plain-object                       12.0290+-0.6278           11.5928+-0.3761          might be 1.0376x faster
   external-arguments-getbyval                        1.1166+-0.0571     ?      1.1197+-0.0865        ?
   external-arguments-putbyval                        2.0276+-0.1033            2.0270+-0.0509        
   fixed-typed-array-storage-var-index                1.0972+-0.0451            1.0894+-0.0107        
   fixed-typed-array-storage                          0.7963+-0.0459            0.7840+-0.0336          might be 1.0157x faster
   Float32Array-matrix-mult                           3.6462+-0.0798            3.5752+-0.0384          might be 1.0199x faster
   Float32Array-to-Float64Array-set                  44.4099+-0.3462     ?     44.8114+-1.0309        ?
   Float64Array-alloc-long-lived                     52.7114+-1.5950           51.9784+-0.2419          might be 1.0141x faster
   Float64Array-to-Int16Array-set                    52.2746+-0.9648     ?     52.8050+-1.3095        ? might be 1.0101x slower
   fold-double-to-int                                19.4076+-0.4691     ?     19.9835+-1.1955        ? might be 1.0297x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.5385+-0.2561     ?      9.5887+-0.2803        ?
   fold-get-by-id-to-multi-get-by-offset              7.7135+-0.2279     ?      7.8618+-0.2339        ? might be 1.0192x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.6499+-0.5975            7.4430+-0.3240          might be 1.0278x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      6.6320+-0.3491     ?      7.1871+-0.6617        ? might be 1.0837x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.0200+-0.6528            6.9383+-0.2388          might be 1.0118x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.0224+-0.3820     ?      4.5000+-0.6853        ? might be 1.1188x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      7.7408+-0.1751     ?      7.9979+-0.3906        ? might be 1.0332x slower
   fold-put-by-id-to-multi-put-by-offset              7.9412+-0.2382     ?      8.2751+-0.2299        ? might be 1.0420x slower
   fold-put-structure                                 4.2796+-0.3859     ?      4.7431+-0.3987        ? might be 1.1083x slower
   for-of-iterate-array-entries                      11.1050+-0.1975           10.8292+-0.1452          might be 1.0255x faster
   for-of-iterate-array-keys                          3.2159+-0.0619     ?      3.2491+-0.1036        ? might be 1.0103x slower
   for-of-iterate-array-values                        3.2989+-0.1438            3.2061+-0.2023          might be 1.0289x faster
   fround                                            18.9278+-1.1859     ^     17.4016+-0.3201        ^ definitely 1.0877x faster
   ftl-library-inlining-dataview                     53.7096+-0.7184     ?     54.8235+-1.4205        ? might be 1.0207x slower
   ftl-library-inlining                             104.0228+-1.1870          102.9541+-0.3944          might be 1.0104x faster
   function-dot-apply                                 1.8850+-0.0759     ?      1.8881+-0.1569        ?
   function-test                                      2.5228+-0.0458            2.5142+-0.0778        
   function-with-eval                                87.4093+-1.6226           85.1866+-1.7126          might be 1.0261x faster
   gcse-poly-get-less-obvious                        13.5730+-0.1742     ?     13.7465+-0.5948        ? might be 1.0128x slower
   gcse-poly-get                                     13.7531+-0.3727           13.5186+-0.4450          might be 1.0173x faster
   gcse                                               3.6690+-0.1597            3.6675+-0.1003        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.4629+-0.0643            2.4396+-0.0491        
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.3833+-0.0577     ?      5.4314+-0.1505        ?
   get-by-id-chain-from-try-block                     6.3027+-0.3266            6.0492+-0.1997          might be 1.0419x faster
   get-by-id-check-structure-elimination              4.1562+-0.0722            4.1379+-0.0553        
   get-by-id-proto-or-self                           13.9608+-0.8253           13.2905+-0.2100          might be 1.0504x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.6948+-0.0346            2.6828+-0.0215        
   get-by-id-self-or-proto                           13.9100+-0.6750     ?     14.0182+-0.7036        ?
   get-by-val-out-of-bounds                           3.8725+-0.1457            3.7717+-0.0649          might be 1.0267x faster
   get_callee_monomorphic                             2.3720+-0.2284            2.2519+-0.1628          might be 1.0533x faster
   get_callee_polymorphic                             3.9401+-0.2725            3.7106+-0.0572          might be 1.0619x faster
   getter-no-activation                               4.5501+-0.0637            4.5364+-0.0950        
   getter-prototype                                   9.3271+-0.2278            9.0378+-0.1219          might be 1.0320x faster
   getter-richards                                  106.0860+-1.9237          104.2881+-4.4519          might be 1.0172x faster
   getter                                             5.1779+-0.2837            5.0543+-0.1556          might be 1.0245x faster
   global-var-const-infer-fire-from-opt               0.8246+-0.0962            0.8125+-0.0842          might be 1.0149x faster
   global-var-const-infer                             0.6722+-0.0391     ?      0.6812+-0.0457        ? might be 1.0133x slower
   HashMap-put-get-iterate-keys                      24.9050+-0.9865           24.4224+-1.3898          might be 1.0198x faster
   HashMap-put-get-iterate                           24.6137+-1.2691           24.1630+-0.8201          might be 1.0187x faster
   HashMap-string-put-get-iterate                    22.7581+-0.4710     ?     23.3426+-0.7567        ? might be 1.0257x slower
   hoist-make-rope                                    7.6134+-0.3354            7.4577+-0.3370          might be 1.0209x faster
   hoist-poly-check-structure-effectful-loop   
                                                      3.9302+-0.1042            3.9200+-0.0510        
   hoist-poly-check-structure                         3.1684+-0.0906            3.0981+-0.0506          might be 1.0227x faster
   imul-double-only                                   6.8110+-0.2410            6.6515+-0.1164          might be 1.0240x faster
   imul-int-only                                      7.8208+-0.3828            7.6623+-0.3378          might be 1.0207x faster
   imul-mixed                                         6.3596+-0.3020            6.2808+-0.1662          might be 1.0126x faster
   in-four-cases                                     16.1493+-0.1529     ?     16.4708+-0.4466        ? might be 1.0199x slower
   in-one-case-false                                  8.8856+-0.2229     ?      8.9788+-0.4127        ? might be 1.0105x slower
   in-one-case-true                                   9.1656+-0.3083            8.9155+-0.1388          might be 1.0281x faster
   in-two-cases                                       9.2873+-0.1856            9.2504+-0.2071        
   indexed-properties-in-objects                      2.7336+-0.0647            2.7183+-0.0704        
   infer-closure-const-then-mov-no-inline             2.9819+-0.0537     ?      3.0334+-0.1165        ? might be 1.0173x slower
   infer-closure-const-then-mov                      16.1705+-0.3592     ?     16.3406+-0.3710        ? might be 1.0105x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.9036+-0.1894     ?     11.1868+-0.6000        ? might be 1.0260x slower
   infer-closure-const-then-put-to-scope             20.6441+-0.6037     ?     21.2551+-1.5158        ? might be 1.0296x slower
   infer-closure-const-then-reenter-no-inline   
                                                     45.4363+-1.4481           44.6562+-0.1823          might be 1.0175x faster
   infer-closure-const-then-reenter                  21.7841+-1.3167           21.4429+-0.9043          might be 1.0159x faster
   infer-constant-global-property                     3.1558+-0.0280            3.1511+-0.0289        
   infer-constant-property                            2.4310+-0.0317     ?      2.4576+-0.0313        ? might be 1.0109x slower
   infer-one-time-closure-ten-vars                    8.0728+-0.3249            7.9593+-0.0902          might be 1.0143x faster
   infer-one-time-closure-two-vars                    7.7070+-0.3659     ?      7.8138+-0.3457        ? might be 1.0139x slower
   infer-one-time-closure                             7.5615+-0.2326            7.4978+-0.1354        
   infer-one-time-deep-closure                       12.3926+-0.6456     ?     12.5406+-0.7255        ? might be 1.0119x slower
   inline-arguments-access                            3.4753+-0.0879     ?      3.5667+-0.2174        ? might be 1.0263x slower
   inline-arguments-aliased-access                    3.5586+-0.1470     ?      3.5924+-0.1049        ?
   inline-arguments-local-escape                      3.5157+-0.1246            3.4753+-0.1410          might be 1.0116x faster
   inline-get-scoped-var                              4.3585+-0.1286     ?      4.4393+-0.1392        ? might be 1.0185x slower
   inlined-put-by-id-transition                       9.9165+-0.6071     ?     10.2650+-0.6724        ? might be 1.0351x slower
   int-or-other-abs-then-get-by-val                   4.4766+-0.0592     ?      4.6467+-0.1928        ? might be 1.0380x slower
   int-or-other-abs-zero-then-get-by-val             15.5130+-0.4482     ?     15.9235+-1.0637        ? might be 1.0265x slower
   int-or-other-add-then-get-by-val                   3.8248+-0.1295            3.8165+-0.1575        
   int-or-other-add                                   4.6427+-0.1177            4.6247+-0.0898        
   int-or-other-div-then-get-by-val                   3.4355+-0.0380     ?      3.5041+-0.0966        ? might be 1.0200x slower
   int-or-other-max-then-get-by-val                   3.7200+-0.1215            3.6776+-0.0677          might be 1.0115x faster
   int-or-other-min-then-get-by-val                   3.6519+-0.0417     ?      3.7865+-0.1115        ? might be 1.0369x slower
   int-or-other-mod-then-get-by-val                   3.2424+-0.0628     ?      3.2990+-0.0930        ? might be 1.0174x slower
   int-or-other-mul-then-get-by-val                   3.3764+-0.0644     ?      3.4224+-0.0609        ? might be 1.0136x slower
   int-or-other-neg-then-get-by-val                   4.1869+-0.1109     ?      4.2315+-0.1018        ? might be 1.0106x slower
   int-or-other-neg-zero-then-get-by-val             16.0900+-1.1669           15.4801+-0.3736          might be 1.0394x faster
   int-or-other-sub-then-get-by-val                   3.7776+-0.0912     ?      3.7852+-0.0889        ?
   int-or-other-sub                                   3.2137+-0.0943            3.1792+-0.1135          might be 1.0109x faster
   int-overflow-local                                 3.9905+-0.1134     ?      4.0494+-0.1378        ? might be 1.0148x slower
   Int16Array-alloc-long-lived                       38.8562+-0.4175     ?     39.4758+-0.5136        ? might be 1.0159x slower
   Int16Array-bubble-sort-with-byteLength            12.6253+-0.6598           12.5402+-0.1760        
   Int16Array-bubble-sort                            13.1909+-0.4563     ?     13.3396+-0.1541        ? might be 1.0113x slower
   Int16Array-load-int-mul                            1.3390+-0.0739            1.2978+-0.0261          might be 1.0317x faster
   Int16Array-to-Int32Array-set                      44.0984+-1.2963     ?     44.3643+-1.3508        ?
   Int32Array-alloc-large                            11.6330+-0.4335     ?     11.6844+-0.2912        ?
   Int32Array-alloc-long-lived                       43.0925+-0.2252     ?     43.1112+-0.1656        ?
   Int32Array-alloc                                   2.8386+-0.1729            2.7534+-0.1867          might be 1.0310x faster
   Int32Array-Int8Array-view-alloc                    5.8328+-0.3343            5.6897+-0.0508          might be 1.0251x faster
   int52-spill                                        4.1516+-0.0706     ?      4.2850+-0.1654        ? might be 1.0321x slower
   Int8Array-alloc-long-lived                        35.1940+-0.8592     ?     35.4916+-0.9425        ?
   Int8Array-load-with-byteLength                     3.1806+-0.0747            3.1523+-0.1018        
   Int8Array-load                                     3.2236+-0.0729            3.2167+-0.0836        
   integer-divide                                     9.6103+-0.1478            9.5874+-0.1070        
   integer-modulo                                     1.6004+-0.0592            1.5314+-0.0378          might be 1.0451x faster
   is-boolean-fold-tricky                             3.5363+-0.0723            3.5049+-0.0422        
   is-boolean-fold                                    2.4418+-0.0290     ?      2.4803+-0.0985        ? might be 1.0158x slower
   is-function-fold-tricky-internal-function   
                                                      9.4880+-0.3123            9.4101+-0.2251        
   is-function-fold-tricky                            3.8958+-0.0634            3.8523+-0.0672          might be 1.0113x faster
   is-function-fold                                   2.5059+-0.0522            2.5005+-0.0557        
   is-number-fold-tricky                              3.8673+-0.1170            3.8113+-0.1069          might be 1.0147x faster
   is-number-fold                                     2.4636+-0.0486     ?      2.4709+-0.0715        ?
   is-object-or-null-fold-functions                   2.4478+-0.0158     ?      2.4840+-0.0416        ? might be 1.0148x slower
   is-object-or-null-fold-less-tricky                 3.9550+-0.1326            3.9001+-0.1194          might be 1.0141x faster
   is-object-or-null-fold-tricky                      4.9478+-0.1928            4.8405+-0.0772          might be 1.0222x faster
   is-object-or-null-fold                             2.4995+-0.0494     ?      2.5102+-0.0716        ?
   is-object-or-null-trickier-function                3.9152+-0.1112            3.8962+-0.0825        
   is-object-or-null-trickier-internal-function   
                                                      9.7822+-0.1215            9.7771+-0.1813        
   is-object-or-null-tricky-function                  3.8814+-0.0603     ?      3.9297+-0.0905        ? might be 1.0124x slower
   is-object-or-null-tricky-internal-function   
                                                      7.2475+-0.0891     ?      7.2634+-0.0711        ?
   is-string-fold-tricky                              3.8490+-0.0953            3.7628+-0.0781          might be 1.0229x faster
   is-string-fold                                     2.4457+-0.0463            2.4338+-0.0361        
   is-undefined-fold-tricky                           3.1038+-0.0496     ?      3.1040+-0.0731        ?
   is-undefined-fold                                  2.4679+-0.0390     ?      2.5038+-0.1093        ? might be 1.0146x slower
   large-int-captured                                 3.9005+-0.4411            3.7467+-0.1541          might be 1.0411x faster
   large-int-neg                                     14.0356+-1.0626           13.5870+-0.6084          might be 1.0330x faster
   large-int                                         12.8647+-0.3981     ?     13.2704+-0.5586        ? might be 1.0315x slower
   load-varargs-elimination                          21.0016+-1.3447           20.9260+-1.4064        
   logical-not-weird-types                            2.7782+-0.1234            2.7679+-0.1667        
   logical-not                                        3.9521+-0.1183     ?      4.0017+-0.0835        ? might be 1.0125x slower
   lots-of-fields                                     9.1310+-0.2798     ?      9.3500+-0.6451        ? might be 1.0240x slower
   make-indexed-storage                               2.7593+-0.0832     ?      2.8587+-0.1489        ? might be 1.0360x slower
   make-rope-cse                                      3.5595+-0.2175            3.4999+-0.1405          might be 1.0170x faster
   marsaglia-larger-ints                             31.0507+-0.4912           30.7564+-0.5214        
   marsaglia-osr-entry                               20.4985+-0.5801           20.2469+-0.7824          might be 1.0124x faster
   math-with-out-of-bounds-array-values              21.3819+-1.0235           20.9876+-0.6219          might be 1.0188x faster
   max-boolean                                        2.7181+-0.4780            2.5003+-0.0243          might be 1.0871x faster
   method-on-number                                  15.4664+-0.5795           15.1864+-0.3510          might be 1.0184x faster
   min-boolean                                        2.4875+-0.0536            2.4522+-0.0786          might be 1.0144x faster
   minus-boolean-double                               2.8423+-0.0241     ?      2.8876+-0.0513        ? might be 1.0159x slower
   minus-boolean                                      2.1365+-0.0298     ?      2.1373+-0.0255        ?
   misc-strict-eq                                    32.0874+-4.9902           30.1268+-1.3471          might be 1.0651x faster
   mod-boolean-double                                10.7597+-0.4058     ?     11.0651+-1.0016        ? might be 1.0284x slower
   mod-boolean                                        7.8020+-0.0269     ?      7.9874+-0.2923        ? might be 1.0238x slower
   mul-boolean-double                                 3.3384+-0.0342     ?      3.4144+-0.1110        ? might be 1.0228x slower
   mul-boolean                                        2.6726+-0.1321            2.6609+-0.0950        
   neg-boolean                                        2.9368+-0.1088            2.8659+-0.0498          might be 1.0247x faster
   negative-zero-divide                               0.2923+-0.0088     ?      0.2943+-0.0110        ?
   negative-zero-modulo                               0.2805+-0.0065     ?      0.2868+-0.0127        ? might be 1.0224x slower
   negative-zero-negate                               0.2654+-0.0049     ?      0.2860+-0.0213        ? might be 1.0776x slower
   nested-function-parsing                           32.0344+-0.5384           31.7899+-0.2100        
   new-array-buffer-dead                             81.8406+-0.4507           81.7421+-0.4154        
   new-array-buffer-push                              5.7042+-0.2596     ?      5.7751+-0.3738        ? might be 1.0124x slower
   new-array-dead                                    13.8606+-0.7376           13.5938+-0.4362          might be 1.0196x faster
   new-array-push                                     3.2369+-0.1287     ?      3.3186+-0.1153        ? might be 1.0252x slower
   no-inline-constructor                             29.4399+-0.4838     ?     29.4824+-0.1999        ?
   number-test                                        2.6629+-0.0435            2.6480+-0.0560        
   object-closure-call                                4.6566+-0.1262            4.5739+-0.0595          might be 1.0181x faster
   object-test                                        2.6268+-0.1858            2.4430+-0.0322          might be 1.0752x faster
   obvious-sink-pathology-taken                      96.5558+-2.0696           95.7297+-0.8182        
   obvious-sink-pathology                            91.4477+-0.8966           91.2404+-0.5022        
   obviously-elidable-new-object                     27.0715+-0.7062     ?     28.0129+-1.8852        ? might be 1.0348x slower
   plus-boolean-arith                                 2.2553+-0.1132            2.1962+-0.0161          might be 1.0269x faster
   plus-boolean-double                                2.8784+-0.0546     ?      2.9033+-0.0418        ?
   plus-boolean                                       2.4026+-0.0334            2.3808+-0.0495        
   poly-chain-access-different-prototypes-simple   
                                                      2.5393+-0.0310            2.5283+-0.0383        
   poly-chain-access-different-prototypes             2.3354+-0.0318     ?      2.3648+-0.0493        ? might be 1.0126x slower
   poly-chain-access-simpler                          2.5293+-0.0527            2.5236+-0.0537        
   poly-chain-access                                  2.3475+-0.1003     ?      2.3835+-0.0888        ? might be 1.0153x slower
   poly-stricteq                                     48.0337+-0.6912           47.9050+-0.3827        
   polymorphic-array-call                             1.1768+-0.0594     ?      1.2326+-0.1089        ? might be 1.0474x slower
   polymorphic-get-by-id                              2.6318+-0.0469     ?      2.7004+-0.1964        ? might be 1.0261x slower
   polymorphic-put-by-id                             23.7823+-0.5992     ?     25.2384+-1.5058        ? might be 1.0612x slower
   polymorphic-structure                             12.4732+-0.1975     ?     12.5477+-0.1568        ?
   polyvariant-monomorphic-get-by-id                  6.5062+-0.6804            6.4700+-0.5994        
   proto-getter-access                                7.6879+-0.1762            7.5668+-0.1022          might be 1.0160x faster
   put-by-id-replace-and-transition                   7.3965+-0.2579     ?      7.6620+-0.6962        ? might be 1.0359x slower
   put-by-id-slightly-polymorphic                     2.4477+-0.0266            2.4373+-0.0564        
   put-by-id                                          9.2785+-0.2808            9.0425+-0.1701          might be 1.0261x faster
   put-by-val-direct                                  0.2881+-0.0165     ?      0.2958+-0.0146        ? might be 1.0269x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.0684+-0.2012            4.8580+-0.1932          might be 1.0433x faster
   put-by-val-machine-int                             2.3437+-0.0842     ?      2.3620+-0.1021        ?
   rare-osr-exit-on-local                            13.8973+-0.2263           13.8562+-0.1470        
   register-pressure-from-osr                        15.5884+-0.4809           15.4825+-0.3356        
   repeat-multi-get-by-offset                        20.8234+-0.3612           20.5940+-0.5045          might be 1.0111x faster
   setter-prototype                                   6.9636+-0.2377     ?      6.9648+-0.1512        ?
   setter                                             5.3108+-0.2341            5.2591+-0.2412        
   simple-activation-demo                            23.1988+-0.8628     ?     23.7177+-1.0096        ? might be 1.0224x slower
   simple-getter-access                               9.8091+-0.1530     ?      9.8374+-0.2227        ?
   simple-poly-call-nested                            8.6343+-0.3000            8.2127+-0.2750          might be 1.0513x faster
   simple-poly-call                                   1.1569+-0.0298            1.1438+-0.0399          might be 1.0114x faster
   sin-boolean                                       17.0823+-0.7675     ?     17.5911+-0.7439        ? might be 1.0298x slower
   singleton-scope                                   52.8921+-1.3741           52.0327+-0.2441          might be 1.0165x faster
   sink-function                                      8.9333+-0.2722     ?      9.1427+-0.3963        ? might be 1.0234x slower
   sink-huge-activation                              16.1269+-1.0241           15.5290+-0.3713          might be 1.0385x faster
   sinkable-new-object-dag                           52.8076+-0.6964           52.7316+-0.8070        
   sinkable-new-object-taken                         39.5755+-0.2863     ?     40.1165+-0.4844        ? might be 1.0137x slower
   sinkable-new-object                               27.8725+-0.3973     ?     28.0398+-0.4516        ?
   slow-array-profile-convergence                     2.3346+-0.0861     ?      2.3367+-0.0917        ?
   slow-convergence                                   2.3163+-0.1642            2.2709+-0.0712          might be 1.0200x faster
   slow-ternaries                                    16.6730+-0.4791     ?     16.7771+-0.7267        ?
   sorting-benchmark                                 16.3418+-0.5591           16.0468+-0.3669          might be 1.0184x faster
   sparse-conditional                                 1.0290+-0.0226            1.0165+-0.0091          might be 1.0123x faster
   splice-to-remove                                  12.3030+-0.6376           11.7798+-0.3862          might be 1.0444x faster
   string-char-code-at                               13.8394+-0.5221     ?     13.8540+-0.6211        ?
   string-concat-object                               2.0907+-0.1124     ?      2.1969+-0.1290        ? might be 1.0508x slower
   string-concat-pair-object                          2.0799+-0.1726            2.0705+-0.0860        
   string-concat-pair-simple                          8.6248+-0.2199     ?      8.6748+-0.2071        ?
   string-concat-simple                               8.9347+-0.2665            8.7485+-0.1768          might be 1.0213x faster
   string-cons-repeat                                 6.4200+-0.3514            6.3395+-0.2810          might be 1.0127x faster
   string-cons-tower                                  6.4532+-0.2476            6.4343+-0.3062        
   string-equality                                   14.9037+-0.4841           14.7778+-0.6684        
   string-get-by-val-big-char                         6.3250+-0.2370            6.1933+-0.0632          might be 1.0213x faster
   string-get-by-val-out-of-bounds-insane             3.1514+-0.2208            3.0291+-0.0752          might be 1.0404x faster
   string-get-by-val-out-of-bounds                    3.7928+-0.0620     ?      3.8303+-0.0885        ?
   string-get-by-val                                  2.6256+-0.0377            2.6017+-0.0794        
   string-hash                                        1.7857+-0.0257     ?      1.8461+-0.0930        ? might be 1.0338x slower
   string-long-ident-equality                        12.7156+-0.9956           11.9256+-0.2140          might be 1.0662x faster
   string-out-of-bounds                              10.0142+-0.3745            9.9667+-0.4368        
   string-repeat-arith                               27.8690+-1.3275           26.4352+-0.3507          might be 1.0542x faster
   string-sub                                        52.5240+-1.0007           51.2790+-1.4446          might be 1.0243x faster
   string-test                                        2.5973+-0.0401     ?      2.6065+-0.1167        ?
   string-var-equality                               24.1212+-1.1670           23.7657+-0.5575          might be 1.0150x faster
   structure-hoist-over-transitions                   2.3979+-0.0794            2.3760+-0.1324        
   substring-concat-weird                            34.4271+-1.0257     ?     34.4271+-0.4789        ?
   substring-concat                                  37.3927+-0.6594     ?     38.1896+-1.2511        ? might be 1.0213x slower
   substring                                         43.4680+-1.0314     ?     43.8188+-1.2349        ?
   switch-char-constant                               2.4887+-0.0724     ?      2.5577+-0.0602        ? might be 1.0277x slower
   switch-char                                        5.2818+-0.4419     ?      5.5391+-0.3525        ? might be 1.0487x slower
   switch-constant                                    7.2539+-0.4399     ?      7.8980+-0.4124        ? might be 1.0888x slower
   switch-string-basic-big-var                       15.2092+-0.4912           14.8630+-0.2282          might be 1.0233x faster
   switch-string-basic-big                           14.4555+-0.5976           14.3282+-0.3116        
   switch-string-basic-var                           13.0675+-0.6565           12.6406+-0.2418          might be 1.0338x faster
   switch-string-basic                               12.4610+-0.3702     ?     12.6622+-0.3443        ? might be 1.0161x slower
   switch-string-big-length-tower-var                16.7197+-0.3332     ?     16.9590+-0.6697        ? might be 1.0143x slower
   switch-string-length-tower-var                    12.3011+-0.1137     ?     12.7136+-0.5397        ? might be 1.0335x slower
   switch-string-length-tower                        11.0867+-0.2633     ?     11.2022+-0.2949        ? might be 1.0104x slower
   switch-string-short                               11.6457+-0.9076           11.3466+-0.3611          might be 1.0264x faster
   switch                                            11.3470+-0.4237     ?     11.8271+-0.4514        ? might be 1.0423x slower
   tear-off-arguments-simple                          3.0356+-0.0351     ?      3.0902+-0.1837        ? might be 1.0180x slower
   tear-off-arguments                                 4.0306+-0.1561            3.9394+-0.1220          might be 1.0232x faster
   temporal-structure                                11.4191+-0.3413     ?     11.5953+-0.5771        ? might be 1.0154x slower
   to-int32-boolean                                  12.5781+-0.3048     ?     12.9288+-0.5553        ? might be 1.0279x slower
   try-catch-get-by-val-cloned-arguments             12.3413+-0.2885           12.3379+-0.2036        
   try-catch-get-by-val-direct-arguments              5.3222+-0.1339            5.2272+-0.0749          might be 1.0182x faster
   try-catch-get-by-val-scoped-arguments              6.4214+-0.1298     ?      6.5427+-0.3385        ? might be 1.0189x slower
   typed-array-get-set-by-val-profiling              26.2111+-0.5454     ?     26.4745+-0.5180        ? might be 1.0101x slower
   undefined-property-access                        206.5062+-1.7041          205.3543+-1.7557        
   undefined-test                                     2.7469+-0.1000            2.6805+-0.0637          might be 1.0248x faster
   unprofiled-licm                                   13.3362+-0.2756     ?     13.6115+-0.6631        ? might be 1.0206x slower
   varargs-call                                      12.7104+-0.1916           12.6732+-0.1002        
   varargs-construct-inline                          21.1562+-0.5941           21.0561+-0.2504        
   varargs-construct                                 19.0471+-0.1752     ?     19.1121+-0.2337        ?
   varargs-inline                                     8.0146+-0.1746            7.9000+-0.1511          might be 1.0145x faster
   varargs-strict-mode                                8.6206+-0.1624     ?      8.6341+-0.1600        ?
   varargs                                            8.5776+-0.1134            8.4848+-0.0934          might be 1.0109x faster
   weird-inlining-const-prop                          2.0860+-0.0978            1.9870+-0.0734          might be 1.0498x faster

   <geometric>                                        7.3161+-0.0182     ?      7.3166+-0.0177        ? might be 1.0001x slower

                                                         original                parserArena                                    
CompressionBench:
   huffman                                           53.4638+-1.8968           51.5905+-0.9192          might be 1.0363x faster
   arithmetic-simple                                253.4769+-1.7748     ?    254.5241+-1.7776        ?
   arithmetic-precise                               233.6371+-1.8197          233.4102+-2.7945        
   arithmetic-complex-precise                       231.6261+-1.5858     ?    232.9466+-1.8545        ?
   arithmetic-precise-order-0                       259.9308+-0.9009     ?    260.7111+-2.3049        ?
   arithmetic-precise-order-1                       287.1697+-3.3540     ?    288.1502+-2.7861        ?
   arithmetic-precise-order-2                       331.3731+-3.8605     ?    334.7061+-8.0980        ? might be 1.0101x slower
   arithmetic-simple-order-1                        305.3245+-3.2707     ?    306.0601+-2.8427        ?
   arithmetic-simple-order-2                        359.7890+-3.3459          357.8897+-4.3257        
   lz-string                                        321.5365+-6.5752          313.2104+-2.9259          might be 1.0266x faster

   <geometric>                                      240.2076+-0.8022          239.2735+-0.9243          might be 1.0039x faster

                                                         original                parserArena                                    
Geomean of preferred means:
   <scaled-result>                                   33.7245+-0.0867     ?     33.7760+-0.0898        ? might be 1.0015x slower
Comment 11 Yusuke Suzuki 2015-07-16 11:06:36 PDT
Comment on attachment 256815 [details]
patch

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

The logic itself looks nice. Few nits.

> Source/JavaScriptCore/ChangeLog:34
> +       to make things clearer and more deliberate.

Maybe, these messages are mis indented.

> Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:64
> +        strictMode, JSParserCodeType::Function, error, 0, executable->parseMode());

Use nullptr instead of `0`.

> Source/JavaScriptCore/parser/ASTBuilder.h:349
> +        functionInfo.body->setLoc(functionInfo.startLine, functionInfo.endLine, location.startOffset, location.lineStartOffset);

OK, now, parameters are reparsed.

> Source/JavaScriptCore/parser/Nodes.h:1630
> +        Vector<DestructuringPatternNode*, 3> m_patterns;

I think this vector leaks memory since ParserArenaFreeable's destructor is not called.
Use intrusive lists (like the other nodes such as ArgumentListNode).

> Source/JavaScriptCore/parser/Parser.cpp:-370
> -#endif

Looks fine.

> Source/JavaScriptCore/parser/Parser.cpp:1390
> +        failIfFalse(parseSourceElements(syntaxChecker, CheckForStrictMode), bodyType == StandardFunctionBodyBlock ? "Cannot parse body of this function" : "Cannot parse body of this arrow function");

OK, here, we always use SyntaxChecker.

> Source/JavaScriptCore/parser/Parser.cpp:1628
> +        RELEASE_ASSERT(mode == NormalFunctionMode || mode == MethodMode || mode == ArrowFunctionMode);

Is there any case in which ArrowFunctionMode has valid `name`?

> Source/JavaScriptCore/runtime/CodeCache.cpp:98
> +        JSParserCodeType::Program, error, 0, FunctionParseMode::NotAFunctionMode, ConstructorKind::None, thisTDZMode);

Let's use nullptr instead of 0.

> Source/JavaScriptCore/tests/controlFlowProfiler/conditional-expression.js:37
> +checkBasicBlock(testConditionalFunctionCall, "y ?", ShouldHaveExecuted);

Why are they changed?
Comment 12 Saam Barati 2015-07-16 14:29:15 PDT
Comment on attachment 256815 [details]
patch

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

>> Source/JavaScriptCore/ChangeLog:34
>> +       to make things clearer and more deliberate.
> 
> Maybe, these messages are mis indented.

Will fix.

>> Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:64
>> +        strictMode, JSParserCodeType::Function, error, 0, executable->parseMode());
> 
> Use nullptr instead of `0`.

will do.

>> Source/JavaScriptCore/parser/Nodes.h:1630
>> +        Vector<DestructuringPatternNode*, 3> m_patterns;
> 
> I think this vector leaks memory since ParserArenaFreeable's destructor is not called.
> Use intrusive lists (like the other nodes such as ArgumentListNode).

Good catch.

>> Source/JavaScriptCore/parser/Parser.cpp:1390
>> +        failIfFalse(parseSourceElements(syntaxChecker, CheckForStrictMode), bodyType == StandardFunctionBodyBlock ? "Cannot parse body of this function" : "Cannot parse body of this arrow function");
> 
> OK, here, we always use SyntaxChecker.

Yes. I removed the ::FunctionBodyBuilder from SyntaxChecker and ASTBuilder because it's always SyntaxChecker. This to me is just more clear.

>> Source/JavaScriptCore/parser/Parser.cpp:1628
>> +        RELEASE_ASSERT(mode == NormalFunctionMode || mode == MethodMode || mode == ArrowFunctionMode);
> 
> Is there any case in which ArrowFunctionMode has valid `name`?

I believe we hit this path with:
var f = (x) => x;

I will double check though, this seems a bit weird.

>> Source/JavaScriptCore/runtime/CodeCache.cpp:98
>> +        JSParserCodeType::Program, error, 0, FunctionParseMode::NotAFunctionMode, ConstructorKind::None, thisTDZMode);
> 
> Let's use nullptr instead of 0.

will do.

>> Source/JavaScriptCore/tests/controlFlowProfiler/conditional-expression.js:37
>> +checkBasicBlock(testConditionalFunctionCall, "y ?", ShouldHaveExecuted);
> 
> Why are they changed?

These tests work by looking up string indices inside the function. If there are multiple occurrences of a string
inside the function, it will find the first occurrence. Because the function's source text now includes the parameters, these
texts were resolving to the wrong index inside the function. "y ?" is a unique string inside the function and therefore is not ambiguous
in terms of it's substring index.
Comment 13 Saam Barati 2015-07-16 15:12:25 PDT
Comment on attachment 256815 [details]
patch

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

>>> Source/JavaScriptCore/parser/Nodes.h:1630
>>> +        Vector<DestructuringPatternNode*, 3> m_patterns;
>> 
>> I think this vector leaks memory since ParserArenaFreeable's destructor is not called.
>> Use intrusive lists (like the other nodes such as ArgumentListNode).
> 
> Good catch.

I'm going to make this inherit from ParserArenaDeletable.

> Source/JavaScriptCore/parser/Nodes.h:1747
> +    class DestructuringPatternNode : public ParserArenaFreeable {

This also needs to inherit from ParserArenaDeletable.
Comment 14 Saam Barati 2015-07-16 15:18:02 PDT
Created attachment 256933 [details]
patch
Comment 15 Saam Barati 2015-07-16 17:05:27 PDT
Created attachment 256939 [details]
patch

rebased
Comment 16 Yusuke Suzuki 2015-07-17 07:59:00 PDT
Comment on attachment 256815 [details]
patch

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

>> Source/JavaScriptCore/parser/Nodes.h:1747
>> +    class DestructuringPatternNode : public ParserArenaFreeable {
> 
> This also needs to inherit from ParserArenaDeletable.

OK, ObjectPattern / ArrayPattern has a Vector. So DestructuringPatternNode should be ParserArenaDeletable.

>>> Source/JavaScriptCore/parser/Parser.cpp:1628
>>> +        RELEASE_ASSERT(mode == NormalFunctionMode || mode == MethodMode || mode == ArrowFunctionMode);
>> 
>> Is there any case in which ArrowFunctionMode has valid `name`?
> 
> I believe we hit this path with:
> var f = (x) => x;
> 
> I will double check though, this seems a bit weird.

Ah, OK. name is transfered from the variable name.

>>> Source/JavaScriptCore/tests/controlFlowProfiler/conditional-expression.js:37
>>> +checkBasicBlock(testConditionalFunctionCall, "y ?", ShouldHaveExecuted);
>> 
>> Why are they changed?
> 
> These tests work by looking up string indices inside the function. If there are multiple occurrences of a string
> inside the function, it will find the first occurrence. Because the function's source text now includes the parameters, these
> texts were resolving to the wrong index inside the function. "y ?" is a unique string inside the function and therefore is not ambiguous
> in terms of it's substring index.

OK, make sense.
Comment 17 Saam Barati 2015-07-17 08:07:37 PDT
(In reply to comment #16)
> Comment on attachment 256815 [details]
> patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=256815&action=review
> 
> >> Source/JavaScriptCore/parser/Nodes.h:1747
> >> +    class DestructuringPatternNode : public ParserArenaFreeable {
> > 
> > This also needs to inherit from ParserArenaDeletable.
> 
> OK, ObjectPattern / ArrayPattern has a Vector. So DestructuringPatternNode
> should be ParserArenaDeletable.
> 
> >>> Source/JavaScriptCore/parser/Parser.cpp:1628
> >>> +        RELEASE_ASSERT(mode == NormalFunctionMode || mode == MethodMode || mode == ArrowFunctionMode);
> >> 
> >> Is there any case in which ArrowFunctionMode has valid `name`?
> > 
> > I believe we hit this path with:
> > var f = (x) => x;
> > 
> > I will double check though, this seems a bit weird.
> 
> Ah, OK. name is transfered from the variable name.
>
I was wrong about this. It doesn't get the name
from the variable name. (I think there is some
machinery that does something similar but it's
not in this part of the parser.) I removed the
assertion that it could also be an arrow function.  


> >>> Source/JavaScriptCore/tests/controlFlowProfiler/conditional-expression.js:37
> >>> +checkBasicBlock(testConditionalFunctionCall, "y ?", ShouldHaveExecuted);
> >> 
> >> Why are they changed?
> > 
> > These tests work by looking up string indices inside the function. If there are multiple occurrences of a string
> > inside the function, it will find the first occurrence. Because the function's source text now includes the parameters, these
> > texts were resolving to the wrong index inside the function. "y ?" is a unique string inside the function and therefore is not ambiguous
> > in terms of it's substring index.
> 
> OK, make sense.
Comment 18 Yusuke Suzuki 2015-07-17 08:56:23 PDT
Comment on attachment 256939 [details]
patch

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

> Source/JavaScriptCore/parser/ASTBuilder.h:367
> +        SourceCode source = m_sourceCode->subExpression(functionInfo.startOffset, functionInfo.endOffset, functionInfo.startLine, functionInfo.bodyStartColumn);

Dropping subArrowFunction is OK.

> Source/JavaScriptCore/parser/Parser.cpp:248
> +        m_parameters = functionInfo.parameters;

This branch (parsing function parameters) is not executed under arrowfunction = OFF, is it correct?
Comment 19 Saam Barati 2015-07-17 10:53:18 PDT
Created attachment 256977 [details]
patch

Fixed #ifdef bug. It should not surround the entire isReparsingFunction() but just surround
reprising of arrow functions.
Comment 20 Yusuke Suzuki 2015-07-17 11:22:56 PDT
Comment on attachment 256977 [details]
patch

Great, r+.
Comment 21 WebKit Commit Bot 2015-07-17 11:29:39 PDT
Comment on attachment 256977 [details]
patch

Rejecting attachment 256977 [details] from commit-queue.

Failed to run "['/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch', '--status-host=webkit-queues.appspot.com', '--bot-id=webkit-cq-02', 'validate-changelog', '--check-oops', '--non-interactive', 256977, '--port=mac']" exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.appspot.com/results/6690290693832704
Comment 22 Saam Barati 2015-07-17 11:50:23 PDT
landed in:
https://trac.webkit.org/r186959