Bug 149601

Summary: We should be able to inline getter/setter calls inside an inline cache even when the SpillRegistersMode is NeedsToSpill
Product: WebKit Reporter: Saam Barati <saam>
Component: JavaScriptCoreAssignee: Saam Barati <saam>
Status: RESOLVED FIXED    
Severity: Normal CC: benjamin, bfulgham, commit-queue, fpizlo, ggaren, gskachkov, joepeck, keith_miller, mark.lam, msaboff, oliver, ossy, sukolsak, ysuzuki
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on: 151617    
Bug Blocks: 149409, 150040    
Attachments:
Description Flags
WIP
none
WIP
none
WIP
none
patch
none
patch
none
patch
none
patch
none
patch
none
patch none

Description Saam Barati 2015-09-28 11:53:38 PDT
We should have the inline cache spill and then restore the necessary registers.
Comment 1 Saam Barati 2015-09-29 18:03:14 PDT
Created attachment 262127 [details]
WIP

I still need to write code that reclaims call site indices.
Comment 2 Saam Barati 2015-09-29 19:14:22 PDT
Created attachment 262132 [details]
WIP

some clean up work. Still need to implement reuse of call site indices
Comment 3 WebKit Commit Bot 2015-09-29 19:17:16 PDT
Attachment 262132 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:396:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:751:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:762:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:767:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:772:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1045:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1243:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 7 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 4 Saam Barati 2015-10-04 13:57:20 PDT
Created attachment 262407 [details]
WIP

Almost done.
I just want to write a couple more tests and make sure 32-bit is working.
Comment 5 Saam Barati 2015-10-04 17:02:54 PDT
Created attachment 262410 [details]
patch
Comment 6 WebKit Commit Bot 2015-10-04 17:05:26 PDT
Attachment 262410 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:691:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:767:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:819:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1300:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:100:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/ScratchRegisterAllocator.cpp:269:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:102:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:103:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:104:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 11 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 7 Saam Barati 2015-10-04 17:36:25 PDT
Created attachment 262411 [details]
patch
Comment 8 WebKit Commit Bot 2015-10-04 17:38:50 PDT
Attachment 262411 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:691:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:767:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:819:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1300:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:100:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/ScratchRegisterAllocator.cpp:269:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:103:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:104:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:105:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 11 in 41 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 9 Saam Barati 2015-10-06 08:42:44 PDT
Looks neutral:
VMs tested:
"og" at /Users/saambarati/WK/ternary/WebKitBuild/Release/jsc (r190555)
"ICChanges" at /Users/saambarati/WK/Clean/WebKitBuild/Release/jsc (r190555)

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

                                                            og                    ICChanges                                     
SunSpider:
   3d-cube                                            5.9712+-1.1714     ?      6.0020+-1.4125        ?
   3d-morph                                           6.4361+-0.6031     ?      6.6345+-1.2050        ? might be 1.0308x slower
   3d-raytrace                                        9.0323+-1.1682            8.8069+-1.3142          might be 1.0256x faster
   access-binary-trees                                2.9609+-0.2756     ?      3.5481+-0.9453        ? might be 1.1983x slower
   access-fannkuch                                    7.0519+-0.8212     ?      7.5455+-1.3392        ? might be 1.0700x slower
   access-nbody                                       3.3843+-0.8004     ?      3.7256+-1.1359        ? might be 1.1008x slower
   access-nsieve                                      3.8198+-0.7339            3.6211+-0.0745          might be 1.0549x faster
   bitops-3bit-bits-in-byte                           2.7821+-1.2280            1.7266+-0.2800          might be 1.6113x faster
   bitops-bits-in-byte                                5.7083+-2.8978            4.0467+-0.6341          might be 1.4106x faster
   bitops-bitwise-and                                 2.4438+-0.1647     ?      2.6517+-0.4191        ? might be 1.0851x slower
   bitops-nsieve-bits                                 3.6664+-0.6538     ?      4.9967+-1.7503        ? might be 1.3628x slower
   controlflow-recursive                              4.0620+-1.0120            3.8095+-1.0245          might be 1.0663x faster
   crypto-aes                                         7.3050+-6.0456            5.5205+-1.9257          might be 1.3233x faster
   crypto-md5                                         4.0653+-1.7454            3.8329+-0.6161          might be 1.0606x faster
   crypto-sha1                                        4.2910+-1.8466            3.4115+-0.1821          might be 1.2578x faster
   date-format-tofte                                  9.6624+-0.8264     ?     10.5456+-2.8664        ? might be 1.0914x slower
   date-format-xparb                                  5.7173+-0.6569            5.7067+-0.4817        
   math-cordic                                        3.9300+-0.3550     ?      5.1025+-2.0058        ? might be 1.2984x slower
   math-partial-sums                                  7.4258+-3.6456            5.8854+-0.5494          might be 1.2617x faster
   math-spectral-norm                                 2.5772+-0.1173     ?      3.1830+-1.2189        ? might be 1.2351x slower
   regexp-dna                                         7.4396+-0.6105            7.3964+-0.5355        
   string-base64                                      5.0511+-0.1407     ?      5.1817+-0.2707        ? might be 1.0259x slower
   string-fasta                                       8.0880+-1.0139     ?      9.5605+-1.6280        ? might be 1.1821x slower
   string-tagcloud                                   10.3347+-1.1207     ?     10.9085+-1.5452        ? might be 1.0555x slower
   string-unpack-code                                25.5645+-2.7034           22.3475+-1.5930          might be 1.1440x faster
   string-validate-input                              6.2897+-1.3052            6.0450+-1.0613          might be 1.0405x faster

   <arithmetic>                                       6.3485+-0.4133            6.2209+-0.3282          might be 1.0205x faster

                                                            og                    ICChanges                                     
LongSpider:
   3d-cube                                          972.6522+-12.1938    ?    974.6314+-15.4385       ?
   3d-morph                                        1878.3481+-14.0515        1872.1945+-9.2600        
   3d-raytrace                                      731.6548+-14.8420    ?    748.3438+-25.9692       ? might be 1.0228x slower
   access-binary-trees                             1055.5800+-10.2644    ?   1061.4035+-16.7354       ?
   access-fannkuch                                  334.0493+-3.7578     ?    345.1624+-28.7848       ? might be 1.0333x slower
   access-nbody                                     639.3097+-8.7800          637.0160+-9.8632        
   access-nsieve                                    563.4510+-6.0077          561.1833+-2.2432        
   bitops-3bit-bits-in-byte                          42.8488+-4.6011     ?     43.7822+-4.2991        ? might be 1.0218x slower
   bitops-bits-in-byte                               93.5752+-3.3014           93.2910+-4.1138        
   bitops-nsieve-bits                               589.6168+-8.2610          582.3938+-7.6724          might be 1.0124x faster
   controlflow-recursive                            532.3648+-19.2336    ?    541.8143+-4.4085        ? might be 1.0178x slower
   crypto-aes                                       682.3782+-12.8218         676.3643+-15.2510       
   crypto-md5                                       558.9372+-22.8579    ?    559.2322+-27.6058       ?
   crypto-sha1                                      759.2666+-39.6068         756.8966+-19.3876       
   date-format-tofte                                626.8222+-27.5349         603.3210+-12.2151         might be 1.0390x faster
   date-format-xparb                                789.9055+-6.5521     ?    791.5809+-5.3206        ?
   hash-map                                         186.6709+-15.5535         183.7682+-2.7437          might be 1.0158x faster
   math-cordic                                      606.1450+-8.9351          597.0732+-9.1239          might be 1.0152x faster
   math-partial-sums                                573.5443+-10.0326         572.6233+-11.0645       
   math-spectral-norm                               693.3304+-10.2000    ?    712.6786+-74.1369       ? might be 1.0279x slower
   string-base64                                    420.2315+-6.0442          415.6218+-6.5190          might be 1.0111x faster
   string-fasta                                     444.1515+-8.0168     ?    451.6709+-19.2852       ? might be 1.0169x slower
   string-tagcloud                                  209.5832+-4.4622          209.2195+-3.1140        

   <geometric>                                      482.8243+-3.9062     ?    483.3452+-4.2196        ? might be 1.0011x slower

                                                            og                    ICChanges                                     
V8Spider:
   crypto                                            89.5950+-4.7105     ?     89.7323+-7.1368        ?
   deltablue                                        128.2217+-13.3038    ?    129.7655+-8.8590        ? might be 1.0120x slower
   earley-boyer                                      82.8813+-22.5243          77.0791+-5.3433          might be 1.0753x faster
   raytrace                                          61.1033+-8.4203           60.6629+-8.5505        
   regexp                                            79.7726+-1.7815     ?     84.3777+-13.1232       ? might be 1.0577x slower
   richards                                          98.7692+-7.3082     ?    101.1993+-7.6389        ? might be 1.0246x slower
   splay                                             60.5736+-4.1673     ?     63.1320+-6.2294        ? might be 1.0422x slower

   <geometric>                                       82.8679+-3.5397     ?     83.6206+-1.6686        ? might be 1.0091x slower

                                                            og                    ICChanges                                     
Octane:
   encrypt                                           0.20209+-0.00413          0.19965+-0.00193         might be 1.0122x faster
   decrypt                                           3.54211+-0.02783    ?     3.79184+-0.62065       ? might be 1.0705x slower
   deltablue                                x2       0.17138+-0.01023          0.16839+-0.00851         might be 1.0177x faster
   earley                                            0.46481+-0.13142          0.45495+-0.11325         might be 1.0217x faster
   boyer                                             5.78176+-0.13465    ?     5.87598+-0.44249       ? might be 1.0163x slower
   navier-stokes                            x2       6.02362+-0.09498          5.99432+-0.07124       
   raytrace                                 x2       1.07318+-0.01923          1.07022+-0.00548       
   richards                                 x2       0.11106+-0.00133          0.11031+-0.00138       
   splay                                    x2       0.53001+-0.01196    ?     0.54530+-0.01802       ? might be 1.0289x slower
   regexp                                   x2      30.65142+-0.54406    ?    30.88505+-0.93154       ?
   pdfjs                                    x2      46.59626+-0.96214    ?    46.66345+-0.58957       ?
   mandreel                                 x2      66.27960+-1.60646    ?    68.17164+-1.95855       ? might be 1.0285x slower
   gbemu                                    x2      54.13570+-1.09352    ?    55.16681+-3.48232       ? might be 1.0190x slower
   closure                                           0.71002+-0.02128          0.69395+-0.02123         might be 1.0232x faster
   jquery                                            9.09799+-0.09948          9.08922+-0.07120       
   box2d                                    x2      15.01402+-2.48089         13.86701+-0.28672         might be 1.0827x faster
   zlib                                     x2     467.49862+-21.37039   ?   473.13961+-13.48115      ? might be 1.0121x slower
   typescript                               x2    1013.63228+-58.57857   ?  1227.75854+-532.72412     ? might be 1.2112x slower

   <geometric>                                       7.25846+-0.11439    ?     7.33024+-0.24821       ? might be 1.0099x slower

                                                            og                    ICChanges                                     
Kraken:
   ai-astar                                          146.662+-2.544      ?     147.280+-1.761         ?
   audio-beat-detection                               56.729+-0.983      ?      56.997+-1.071         ?
   audio-dft                                         135.932+-2.784            133.851+-1.582           might be 1.0155x faster
   audio-fft                                          41.269+-0.549      ?      41.362+-1.170         ?
   audio-oscillator                                   68.322+-4.958      ?      68.463+-2.494         ?
   imaging-darkroom                                   74.347+-2.134      ?      76.148+-8.290         ? might be 1.0242x slower
   imaging-desaturate                                 72.921+-8.526             70.791+-5.616           might be 1.0301x faster
   imaging-gaussian-blur                             100.141+-2.614      ?     114.617+-19.051        ? might be 1.1446x slower
   json-parse-financial                               45.721+-1.966      ?      48.760+-3.136         ? might be 1.0665x slower
   json-stringify-tinderbox                           31.290+-12.472            26.898+-2.082           might be 1.1633x faster
   stanford-crypto-aes                                53.612+-4.137             49.120+-2.194           might be 1.0915x faster
   stanford-crypto-ccm                                45.155+-4.325      ?      51.139+-8.774         ? might be 1.1325x slower
   stanford-crypto-pbkdf2                            116.270+-6.511            114.214+-2.504           might be 1.0180x faster
   stanford-crypto-sha256-iterative                   44.897+-1.992             44.717+-2.514         

   <arithmetic>                                       73.805+-1.311      ?      74.597+-1.248         ? might be 1.0107x slower

                                                            og                    ICChanges                                     
JSRegress:
   abc-forward-loop-equal                            40.5785+-7.6773           35.1667+-1.5602          might be 1.1539x faster
   abc-postfix-backward-loop                         36.4103+-2.6565     ?     36.5305+-2.5726        ?
   abc-simple-backward-loop                          34.8820+-1.1089     ?     35.0390+-3.4346        ?
   abc-simple-forward-loop                           36.6855+-3.2314           34.5846+-2.1545          might be 1.0607x faster
   abc-skippy-loop                                   25.9508+-2.0855           25.4735+-2.6606          might be 1.0187x faster
   abs-boolean                                        3.3973+-0.7912            3.0660+-0.1314          might be 1.1081x faster
   adapt-to-double-divide                            19.0023+-1.2670     ?     19.1314+-0.8811        ?
   aliased-arguments-getbyval                         1.3799+-0.0416     ?      1.4920+-0.2583        ? might be 1.0813x slower
   allocate-big-object                                3.6851+-1.8541            2.8453+-0.2185          might be 1.2951x faster
   arguments-named-and-reflective                    13.1334+-1.2802           13.1213+-0.8564        
   arguments-out-of-bounds                           10.5213+-0.7523     ?     12.0098+-1.4810        ? might be 1.1415x slower
   arguments-strict-mode                             12.1970+-0.7925           11.8354+-1.4478          might be 1.0305x faster
   arguments                                         10.2323+-1.2394     ?     10.2614+-0.7322        ?
   arity-mismatch-inlining                            1.6891+-0.6632            1.3756+-0.3748          might be 1.2279x faster
   array-access-polymorphic-structure                 8.6277+-0.7564            8.3217+-0.6075          might be 1.0368x faster
   array-nonarray-polymorhpic-access                 30.2921+-3.3167     ?     30.7442+-2.2179        ? might be 1.0149x slower
   array-prototype-every                             95.0406+-5.4376           92.4058+-3.9627          might be 1.0285x faster
   array-prototype-forEach                           88.2726+-6.4007     ?     96.1898+-9.9557        ? might be 1.0897x slower
   array-prototype-map                              100.6276+-3.2123           98.9584+-5.1318          might be 1.0169x faster
   array-prototype-reduce                            91.3812+-4.6324           90.5845+-3.6118        
   array-prototype-reduceRight                       92.8190+-6.4439           92.2511+-6.9165        
   array-prototype-some                              91.3654+-5.1822     ?     92.7832+-3.6623        ? might be 1.0155x slower
   array-splice-contiguous                           24.2375+-1.6907           24.1525+-1.7701        
   array-with-double-add                              4.3652+-0.6689            4.3125+-0.6560          might be 1.0122x faster
   array-with-double-increment                        4.0794+-0.7722            3.6741+-0.0819          might be 1.1103x faster
   array-with-double-mul-add                          6.3271+-1.8339            5.3569+-1.1167          might be 1.1811x faster
   array-with-double-sum                              3.9001+-0.2406     ?      4.6772+-1.0864        ? might be 1.1993x slower
   array-with-int32-add-sub                          10.2752+-6.8176            8.6595+-1.6226          might be 1.1866x faster
   array-with-int32-or-double-sum                     4.1864+-0.9001     ?      4.3334+-0.6231        ? might be 1.0351x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     39.6542+-3.1773           37.5927+-2.8754          might be 1.0548x faster
   ArrayBuffer-DataView-alloc-long-lived             16.1089+-2.5864           15.7330+-0.8014          might be 1.0239x faster
   ArrayBuffer-Int32Array-byteOffset                  4.2131+-0.1740            4.0904+-0.1064          might be 1.0300x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     38.7609+-2.4383     ?     44.5329+-17.2643       ? might be 1.1489x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.1107+-1.1772     ?     25.8824+-1.8649        ? might be 1.0735x slower
   ArrayBuffer-Int8Array-alloc-long-lived            13.9533+-0.5783     ?     15.0289+-1.7568        ? might be 1.0771x slower
   ArrayBuffer-Int8Array-alloc                       12.8304+-1.5961           11.9333+-0.8249          might be 1.0752x faster
   arrowfunction-call                                14.5321+-0.6723     ?     14.8393+-1.8631        ? might be 1.0211x slower
   asmjs_bool_bug                                    11.1696+-3.1222            9.4725+-1.5884          might be 1.1792x faster
   assign-custom-setter-polymorphic                   2.9991+-0.1494     ?      3.2196+-0.4345        ? might be 1.0735x slower
   assign-custom-setter                               4.6274+-0.8786            4.0623+-0.2564          might be 1.1391x faster
   basic-set                                         12.5813+-1.8456     ?     14.5140+-3.5602        ? might be 1.1536x slower
   big-int-mul                                        4.3563+-0.8708            4.1081+-0.2095          might be 1.0604x faster
   boolean-test                                       3.6860+-0.6242            3.4259+-0.2290          might be 1.0759x faster
   branch-fold                                        6.8238+-3.0052            4.4988+-0.6125          might be 1.5168x faster
   branch-on-string-as-boolean                       19.9884+-1.9983     ?     20.0369+-1.9213        ?
   by-val-generic                                     3.9320+-0.6752            3.8998+-0.3166        
   call-spread-apply                                 41.7561+-5.5418           40.0848+-4.3612          might be 1.0417x faster
   call-spread-call                                  31.9310+-3.2624           31.0365+-4.0177          might be 1.0288x faster
   captured-assignments                               0.5988+-0.0779            0.5510+-0.0494          might be 1.0866x faster
   cast-int-to-double                                 6.8103+-0.7698            6.5974+-0.6656          might be 1.0323x faster
   cell-argument                                      6.6796+-0.4661     ?      6.9646+-0.8271        ? might be 1.0427x slower
   cfg-simplify                                       3.2757+-0.3511            3.2443+-0.0942        
   chain-getter-access                               12.3108+-3.0165           10.9441+-1.3311          might be 1.1249x faster
   cmpeq-obj-to-obj-other                            16.7913+-3.9005           16.7346+-1.5019        
   constant-test                                      5.8944+-0.3993     ?      6.1380+-0.6952        ? might be 1.0413x slower
   create-lots-of-functions                          14.1426+-3.5787           12.4633+-1.3652          might be 1.1347x faster
   cse-new-array-buffer                               2.9397+-0.6219            2.7506+-0.1584          might be 1.0687x faster
   cse-new-array                                      3.1695+-1.0234     ?      3.2399+-1.0480        ? might be 1.0222x slower
   DataView-custom-properties                        42.8549+-1.3516     ?     43.6618+-3.1757        ? might be 1.0188x slower
   delay-tear-off-arguments-strictmode               15.3208+-0.9352     ?     15.7365+-1.6700        ? might be 1.0271x slower
   deltablue-varargs                                267.8625+-17.3245         267.0390+-24.3979       
   destructuring-arguments                          191.8212+-6.9507          190.5754+-3.7753        
   destructuring-parameters-overridden-by-function   
                                                      0.6066+-0.0449            0.5900+-0.0297          might be 1.0281x faster
   destructuring-swap                                 6.0892+-0.9927     ?      6.6649+-1.4052        ? might be 1.0946x slower
   direct-arguments-getbyval                          1.6615+-0.3668            1.5660+-0.2045          might be 1.0610x faster
   div-boolean-double                                 5.8965+-0.1081     ?      6.1749+-0.4413        ? might be 1.0472x slower
   div-boolean                                       10.1680+-1.2009            9.6143+-1.0206          might be 1.0576x faster
   double-get-by-val-out-of-bounds                    7.1948+-1.0097            6.4126+-0.9952          might be 1.1220x faster
   double-pollution-getbyval                         10.6680+-1.4683     ?     10.8691+-1.5967        ? might be 1.0188x slower
   double-pollution-putbyoffset                       4.3063+-0.4449     ?      4.6799+-1.2004        ? might be 1.0867x slower
   double-real-use                                   32.7018+-4.6242           30.2910+-0.8840          might be 1.0796x faster
   double-to-int32-typed-array-no-inline              3.4559+-0.6277     ?      3.7660+-0.7649        ? might be 1.0897x slower
   double-to-int32-typed-array                        3.0927+-0.6231     ?      3.2955+-0.5732        ? might be 1.0656x slower
   double-to-uint32-typed-array-no-inline             3.6813+-0.7266            3.3271+-0.2762          might be 1.1064x faster
   double-to-uint32-typed-array                       3.6027+-1.8014     ?      4.4690+-3.1145        ? might be 1.2405x slower
   elidable-new-object-dag                           46.0616+-2.4060           44.8884+-2.8840          might be 1.0261x faster
   elidable-new-object-roflcopter                    49.6471+-9.5309           45.0931+-3.1605          might be 1.1010x faster
   elidable-new-object-then-call                     40.3270+-2.7890     ?     41.9363+-4.3383        ? might be 1.0399x slower
   elidable-new-object-tree                          49.4295+-1.6116     ?     51.8620+-4.5982        ? might be 1.0492x slower
   empty-string-plus-int                              6.1376+-0.3983     ?      6.5701+-2.2346        ? might be 1.0705x slower
   emscripten-cube2hash                              36.3400+-3.0678     ?     37.2830+-2.2345        ? might be 1.0259x slower
   exit-length-on-plain-object                       18.4832+-1.3235           18.0537+-0.7700          might be 1.0238x faster
   external-arguments-getbyval                        1.6087+-0.3443     ?      2.1587+-0.5383        ? might be 1.3419x slower
   external-arguments-putbyval                        2.7083+-0.4732            2.6849+-0.2661        
   fixed-typed-array-storage-var-index                1.9591+-0.3454            1.7747+-0.2945          might be 1.1039x faster
   fixed-typed-array-storage                          1.3378+-0.0924            1.2679+-0.0401          might be 1.0551x faster
   Float32Array-matrix-mult                           5.0522+-0.8422     ?      5.0603+-0.7182        ?
   Float32Array-to-Float64Array-set                  68.7450+-22.8895          59.6580+-6.9523          might be 1.1523x faster
   Float64Array-alloc-long-lived                     83.5693+-6.5337     ?     83.9733+-1.2478        ?
   Float64Array-to-Int16Array-set                    70.6727+-2.3582     ?     72.0339+-2.4060        ? might be 1.0193x slower
   fold-double-to-int                                15.0973+-0.9419           14.3066+-0.3175          might be 1.0553x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     19.9352+-5.8248           15.8105+-1.5682          might be 1.2609x faster
   fold-get-by-id-to-multi-get-by-offset             14.7218+-2.8252     ?     15.2888+-3.2723        ? might be 1.0385x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                     13.9758+-2.1106           13.8248+-1.0100          might be 1.0109x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     14.2512+-2.0221           12.3198+-2.8300          might be 1.1568x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     15.6659+-1.3433           13.5415+-2.2308          might be 1.1569x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     14.3495+-1.8025     ?     14.6245+-3.0537        ? might be 1.0192x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     16.5597+-3.0053           14.9126+-3.0420          might be 1.1104x faster
   fold-put-by-id-to-multi-put-by-offset             16.5107+-1.5485           15.8066+-1.7183          might be 1.0445x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     16.4640+-1.6963     ?     18.1163+-2.6997        ? might be 1.1004x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     16.2173+-1.9894           15.9198+-1.6543          might be 1.0187x faster
   fold-put-structure                                13.6281+-3.6213     ?     16.5767+-4.0251        ? might be 1.2164x slower
   for-of-iterate-array-entries                      15.6742+-2.6500           14.3891+-2.0505          might be 1.0893x faster
   for-of-iterate-array-keys                          4.9959+-1.4511            4.6210+-0.6656          might be 1.0811x faster
   for-of-iterate-array-values                        4.5169+-0.9433            4.2149+-0.3194          might be 1.0716x faster
   fround                                            22.2182+-2.1012           21.0994+-1.8106          might be 1.0530x faster
   ftl-library-inlining-dataview                     69.8794+-3.5967           69.0512+-2.7342          might be 1.0120x faster
   ftl-library-inlining                             119.0533+-3.4817     !    126.8560+-3.6843        ! definitely 1.0655x slower
   function-call                                     14.2128+-1.5247           13.8758+-0.6586          might be 1.0243x faster
   function-dot-apply                                 3.6101+-1.8625            3.0504+-0.7365          might be 1.1835x faster
   function-test                                      3.6302+-0.7144            3.3118+-0.5919          might be 1.0961x faster
   function-with-eval                               116.7544+-3.0031          116.3269+-5.2462        
   gcse-poly-get-less-obvious                        23.5065+-0.6942     ?     24.3835+-1.6916        ? might be 1.0373x slower
   gcse-poly-get                                     26.3253+-2.1134           26.1524+-2.2100        
   gcse                                               4.9091+-0.8636            4.4688+-0.9980          might be 1.0985x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.1688+-0.4104     ?      3.3341+-0.5224        ? might be 1.0521x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.8662+-2.9657            6.1813+-1.2918          might be 1.1108x faster
   get-by-id-chain-from-try-block                     2.9219+-0.2407     ?      3.0003+-0.4904        ? might be 1.0268x slower
   get-by-id-check-structure-elimination              4.9960+-1.2826     ?      5.9578+-1.6069        ? might be 1.1925x slower
   get-by-id-proto-or-self                           20.8012+-2.2818     ?     21.5683+-4.6204        ? might be 1.0369x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.1259+-1.1057            3.5687+-0.5297          might be 1.1561x faster
   get-by-id-self-or-proto                           23.5081+-5.7826           21.4516+-4.4917          might be 1.0959x faster
   get-by-val-out-of-bounds                           6.3518+-0.9859            6.0130+-1.0505          might be 1.0563x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      3.8008+-1.0392            3.3243+-0.1684          might be 1.1433x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      7.6279+-1.4515     ?      8.1597+-2.3339        ? might be 1.0697x slower
   get-by-val-with-string-chain-from-try-block   
                                                      2.9922+-0.3162     ?      3.0236+-0.3998        ? might be 1.0105x slower
   get-by-val-with-string-check-structure-elimination   
                                                      7.6725+-1.9258     ?      7.7807+-2.5061        ? might be 1.0141x slower
   get-by-val-with-string-proto-or-self              19.5865+-0.7640     ?     20.7912+-1.5625        ? might be 1.0615x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      4.0721+-0.9905            4.0089+-0.9358          might be 1.0158x faster
   get-by-val-with-string-self-or-proto              19.1131+-1.1400     ?     20.7879+-2.5603        ? might be 1.0876x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      4.3548+-1.2610            4.2513+-1.0501          might be 1.0243x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     21.9029+-5.4355           19.0806+-2.9732          might be 1.1479x faster
   get-by-val-with-symbol-chain-from-try-block   
                                                      3.1186+-0.5900     ?      3.2150+-0.7159        ? might be 1.0309x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     16.6256+-2.7147     ?     18.9933+-2.4274        ? might be 1.1424x slower
   get-by-val-with-symbol-proto-or-self              20.4773+-2.3316     ?     21.0165+-1.8969        ? might be 1.0263x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      5.0382+-0.9169            4.5057+-0.0728          might be 1.1182x faster
   get-by-val-with-symbol-self-or-proto              20.1832+-1.5601     ?     20.2076+-1.4801        ?
   get_callee_monomorphic                             6.2636+-2.0342            4.7800+-2.0073          might be 1.3104x faster
   get_callee_polymorphic                             3.8936+-0.3896     ?      4.2722+-0.4782        ? might be 1.0972x slower
   getter-no-activation                               7.1222+-1.9145     ?      7.5078+-2.3194        ? might be 1.0541x slower
   getter-prototype                                  10.2951+-0.6409     ?     12.0889+-2.9739        ? might be 1.1742x slower
   getter-richards-try-catch                       1242.8812+-35.7496        1242.6178+-35.4499       
   getter-richards                                  200.8308+-8.9591          194.1327+-11.6482         might be 1.0345x faster
   getter                                             9.3242+-1.8161            9.1617+-1.3904          might be 1.0177x faster
   global-object-access-with-mutating-structure   
                                                      8.2823+-2.2994            7.5642+-1.2400          might be 1.0949x faster
   global-var-const-infer-fire-from-opt               1.0686+-0.1900            1.0070+-0.1742          might be 1.0612x faster
   global-var-const-infer                             0.7848+-0.0156     ?      1.0837+-0.3951        ? might be 1.3809x slower
   hard-overflow-check-equal                         35.7443+-6.7435           34.1563+-2.6116          might be 1.0465x faster
   hard-overflow-check                               31.4619+-1.7230     ?     31.8312+-1.7808        ? might be 1.0117x slower
   HashMap-put-get-iterate-keys                      47.6984+-9.0011     ?     47.7622+-5.5899        ?
   HashMap-put-get-iterate                           57.6709+-13.2484          45.0625+-4.4347          might be 1.2798x faster
   HashMap-string-put-get-iterate                    41.4940+-5.3761           39.3713+-2.9591          might be 1.0539x faster
   hoist-make-rope                                   11.8787+-2.7427           11.7645+-0.4976        
   hoist-poly-check-structure-effectful-loop   
                                                      7.0862+-1.6785            5.0508+-0.7669          might be 1.4030x faster
   hoist-poly-check-structure                         3.8824+-0.7567     ?      5.3078+-3.5101        ? might be 1.3672x slower
   imul-double-only                                   8.4606+-0.9320     ?      9.2445+-1.5363        ? might be 1.0927x slower
   imul-int-only                                      9.5415+-0.9796     ?      9.6520+-0.7287        ? might be 1.0116x slower
   imul-mixed                                         8.6020+-1.0672            8.2277+-0.9299          might be 1.0455x faster
   in-four-cases                                     23.7056+-3.8558           23.4890+-2.7253        
   in-one-case-false                                 15.7461+-2.8188     ?     15.7735+-2.7830        ?
   in-one-case-true                                  13.9148+-2.5707     ?     14.3130+-1.9613        ? might be 1.0286x slower
   in-two-cases                                      15.6825+-3.3227     ?     16.5938+-4.2254        ? might be 1.0581x slower
   indexed-properties-in-objects                      3.6268+-0.4054     ?      3.6445+-0.7032        ?
   infer-closure-const-then-mov-no-inline             6.1419+-1.1994     ?      7.7558+-2.6835        ? might be 1.2628x slower
   infer-closure-const-then-mov                      22.8818+-0.8594           22.6408+-1.1994          might be 1.0106x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     13.9560+-1.7796           12.9225+-0.1682          might be 1.0800x faster
   infer-closure-const-then-put-to-scope             27.0680+-0.8590           26.9426+-1.8298        
   infer-closure-const-then-reenter-no-inline   
                                                     64.7584+-12.4782          58.9113+-3.4553          might be 1.0993x faster
   infer-closure-const-then-reenter                  27.7145+-1.4907     ?     28.0730+-1.6922        ? might be 1.0129x slower
   infer-constant-global-property                     4.6847+-1.5657            4.1159+-0.4145          might be 1.1382x faster
   infer-constant-property                            3.2574+-0.2329     ?      3.7216+-0.9206        ? might be 1.1425x slower
   infer-one-time-closure-ten-vars                   10.4268+-3.0897            9.4148+-1.1455          might be 1.1075x faster
   infer-one-time-closure-two-vars                    8.6058+-0.5374     ?      9.2443+-1.1028        ? might be 1.0742x slower
   infer-one-time-closure                            10.6359+-4.0511            8.1765+-0.2381          might be 1.3008x faster
   infer-one-time-deep-closure                       12.7801+-0.9758           12.7554+-0.6654        
   inline-arguments-access                            5.3028+-1.1118     ?      6.0662+-1.5737        ? might be 1.1440x slower
   inline-arguments-aliased-access                    4.8176+-0.3715     ?      5.7518+-2.1220        ? might be 1.1939x slower
   inline-arguments-local-escape                      4.7526+-0.0911     ?      4.9174+-0.3962        ? might be 1.0347x slower
   inline-get-scoped-var                              7.2576+-2.4736            7.2050+-1.5798        
   inlined-put-by-id-transition                      14.9880+-6.3224           11.9542+-0.4632          might be 1.2538x faster
   inlined-put-by-val-with-string-transition   
                                                     51.8278+-3.2374     ?     53.6451+-5.8838        ? might be 1.0351x slower
   inlined-put-by-val-with-symbol-transition   
                                                     50.4982+-2.2549     ?     53.0722+-5.6634        ? might be 1.0510x slower
   int-or-other-abs-then-get-by-val                   6.0291+-1.1204     ?      6.1993+-0.6023        ? might be 1.0282x slower
   int-or-other-abs-zero-then-get-by-val             19.7368+-5.7901           18.2181+-1.2142          might be 1.0834x faster
   int-or-other-add-then-get-by-val                   6.3996+-1.4823     ?      7.1849+-1.2560        ? might be 1.1227x slower
   int-or-other-add                                   6.3557+-0.8420     ?      6.7353+-0.5775        ? might be 1.0597x slower
   int-or-other-div-then-get-by-val                   5.5009+-1.0693            5.3097+-1.0824          might be 1.0360x faster
   int-or-other-max-then-get-by-val                   5.8569+-0.9469     ?      6.2317+-1.6067        ? might be 1.0640x slower
   int-or-other-min-then-get-by-val                   5.2492+-1.1604     ?      6.1284+-1.1317        ? might be 1.1675x slower
   int-or-other-mod-then-get-by-val                   4.3077+-0.6987     ?      5.4359+-1.4558        ? might be 1.2619x slower
   int-or-other-mul-then-get-by-val                   4.8287+-1.0706     ?      7.5611+-3.0931        ? might be 1.5659x slower
   int-or-other-neg-then-get-by-val                   6.1499+-1.5517     ?      6.2177+-0.8126        ? might be 1.0110x slower
   int-or-other-neg-zero-then-get-by-val             18.0262+-0.6763     ?     19.7896+-1.8511        ? might be 1.0978x slower
   int-or-other-sub-then-get-by-val                   7.4366+-1.4071     ?      7.7732+-1.1376        ? might be 1.0453x slower
   int-or-other-sub                                   6.1977+-0.6861            6.0438+-2.0940          might be 1.0255x faster
   int-overflow-local                                 6.4847+-1.3498            5.5479+-1.2244          might be 1.1689x faster
   Int16Array-alloc-long-lived                       58.5799+-4.2971     ?     58.9682+-2.6251        ?
   Int16Array-bubble-sort-with-byteLength            21.1222+-2.4401     ?     24.5389+-8.2542        ? might be 1.1618x slower
   Int16Array-bubble-sort                            20.4086+-1.2435           19.6825+-0.8089          might be 1.0369x faster
   Int16Array-load-int-mul                            1.7616+-0.0786     ?      1.8093+-0.2138        ? might be 1.0271x slower
   Int16Array-to-Int32Array-set                      62.0201+-22.3611          53.8016+-1.5042          might be 1.1528x faster
   Int32Array-alloc-large                            13.6356+-1.6090     ?     16.3467+-5.5806        ? might be 1.1988x slower
   Int32Array-alloc-long-lived                       66.5599+-2.8152     ?     67.5088+-2.8788        ? might be 1.0143x slower
   Int32Array-alloc                                   4.1723+-0.7296            3.4624+-0.2349          might be 1.2051x faster
   Int32Array-Int8Array-view-alloc                    8.6296+-2.2826            7.6982+-1.2020          might be 1.1210x faster
   int52-spill                                        7.4375+-1.1003            6.5920+-1.5140          might be 1.1283x faster
   Int8Array-alloc-long-lived                        50.7658+-2.7102     ?     52.4792+-4.6957        ? might be 1.0338x slower
   Int8Array-load-with-byteLength                     4.1782+-0.3227     ?      5.3703+-3.4051        ? might be 1.2853x slower
   Int8Array-load                                     4.4186+-1.2591     ?      4.5857+-0.7750        ? might be 1.0378x slower
   integer-divide                                    13.5564+-1.5596     ?     13.9095+-1.6759        ? might be 1.0260x slower
   integer-modulo                                     2.1329+-0.3103     ?      2.2568+-0.7566        ? might be 1.0581x slower
   is-boolean-fold-tricky                             5.5366+-1.5268     ?      5.7369+-2.8663        ? might be 1.0362x slower
   is-boolean-fold                                    3.1965+-0.3128     ?      3.6216+-0.6532        ? might be 1.1330x slower
   is-function-fold-tricky-internal-function   
                                                     12.0550+-2.1563           11.3844+-0.5452          might be 1.0589x faster
   is-function-fold-tricky                            4.7526+-0.3838     ?      5.6389+-1.3444        ? might be 1.1865x slower
   is-function-fold                                   3.3512+-0.4227     ?      3.5350+-0.7413        ? might be 1.0548x slower
   is-number-fold-tricky                              4.7887+-0.7259     ?      5.0957+-0.8460        ? might be 1.0641x slower
   is-number-fold                                     3.2058+-0.2502     ?      3.6827+-0.8422        ? might be 1.1488x slower
   is-object-or-null-fold-functions                   3.5290+-0.4214     ?      3.7332+-0.9493        ? might be 1.0579x slower
   is-object-or-null-fold-less-tricky                 5.3361+-1.3278            5.2136+-0.9508          might be 1.0235x faster
   is-object-or-null-fold-tricky                      7.3232+-2.0012     ?      9.6758+-4.5893        ? might be 1.3213x slower
   is-object-or-null-fold                             3.5148+-0.7807            3.5123+-0.4357        
   is-object-or-null-trickier-function                5.5463+-1.2488            5.2811+-1.1518          might be 1.0502x faster
   is-object-or-null-trickier-internal-function   
                                                     12.0293+-0.8278     ?     14.3814+-2.8158        ? might be 1.1955x slower
   is-object-or-null-tricky-function                  4.4550+-0.0689     ?      5.5032+-1.4835        ? might be 1.2353x slower
   is-object-or-null-tricky-internal-function   
                                                      9.5120+-0.8195     ?     10.4277+-2.3861        ? might be 1.0963x slower
   is-string-fold-tricky                              4.3864+-0.0969     ?      4.6247+-0.3321        ? might be 1.0543x slower
   is-string-fold                                     3.4943+-0.7704            3.4475+-0.3937          might be 1.0136x faster
   is-undefined-fold-tricky                           5.0994+-1.5698            3.8834+-0.1351          might be 1.3131x faster
   is-undefined-fold                                  3.6203+-1.1356     ?      3.9993+-1.2632        ? might be 1.1047x slower
   JSONP-negative-0                                   0.3767+-0.1075            0.3192+-0.0204          might be 1.1802x faster
   large-int-captured                                 4.9688+-0.6583     ?      5.6702+-0.8999        ? might be 1.1412x slower
   large-int-neg                                     15.9819+-0.3858     ?     16.4686+-1.3956        ? might be 1.0305x slower
   large-int                                         16.8901+-1.5257           16.5316+-2.1187          might be 1.0217x faster
   load-varargs-elimination                          24.4835+-1.1768     ?     26.2004+-3.3475        ? might be 1.0701x slower
   logical-not-weird-types                            3.5751+-0.1124     ?      4.5943+-2.4886        ? might be 1.2851x slower
   logical-not                                        6.3470+-1.4201     ?      7.5861+-1.3556        ? might be 1.1952x slower
   lots-of-fields                                    10.6022+-0.2685     ?     11.4555+-1.0763        ? might be 1.0805x slower
   make-indexed-storage                               3.4838+-0.3515     ?      4.2526+-0.8423        ? might be 1.2207x slower
   make-rope-cse                                      5.8835+-1.5860            4.9039+-0.6121          might be 1.1998x faster
   marsaglia-larger-ints                             42.5995+-7.0995     ?     43.6762+-9.0233        ? might be 1.0253x slower
   marsaglia-osr-entry                               24.5894+-0.6633     ?     25.5103+-2.3808        ? might be 1.0375x slower
   math-with-out-of-bounds-array-values              25.4178+-0.8816           25.1235+-0.8545          might be 1.0117x faster
   max-boolean                                        3.7402+-0.7873            3.4768+-0.6475          might be 1.0758x faster
   method-on-number                                  19.5940+-2.3430     ?     20.8261+-6.9094        ? might be 1.0629x slower
   min-boolean                                        3.0273+-0.0590     !      4.0583+-0.8145        ! definitely 1.3406x slower
   minus-boolean-double                               3.6335+-0.2503     ?      3.8678+-0.5360        ? might be 1.0645x slower
   minus-boolean                                      3.3915+-0.8480            2.9683+-0.3769          might be 1.1425x faster
   misc-strict-eq                                    37.2918+-9.6800           36.2505+-2.6142          might be 1.0287x faster
   mod-boolean-double                                12.8919+-0.4664     ?     13.3526+-1.8008        ? might be 1.0357x slower
   mod-boolean                                        9.7248+-0.6740            9.3385+-0.1632          might be 1.0414x faster
   mul-boolean-double                                 4.1937+-0.3637     ?      4.2830+-0.2923        ? might be 1.0213x slower
   mul-boolean                                        3.3385+-0.2396            3.2567+-0.1649          might be 1.0251x faster
   neg-boolean                                        4.5164+-2.4992            3.5685+-0.2155          might be 1.2656x faster
   negative-zero-divide                               0.4460+-0.0464            0.4447+-0.0349        
   negative-zero-modulo                               0.7352+-0.3087            0.4299+-0.0210          might be 1.7103x faster
   negative-zero-negate                               0.4395+-0.1003            0.4240+-0.0211          might be 1.0367x faster
   nested-function-parsing                           48.9664+-1.3922     ?     49.5869+-1.7837        ? might be 1.0127x slower
   new-array-buffer-dead                            119.6619+-10.4698         114.1248+-3.0090          might be 1.0485x faster
   new-array-buffer-push                              7.7045+-0.9505            7.2501+-0.2420          might be 1.0627x faster
   new-array-dead                                    19.2527+-1.2307     ?     20.1227+-3.0348        ? might be 1.0452x slower
   new-array-push                                     5.9932+-1.6118     ?      6.5101+-2.3579        ? might be 1.0862x slower
   no-inline-constructor                             43.8985+-6.4951           39.5758+-1.9301          might be 1.1092x faster
   number-test                                        3.7290+-1.0215            3.6562+-0.6008          might be 1.0199x faster
   object-closure-call                                6.4699+-0.9468     ?      7.0368+-0.4394        ? might be 1.0876x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.2842+-0.1533            4.1874+-0.0346          might be 1.0231x faster
   object-test                                        3.4612+-0.6003     ?      3.5532+-0.9465        ? might be 1.0266x slower
   obvious-sink-pathology-taken                     129.7755+-3.5898     ?    131.6597+-2.8979        ? might be 1.0145x slower
   obvious-sink-pathology                           126.1809+-2.9668          123.7904+-3.1582          might be 1.0193x faster
   obviously-elidable-new-object                     37.0595+-2.7401           36.4898+-1.9018          might be 1.0156x faster
   plus-boolean-arith                                 2.8695+-0.2252     ?      3.0319+-0.5422        ? might be 1.0566x slower
   plus-boolean-double                                3.5885+-0.1729     ?      3.8045+-0.4831        ? might be 1.0602x slower
   plus-boolean                                       2.9089+-0.0894     ?      3.1973+-0.4773        ? might be 1.0991x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.1358+-0.2208     ?      3.2705+-0.5449        ? might be 1.0430x slower
   poly-chain-access-different-prototypes             3.1493+-0.1736     ?      4.2605+-1.3412        ? might be 1.3528x slower
   poly-chain-access-simpler                          3.6064+-0.5996            3.4763+-0.4973          might be 1.0374x faster
   poly-chain-access                                  3.2400+-0.4405     ?      3.2416+-0.4607        ?
   poly-stricteq                                     60.2886+-2.6892     ?     63.3138+-1.9695        ? might be 1.0502x slower
   polymorphic-array-call                             1.4788+-0.2467     ?      1.6379+-0.2693        ? might be 1.1076x slower
   polymorphic-get-by-id                              3.9628+-1.1330            3.5643+-0.5743          might be 1.1118x faster
   polymorphic-put-by-id                             34.6536+-2.3863     ?     36.8955+-6.1611        ? might be 1.0647x slower
   polymorphic-put-by-val-with-string                44.7779+-16.4925          34.9939+-2.7838          might be 1.2796x faster
   polymorphic-put-by-val-with-symbol                34.8880+-1.4611           34.6037+-3.4965        
   polymorphic-structure                             15.3102+-0.9071     ?     17.2335+-5.3120        ? might be 1.1256x slower
   polyvariant-monomorphic-get-by-id                  8.9956+-0.7068     ?     12.3693+-5.1931        ? might be 1.3750x slower
   proto-getter-access                               11.3647+-1.0794           11.0922+-0.7050          might be 1.0246x faster
   prototype-access-with-mutating-prototype           7.9947+-1.7418     ?      8.7474+-2.2969        ? might be 1.0942x slower
   put-by-id-replace-and-transition                   9.2940+-0.7016     ?      9.4744+-0.8043        ? might be 1.0194x slower
   put-by-id-slightly-polymorphic                     3.3505+-0.2347     ?      3.6783+-1.2055        ? might be 1.0978x slower
   put-by-id                                         14.0092+-0.8240     ?     15.2280+-1.8780        ? might be 1.0870x slower
   put-by-val-direct                                  0.5402+-0.2304            0.4906+-0.1453          might be 1.1010x faster
   put-by-val-large-index-blank-indexing-type   
                                                      7.4585+-2.0220            6.6030+-0.6958          might be 1.1296x faster
   put-by-val-machine-int                             3.2015+-0.7781     ?      3.2731+-0.9274        ? might be 1.0224x slower
   put-by-val-with-string-replace-and-transition   
                                                     16.4591+-2.4266     ?     18.0131+-4.3114        ? might be 1.0944x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      3.6077+-0.7454     ?      4.0482+-0.8934        ? might be 1.1221x slower
   put-by-val-with-string                            15.9558+-1.0940     ^     13.9567+-0.7299        ^ definitely 1.1432x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     16.7681+-3.0372           16.3894+-2.7084          might be 1.0231x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.8965+-0.9268     ?      3.9806+-0.6547        ? might be 1.0216x slower
   put-by-val-with-symbol                            14.9666+-0.8024     ?     16.8523+-3.8785        ? might be 1.1260x slower
   rare-osr-exit-on-local                            18.1656+-3.5616           16.8573+-2.0432          might be 1.0776x faster
   raytrace-with-empty-try-catch                      7.1583+-1.7677     ?      7.7989+-1.9320        ? might be 1.0895x slower
   raytrace-with-try-catch                           15.2334+-2.1651           13.8075+-1.2056          might be 1.1033x faster
   register-pressure-from-osr                        19.2770+-0.7019     ?     20.6706+-3.0384        ? might be 1.0723x slower
   repeat-multi-get-by-offset                        27.2705+-2.5017     ?     27.4728+-0.8819        ?
   richards-empty-try-catch                          86.1824+-2.7987     ?     87.4340+-5.0519        ? might be 1.0145x slower
   richards-try-catch                               285.6747+-3.9942     ?    286.9102+-2.3881        ?
   setter-prototype                                  10.8942+-1.4382           10.0138+-0.7309          might be 1.0879x faster
   setter                                             8.9319+-1.2444     ?      9.4237+-2.1829        ? might be 1.0551x slower
   simple-activation-demo                            29.3108+-1.3528     ?     30.4751+-2.4290        ? might be 1.0397x slower
   simple-getter-access                              13.3640+-0.4034           13.3635+-0.2563        
   simple-poly-call-nested                           10.4770+-0.9545     ?     10.9633+-1.0246        ? might be 1.0464x slower
   simple-poly-call                                   1.7023+-0.1262     ?      1.8863+-0.5894        ? might be 1.1081x slower
   sin-boolean                                       23.6318+-2.4549           23.0167+-2.3781          might be 1.0267x faster
   singleton-scope                                   79.2783+-2.9334           77.6946+-2.5750          might be 1.0204x faster
   sink-function                                     13.2144+-1.5041           12.8187+-0.8834          might be 1.0309x faster
   sink-huge-activation                              22.2880+-3.4253           19.2397+-2.3171          might be 1.1584x faster
   sinkable-new-object-dag                           75.3265+-4.2163           73.9743+-4.9450          might be 1.0183x faster
   sinkable-new-object-taken                         55.3212+-3.5036           54.3742+-5.2801          might be 1.0174x faster
   sinkable-new-object                               37.3565+-2.3115     ?     37.5342+-1.0566        ?
   slow-array-profile-convergence                     3.4049+-0.6458            3.2125+-0.5463          might be 1.0599x faster
   slow-convergence                                   3.4221+-0.7563            3.3685+-0.6137          might be 1.0159x faster
   slow-ternaries                                    23.8924+-3.2531           23.4130+-8.5864          might be 1.0205x faster
   sorting-benchmark                                 28.4791+-16.0281          22.2360+-2.6819          might be 1.2808x faster
   sparse-conditional                                 1.6618+-0.2881     ?      2.2402+-0.9773        ? might be 1.3480x slower
   splice-to-remove                                  14.6941+-1.2225     ?     17.2865+-4.3997        ? might be 1.1764x slower
   string-char-code-at                               15.4658+-0.8843     ?     17.5844+-5.8374        ? might be 1.1370x slower
   string-concat-object                               2.8556+-0.3385     ?      4.9363+-5.2124        ? might be 1.7286x slower
   string-concat-pair-object                          3.4610+-1.4661            2.9299+-0.7505          might be 1.1813x faster
   string-concat-pair-simple                         13.4889+-2.6009     ?     15.9122+-6.3180        ? might be 1.1796x slower
   string-concat-simple                              11.9072+-1.1801     ?     12.9143+-1.4442        ? might be 1.0846x slower
   string-cons-repeat                                 9.8721+-2.0106            9.8662+-1.5191        
   string-cons-tower                                  8.4577+-0.4953     ?      8.5685+-0.5033        ? might be 1.0131x slower
   string-equality                                   20.9603+-7.9558           18.3456+-1.6790          might be 1.1425x faster
   string-get-by-val-big-char                         9.1925+-2.2089     ?      9.9327+-2.0321        ? might be 1.0805x slower
   string-get-by-val-out-of-bounds-insane             3.8319+-0.1728     ?      4.2243+-0.7843        ? might be 1.1024x slower
   string-get-by-val-out-of-bounds                    5.6901+-2.4328            5.0634+-0.8495          might be 1.1238x faster
   string-get-by-val                                  3.2386+-0.1909     ?      3.5632+-0.4539        ? might be 1.1002x slower
   string-hash                                        2.5638+-0.1302     ?      2.7035+-0.4591        ? might be 1.0545x slower
   string-long-ident-equality                        16.0129+-1.8155           14.8130+-0.8250          might be 1.0810x faster
   string-out-of-bounds                              13.1980+-1.4655           12.8411+-1.7856          might be 1.0278x faster
   string-repeat-arith                               32.1906+-1.1332           31.5402+-1.3889          might be 1.0206x faster
   string-sub                                        72.9679+-13.8795          65.6990+-2.6642          might be 1.1106x faster
   string-test                                        3.8282+-1.6694            3.4432+-0.4859          might be 1.1118x faster
   string-var-equality                               31.3517+-3.2981     ?     33.6056+-8.9036        ? might be 1.0719x slower
   structure-hoist-over-transitions                   3.0378+-0.6805     ?      3.1342+-0.7947        ? might be 1.0317x slower
   substring-concat-weird                            44.2711+-3.7664     ?     48.8083+-8.8511        ? might be 1.1025x slower
   substring-concat                                  49.6333+-3.5925     ?     49.9080+-3.1039        ?
   substring                                         55.2603+-2.9753           54.6755+-3.0646          might be 1.0107x faster
   switch-char-constant                               4.1168+-1.6594            3.1516+-0.2914          might be 1.3063x faster
   switch-char                                       10.9067+-1.7585           10.5398+-1.9221          might be 1.0348x faster
   switch-constant                                   10.6917+-1.8847           10.6295+-1.8940        
   switch-string-basic-big-var                       19.2610+-3.8103           17.7867+-1.3249          might be 1.0829x faster
   switch-string-basic-big                           21.9043+-8.9834           18.6335+-4.5884          might be 1.1755x faster
   switch-string-basic-var                           15.9853+-0.9475           15.8154+-0.6927          might be 1.0107x faster
   switch-string-basic                               15.6685+-2.6094           15.6246+-1.6816        
   switch-string-big-length-tower-var                23.0103+-2.0603           21.8845+-2.7244          might be 1.0514x faster
   switch-string-length-tower-var                    15.3846+-1.0096     ?     15.9203+-1.4130        ? might be 1.0348x slower
   switch-string-length-tower                        13.7025+-0.7883     ?     14.6946+-1.8813        ? might be 1.0724x slower
   switch-string-short                               14.5695+-2.8006     ?     16.4755+-8.2200        ? might be 1.1308x slower
   switch                                            13.8559+-2.0056           13.0670+-1.1611          might be 1.0604x faster
   tear-off-arguments-simple                          4.5723+-1.4280            4.4302+-0.9406          might be 1.0321x faster
   tear-off-arguments                                 7.2111+-1.4432            5.9061+-0.6373          might be 1.2210x faster
   temporal-structure                                13.8045+-1.3134     ?     14.5157+-1.8703        ? might be 1.0515x slower
   to-int32-boolean                                  15.0218+-0.2526           14.6416+-0.2191          might be 1.0260x faster
   try-catch-get-by-val-cloned-arguments             11.7485+-1.0843           11.4011+-0.8722          might be 1.0305x faster
   try-catch-get-by-val-direct-arguments              2.7203+-0.5755     ?      2.8470+-0.5099        ? might be 1.0466x slower
   try-catch-get-by-val-scoped-arguments              6.7515+-2.0506            5.7097+-0.7092          might be 1.1825x faster
   typed-array-get-set-by-val-profiling              34.5321+-1.3548     ?     36.6861+-4.1236        ? might be 1.0624x slower
   undefined-property-access                        266.4876+-3.1010          263.7874+-7.6325          might be 1.0102x faster
   undefined-test                                     3.6436+-0.4503            3.5198+-0.2718          might be 1.0352x faster
   unprofiled-licm                                   11.5347+-1.3647           11.0550+-0.8644          might be 1.0434x faster
   v8-raytrace-with-empty-try-catch                  32.2491+-5.8774     ?     36.6505+-17.7096       ? might be 1.1365x slower
   v8-raytrace-with-try-catch                        84.1420+-7.8161           78.3025+-6.0384          might be 1.0746x faster
   varargs-call                                      18.0503+-1.5903           17.3894+-0.9146          might be 1.0380x faster
   varargs-construct-inline                          27.7101+-1.9033     ?     28.9854+-2.1822        ? might be 1.0460x slower
   varargs-construct                                 27.2606+-3.1525     ?     27.6930+-3.9960        ? might be 1.0159x slower
   varargs-inline                                    10.6984+-1.0801     ?     10.9133+-1.2238        ? might be 1.0201x slower
   varargs-strict-mode                               12.6183+-1.3386     ?     14.2194+-2.6030        ? might be 1.1269x slower
   varargs                                           11.5701+-0.4274     ?     13.8157+-4.4387        ? might be 1.1941x slower
   weird-inlining-const-prop                          2.8405+-0.2652     ?      4.5610+-3.7152        ? might be 1.6057x slower

   <geometric>                                       10.6200+-0.0712     ?     10.6508+-0.1309        ? might be 1.0029x slower

                                                            og                    ICChanges                                     
Geomean of preferred means:
   <scaled-result>                                   33.6126+-0.4991     ?     33.6912+-0.5233        ? might be 1.0023x slower
Comment 10 Saam Barati 2015-10-06 16:08:05 PDT
Created attachment 262553 [details]
patch
Comment 11 WebKit Commit Bot 2015-10-06 16:10:51 PDT
Attachment 262553 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:171:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:715:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:778:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:870:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1345:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:100:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/ScratchRegisterAllocator.cpp:231:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/ScratchRegisterAllocator.cpp:263:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/ScratchRegisterAllocator.cpp:265:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:103:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:104:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:105:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 13 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 12 Saam Barati 2015-10-06 17:16:05 PDT
Comment on attachment 262553 [details]
patch

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

> Source/JavaScriptCore/jsc.cpp:335
> +        CustomGetter* getter = new (NotNull, allocateCell<CustomGetter>(vm.heap, sizeof(CustomGetter))) CustomGetter(vm, structure);

I'm missing a finishCreation() call here that I've added locally.
Comment 13 Filip Pizlo 2015-10-07 11:46:21 PDT
Comment on attachment 262553 [details]
patch

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

> Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1387
> +    m_stubRoutine = createJITStubRoutine(code, vm, codeBlock->ownerExecutable(), doesCalls, nullptr, 
> +        state.isExceptionHandlingCallSite() ? codeBlock : nullptr, state.isExceptionHandlingCallSite() ? state.callSiteIndexForExceptionHandling() : state.originalCallSiteIndex());

It's a bit weird that this may return a stub routine whose destructor is only correct for the DFG (since it asks for DFGCommonData), and yet there is nothing in this call that obviously protects against a baseline CodeBlock getting one of those stub routines.  It appears that this relies on the fact that m_isExceptionHandlingCallSite will happen to not get set, because there won't be any registers to restore.  That feels a bit shady.  It seems like either you should have sooner assertions that this isn't happening, or you should structure this code in such a way that a Baseline CodeBlock never gets one of the DFG-only stub routines, and then assert that for baseline CodeBlocks, you also don't have registers to restore.
Comment 14 Saam Barati 2015-10-07 16:54:10 PDT
Created attachment 262657 [details]
patch

Reflected Fil's comments both by adding assertions, structuring some code better, and by giving a few things better names.
Comment 15 Saam Barati 2015-10-07 17:06:48 PDT
Created attachment 262659 [details]
patch

Fix an assertion failure that was invalid.
Comment 16 Saam Barati 2015-10-07 18:31:54 PDT
Created attachment 262664 [details]
patch
Comment 17 WebKit Commit Bot 2015-10-07 18:34:36 PDT
Attachment 262664 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:712:  Declaration has space between type name and * in numberOfRegsForCall * sizeof  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:775:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:867:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1342:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:61:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:99:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/ScratchRegisterAllocator.cpp:231:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/ScratchRegisterAllocator.cpp:263:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/ScratchRegisterAllocator.cpp:265:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:103:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:104:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:105:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 12 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 18 Saam Barati 2015-10-08 12:32:36 PDT
Comment on attachment 262664 [details]
patch

Fil reviewed this in person. In his words: "LGTM"
Comment 19 Saam Barati 2015-10-08 12:38:33 PDT
landed in:
http://trac.webkit.org/changeset/190735
Comment 20 Csaba Osztrogonác 2015-10-08 13:53:42 PDT
(In reply to comment #19)
> landed in:
> http://trac.webkit.org/changeset/190735

It broke the CLOOP build.
Comment 21 Saam Barati 2015-10-08 14:22:06 PDT
(In reply to comment #20)
> (In reply to comment #19)
> > landed in:
> > http://trac.webkit.org/changeset/190735
> 
> It broke the CLOOP build.

Fixed in:
http://trac.webkit.org/changeset/190741
Comment 22 Brent Fulgham 2015-10-12 11:17:06 PDT
This change seems to have introduced four Windows test regressions:

fast/events/tabindex-focus-blur-all.html
imported/w3c/web-platform-tests/dom/ranges/Range-insertNode.html
imported/w3c/web-platform-tests/dom/ranges/Range-surroundContents.html	
js/dom/dfg-custom-getter.html

Can you please take a look?
Comment 23 Joseph Pecoraro 2015-10-12 16:35:49 PDT
I'm seeing occasional crashes recording timelines with Web Inspector:
<https://webkit.org/b/150062> CRASH under ~GCAwareJITStubRoutineWithExceptionHandler recording timelines with Web Inspector
Comment 24 Csaba Osztrogonác 2015-11-17 02:37:55 PST
Comment on attachment 262664 [details]
patch

Cleared review? from attachment 262664 [details] so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).