Bug 149936 - FTL should generate code to call slow paths lazily
Summary: FTL should generate code to call slow paths lazily
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: WebKit Nightly Build
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords:
Depends on:
Blocks: 149432
  Show dependency treegraph
 
Reported: 2015-10-08 14:56 PDT by Filip Pizlo
Modified: 2015-10-12 12:36 PDT (History)
14 users (show)

See Also:


Attachments
what I'm thinking so far (21.70 KB, patch)
2015-10-08 14:59 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (31.04 KB, patch)
2015-10-08 18:31 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more things (43.52 KB, patch)
2015-10-08 21:20 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it's doing things (57.65 KB, patch)
2015-10-09 12:26 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
even more powerful but probably totally wrong (66.72 KB, patch)
2015-10-09 13:53 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
passing more tests (67.99 KB, patch)
2015-10-10 14:31 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
and now, with documentation (72.49 KB, patch)
2015-10-10 15:02 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
almost done (98.19 KB, patch)
2015-10-10 17:54 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (98.19 KB, patch)
2015-10-10 18:23 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (100.24 KB, patch)
2015-10-10 20:05 PDT, Filip Pizlo
saam: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Filip Pizlo 2015-10-08 14:56:25 PDT
Patch forthcomihg.
Comment 1 Filip Pizlo 2015-10-08 14:59:17 PDT
Created attachment 262717 [details]
what I'm thinking so far
Comment 2 Filip Pizlo 2015-10-08 18:31:25 PDT
Created attachment 262735 [details]
more
Comment 3 Filip Pizlo 2015-10-08 21:20:11 PDT
Created attachment 262741 [details]
more things
Comment 4 Filip Pizlo 2015-10-09 12:26:45 PDT
Created attachment 262786 [details]
it's doing things
Comment 5 Filip Pizlo 2015-10-09 13:53:40 PDT
Created attachment 262792 [details]
even more powerful but probably totally wrong

I've rewritten the store barrier slow path to do this thing.
Comment 6 Filip Pizlo 2015-10-10 14:31:21 PDT
Created attachment 262832 [details]
passing more tests
Comment 7 Filip Pizlo 2015-10-10 15:02:01 PDT
Created attachment 262833 [details]
and now, with documentation
Comment 8 Filip Pizlo 2015-10-10 16:57:35 PDT
This looks pretty good.

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

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190843)
"LazySlowPath" at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r190843)

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

                                                        TipOfTree                LazySlowPath                                   
SunSpider:
   3d-cube                                            4.5599+-0.0771            4.5555+-0.0626        
   3d-morph                                           5.2700+-0.0706     ?      5.2854+-0.0451        ?
   3d-raytrace                                        5.7394+-1.1955            5.2326+-0.1359          might be 1.0968x faster
   access-binary-trees                                2.1200+-0.0480     ?      2.2402+-0.1966        ? might be 1.0567x slower
   access-fannkuch                                    5.5733+-0.1912     ?      5.5751+-0.0696        ?
   access-nbody                                       2.4866+-0.0503            2.4482+-0.0164          might be 1.0157x faster
   access-nsieve                                      3.0231+-0.0142     ?      3.1079+-0.1243        ? might be 1.0280x slower
   bitops-3bit-bits-in-byte                           1.1541+-0.0260     ?      1.1630+-0.0224        ?
   bitops-bits-in-byte                                3.1907+-0.0369     ?      3.2213+-0.0322        ?
   bitops-bitwise-and                                 1.9948+-0.0241     ?      2.0137+-0.0343        ?
   bitops-nsieve-bits                                 2.9931+-0.0522     ?      3.0136+-0.0376        ?
   controlflow-recursive                              2.5876+-0.2948            2.3744+-0.0731          might be 1.0898x faster
   crypto-aes                                         3.9821+-0.1910            3.9443+-0.1203        
   crypto-md5                                         2.4848+-0.0685            2.4731+-0.0515        
   crypto-sha1                                        2.4888+-0.1605            2.4411+-0.1793          might be 1.0196x faster
   date-format-tofte                                  6.5467+-0.1576     ?      6.6171+-0.1328        ? might be 1.0108x slower
   date-format-xparb                                  4.6180+-0.0928            4.6145+-0.0882        
   math-cordic                                        2.8903+-0.1356            2.8130+-0.1001          might be 1.0275x faster
   math-partial-sums                                  4.7257+-0.0253     ?      4.7305+-0.0473        ?
   math-spectral-norm                                 1.9030+-0.0165     ?      2.0984+-0.3821        ? might be 1.1027x slower
   regexp-dna                                         6.4436+-0.2049            6.1443+-0.1255          might be 1.0487x faster
   string-base64                                      4.4787+-0.1289            4.3643+-0.1267          might be 1.0262x faster
   string-fasta                                       5.9572+-0.2529     ?      6.1298+-0.4133        ? might be 1.0290x slower
   string-tagcloud                                    7.7469+-0.0844     ?      7.7907+-0.2513        ?
   string-unpack-code                                17.6701+-0.8544     ?     17.9801+-0.4594        ? might be 1.0175x slower
   string-validate-input                              4.4187+-0.0757     ?      4.4946+-0.0675        ? might be 1.0172x slower

   <arithmetic>                                       4.5018+-0.0493            4.4949+-0.0266          might be 1.0015x faster

                                                        TipOfTree                LazySlowPath                                   
LongSpider:
   3d-cube                                          798.8012+-3.4424          795.1954+-4.4358        
   3d-morph                                        1502.9157+-8.1223         1497.8638+-6.8818        
   3d-raytrace                                      596.9096+-3.8047     ?    599.0289+-8.0056        ?
   access-binary-trees                              863.1955+-135.0456        798.0858+-10.4401         might be 1.0816x faster
   access-fannkuch                                  279.6933+-5.3808          278.5130+-5.7043        
   access-nbody                                     511.2093+-4.5734     ?    511.3471+-2.6288        ?
   access-nsieve                                    381.3660+-10.9335         380.7803+-12.9754       
   bitops-3bit-bits-in-byte                          33.5653+-0.7966           33.5339+-0.2551        
   bitops-bits-in-byte                               73.7946+-2.2019           72.9859+-0.6020          might be 1.0111x faster
   bitops-nsieve-bits                               411.1452+-3.1554     ^    402.9912+-3.5793        ^ definitely 1.0202x faster
   controlflow-recursive                            441.4479+-10.1540         428.4468+-5.1807          might be 1.0303x faster
   crypto-aes                                       553.9446+-8.8132     ?    554.2924+-4.1930        ?
   crypto-md5                                       458.2006+-26.6925         446.0991+-25.0305         might be 1.0271x faster
   crypto-sha1                                      641.7301+-2.6411          641.5578+-10.3515       
   date-format-tofte                                484.3629+-6.9659     ?    490.5514+-6.6598        ? might be 1.0128x slower
   date-format-xparb                                664.0504+-19.7548    ?    682.3390+-73.9696       ? might be 1.0275x slower
   hash-map                                         149.8577+-1.0211     ?    151.1710+-2.1239        ?
   math-cordic                                      484.7740+-8.8615          481.1595+-4.6527        
   math-partial-sums                                458.2731+-2.3858     !    464.0924+-2.5658        ! definitely 1.0127x slower
   math-spectral-norm                               551.1650+-2.6338          549.2035+-1.4386        
   string-base64                                    374.5077+-2.2769     ?    379.1349+-4.8093        ? might be 1.0124x slower
   string-fasta                                     362.0370+-5.0292          354.2418+-2.8520          might be 1.0220x faster
   string-tagcloud                                  175.5524+-2.4453          174.7506+-1.5624        

   <geometric>                                      387.6505+-2.5034          385.3944+-2.3300          might be 1.0059x faster

                                                        TipOfTree                LazySlowPath                                   
V8Spider:
   crypto                                            48.0238+-2.5508           47.5381+-2.2105          might be 1.0102x faster
   deltablue                                         77.6671+-3.4811     ?     82.0880+-18.3491       ? might be 1.0569x slower
   earley-boyer                                      41.4977+-0.3335           41.1567+-0.8958        
   raytrace                                          31.4837+-1.1066           30.4939+-2.5962          might be 1.0325x faster
   regexp                                            60.0533+-0.3582     ?     60.2124+-0.3817        ?
   richards                                          53.8917+-1.5554     ^     51.2794+-0.8108        ^ definitely 1.0509x faster
   splay                                             36.7811+-1.0020     ?     37.1759+-0.3847        ? might be 1.0107x slower

   <geometric>                                       47.8945+-0.5149           47.5461+-1.0503          might be 1.0073x faster

                                                        TipOfTree                LazySlowPath                                   
Octane:
   encrypt                                           0.16614+-0.00312          0.16392+-0.00184         might be 1.0135x faster
   decrypt                                           2.97586+-0.01445    ^     2.86703+-0.02287       ^ definitely 1.0380x faster
   deltablue                                x2       0.13682+-0.00127          0.13511+-0.00131         might be 1.0127x faster
   earley                                            0.28626+-0.00342    ^     0.28153+-0.00085       ^ definitely 1.0168x faster
   boyer                                             4.36352+-0.09330    ?     4.36626+-0.07979       ?
   navier-stokes                            x2       4.85984+-0.03420    ?     4.88438+-0.08615       ?
   raytrace                                 x2       0.85684+-0.00706    ?     0.85987+-0.01824       ?
   richards                                 x2       0.08865+-0.00061          0.08762+-0.00164         might be 1.0117x faster
   splay                                    x2       0.35061+-0.00248          0.34806+-0.00213       
   regexp                                   x2      24.62851+-0.61705         24.39984+-0.28256       
   pdfjs                                    x2      36.60733+-0.30227    ?    37.29369+-0.97461       ? might be 1.0187x slower
   mandreel                                 x2      42.79910+-0.90648         42.46997+-0.52105       
   gbemu                                    x2      31.12277+-0.41684    ?    32.24052+-3.35507       ? might be 1.0359x slower
   closure                                           0.57600+-0.00329    ?     0.58228+-0.01087       ? might be 1.0109x slower
   jquery                                            7.29801+-0.09752          7.26817+-0.03481       
   box2d                                    x2       9.09918+-0.07431          9.08195+-0.07466       
   zlib                                     x2     381.73403+-2.55516        379.98758+-12.38154      
   typescript                               x2     663.00387+-6.11934        658.09197+-3.65857       

   <geometric>                                       5.32650+-0.01557          5.31397+-0.03622         might be 1.0024x faster

                                                        TipOfTree                LazySlowPath                                   
Kraken:
   ai-astar                                          129.038+-2.272            125.891+-1.766           might be 1.0250x faster
   audio-beat-detection                               48.399+-1.264             48.362+-0.999         
   audio-dft                                          96.603+-1.640             96.312+-2.166         
   audio-fft                                          34.730+-0.083      ?      34.818+-0.148         ?
   audio-oscillator                                   55.616+-0.950      ?      56.266+-1.079         ? might be 1.0117x slower
   imaging-darkroom                                   60.559+-1.449             60.457+-0.770         
   imaging-desaturate                                 48.814+-1.277             48.805+-1.774         
   imaging-gaussian-blur                              86.091+-1.431             85.360+-0.694         
   json-parse-financial                               37.234+-0.423      ?      38.371+-0.759         ? might be 1.0305x slower
   json-stringify-tinderbox                           24.899+-7.129             22.317+-1.338           might be 1.1157x faster
   stanford-crypto-aes                                39.410+-0.420      ?      39.836+-0.304         ? might be 1.0108x slower
   stanford-crypto-ccm                                35.917+-1.514             34.538+-0.463           might be 1.0399x faster
   stanford-crypto-pbkdf2                             96.329+-2.257             95.549+-1.238         
   stanford-crypto-sha256-iterative                   36.092+-0.374             35.982+-0.468         

   <arithmetic>                                       59.266+-0.495             58.776+-0.238           might be 1.0083x faster

                                                        TipOfTree                LazySlowPath                                   
JSRegress:
   abc-forward-loop-equal                            29.3670+-0.5741     ?     29.3919+-0.5990        ?
   abc-postfix-backward-loop                         29.6050+-1.0697     ?     29.8193+-2.1810        ?
   abc-simple-backward-loop                          29.1825+-0.8567           28.9661+-0.2753        
   abc-simple-forward-loop                           28.7472+-0.3244     ?     29.2132+-0.4565        ? might be 1.0162x slower
   abc-skippy-loop                                   20.7800+-0.2370     ?     20.8259+-0.3335        ?
   abs-boolean                                        2.4646+-0.0506            2.4623+-0.0403        
   adapt-to-double-divide                            16.0182+-0.0809     ?     16.0631+-0.1649        ?
   aliased-arguments-getbyval                         1.2399+-0.0996            1.2150+-0.0751          might be 1.0205x faster
   allocate-big-object                                2.5188+-0.0887     ?      2.5832+-0.0614        ? might be 1.0256x slower
   arguments-named-and-reflective                    10.3802+-0.3735           10.2483+-0.1989          might be 1.0129x faster
   arguments-out-of-bounds                            9.3019+-0.3738     ?      9.8142+-1.3865        ? might be 1.0551x slower
   arguments-strict-mode                              9.3354+-0.2395     ?      9.5107+-0.3201        ? might be 1.0188x slower
   arguments                                          8.4136+-0.1791            8.3568+-0.1225        
   arity-mismatch-inlining                            0.8662+-0.0283            0.8625+-0.0260        
   array-access-polymorphic-structure                 7.0489+-0.1127     ?      7.1294+-0.2658        ? might be 1.0114x slower
   array-nonarray-polymorhpic-access                 23.8043+-1.7085           23.1710+-1.0015          might be 1.0273x faster
   array-prototype-every                             75.3183+-0.9236           74.7475+-0.8515        
   array-prototype-forEach                           79.7410+-12.1698          74.7841+-1.6170          might be 1.0663x faster
   array-prototype-map                               81.3262+-1.3079           80.3442+-0.6912          might be 1.0122x faster
   array-prototype-reduce                            70.9712+-0.7570     ?     71.1421+-0.6082        ?
   array-prototype-reduceRight                       71.3678+-0.8386           70.7635+-0.8550        
   array-prototype-some                              75.9908+-2.1327           74.2661+-0.5914          might be 1.0232x faster
   array-splice-contiguous                           20.6342+-0.2658     ?     20.7008+-0.4625        ?
   array-with-double-add                              3.4131+-0.0215     ?      3.4743+-0.1210        ? might be 1.0179x slower
   array-with-double-increment                        3.0489+-0.0328     ?      3.0496+-0.0172        ?
   array-with-double-mul-add                          4.2573+-0.1057            4.1632+-0.0278          might be 1.0226x faster
   array-with-double-sum                              3.1955+-0.0600            3.1904+-0.0331        
   array-with-int32-add-sub                           5.6291+-0.0370     ?      5.6935+-0.1229        ? might be 1.0114x slower
   array-with-int32-or-double-sum                     3.2351+-0.0503     ?      3.3057+-0.1019        ? might be 1.0218x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.6834+-0.2689     ?     25.8426+-0.9872        ?
   ArrayBuffer-DataView-alloc-long-lived             11.5906+-0.1148     ?     11.6357+-0.1895        ?
   ArrayBuffer-Int32Array-byteOffset                  3.4913+-0.0521     ?      3.5344+-0.0974        ? might be 1.0123x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     26.1807+-0.3659           25.6745+-0.1703          might be 1.0197x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.3326+-0.1986           19.3112+-0.3302        
   ArrayBuffer-Int8Array-alloc-long-lived            11.0093+-0.0959           10.8326+-0.0977          might be 1.0163x faster
   ArrayBuffer-Int8Array-alloc                        9.3114+-0.1343     ?      9.3619+-0.1644        ?
   arrowfunction-call                                10.7462+-0.1039     ?     11.0066+-0.4434        ? might be 1.0242x slower
   asmjs_bool_bug                                     7.4315+-0.0387     ?      7.4363+-0.0377        ?
   assign-custom-setter-polymorphic                   2.4586+-0.0231     ^      2.4098+-0.0180        ^ definitely 1.0202x faster
   assign-custom-setter                               3.3440+-0.1107     ?      3.4344+-0.2462        ? might be 1.0270x slower
   basic-set                                          7.4404+-0.2046            7.3163+-0.1845          might be 1.0170x faster
   big-int-mul                                        3.5709+-0.1967            3.4463+-0.0210          might be 1.0362x faster
   boolean-test                                       3.0446+-0.0370            3.0341+-0.0502        
   branch-fold                                        3.6897+-0.1543            3.5770+-0.0152          might be 1.0315x faster
   branch-on-string-as-boolean                       16.8993+-0.6694           16.6792+-0.4084          might be 1.0132x faster
   by-val-generic                                     2.4941+-0.0444     ?      2.4972+-0.0546        ?
   call-spread-apply                                 26.4138+-0.8725     ?     26.7948+-0.6387        ? might be 1.0144x slower
   call-spread-call                                  20.7230+-0.9460     ?     20.9724+-1.8077        ? might be 1.0120x slower
   captured-assignments                               0.4479+-0.0298     ?      0.4507+-0.0532        ?
   cast-int-to-double                                 5.1251+-0.1271            5.1192+-0.0714        
   cell-argument                                      5.9630+-0.2656            5.7973+-0.2402          might be 1.0286x faster
   cfg-simplify                                       2.9256+-0.0712            2.9249+-0.0676        
   chain-getter-access                                8.3702+-0.0904            8.3199+-0.1364        
   cmpeq-obj-to-obj-other                            12.2488+-1.3522           12.1508+-1.1670        
   constant-test                                      4.7646+-0.0782     ?      4.8276+-0.0738        ? might be 1.0132x slower
   create-lots-of-functions                           9.7007+-0.7030            9.6286+-0.6474        
   cse-new-array-buffer                               2.3788+-0.0700     ?      2.4535+-0.1602        ? might be 1.0314x slower
   cse-new-array                                      2.3887+-0.0494     ?      2.4084+-0.0478        ?
   custom-setter-getter-as-put-get-by-id              0.5628+-0.0808            0.5218+-0.0423          might be 1.0786x faster
   DataView-custom-properties                        30.7096+-0.4890           30.4730+-0.2186        
   delay-tear-off-arguments-strictmode               11.7510+-0.0932     ?     11.9025+-0.4817        ? might be 1.0129x slower
   deltablue-varargs                                163.9812+-3.2302          162.5600+-5.8814        
   destructuring-arguments                          160.0967+-1.8746     ?    161.0539+-1.8152        ?
   destructuring-parameters-overridden-by-function   
                                                      0.4518+-0.0128     ?      0.4534+-0.0124        ?
   destructuring-swap                                 4.8060+-0.1164            4.7576+-0.0588          might be 1.0102x faster
   direct-arguments-getbyval                          1.2362+-0.0560     ?      1.2402+-0.0372        ?
   div-boolean-double                                 5.2439+-0.1148     ?      5.2968+-0.0849        ? might be 1.0101x slower
   div-boolean                                        8.1296+-0.0347     ?      8.1494+-0.1589        ?
   double-get-by-val-out-of-bounds                    4.3836+-0.0802            4.3356+-0.0628          might be 1.0111x faster
   double-pollution-getbyval                          8.6259+-0.0253            8.6191+-0.0229        
   double-pollution-putbyoffset                       3.6270+-0.1120            3.6150+-0.0386        
   double-real-use                                   23.3433+-0.1511     ?     24.1882+-1.6044        ? might be 1.0362x slower
   double-to-int32-typed-array-no-inline              2.2192+-0.1019            2.1472+-0.0513          might be 1.0335x faster
   double-to-int32-typed-array                        2.0547+-0.0659            2.0494+-0.0403        
   double-to-uint32-typed-array-no-inline             2.3489+-0.1286            2.2843+-0.0727          might be 1.0283x faster
   double-to-uint32-typed-array                       2.1037+-0.0430            2.0980+-0.0310        
   elidable-new-object-dag                           33.4324+-0.5871     ?     33.8960+-0.5547        ? might be 1.0139x slower
   elidable-new-object-roflcopter                    34.2512+-4.2867           32.7433+-1.0972          might be 1.0460x faster
   elidable-new-object-then-call                     32.0888+-1.2802           31.9394+-1.0022        
   elidable-new-object-tree                          36.9382+-0.9992           36.5475+-0.2659          might be 1.0107x faster
   empty-string-plus-int                              4.7880+-0.1269            4.7707+-0.0562        
   emscripten-cube2hash                              26.0525+-1.4632     ?     26.3471+-1.5037        ? might be 1.0113x slower
   exit-length-on-plain-object                       14.7318+-0.1039     ?     14.9639+-0.4612        ? might be 1.0158x slower
   external-arguments-getbyval                        1.2526+-0.0766     ?      1.3114+-0.0826        ? might be 1.0469x slower
   external-arguments-putbyval                        2.1706+-0.1352     ?      2.2178+-0.0867        ? might be 1.0218x slower
   fixed-typed-array-storage-var-index                1.2279+-0.0092     ?      1.2471+-0.0403        ? might be 1.0157x slower
   fixed-typed-array-storage                          0.9509+-0.0391            0.9308+-0.0293          might be 1.0216x faster
   Float32Array-matrix-mult                           3.9956+-0.0546            3.9757+-0.0259        
   Float32Array-to-Float64Array-set                  49.5357+-2.0413           48.9205+-0.7007          might be 1.0126x faster
   Float64Array-alloc-long-lived                     59.0958+-0.5459     ?     59.1653+-1.3932        ?
   Float64Array-to-Int16Array-set                    61.0013+-0.6496     ^     59.5512+-0.4463        ^ definitely 1.0244x faster
   fold-double-to-int                                11.8719+-0.1180     ?     11.8783+-0.0956        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.0314+-0.9212           10.6917+-0.8768          might be 1.0318x faster
   fold-get-by-id-to-multi-get-by-offset              9.6885+-0.4845     ?     10.5125+-0.9120        ? might be 1.0850x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.6114+-1.4912     ?      8.9487+-1.5546        ? might be 1.0392x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.9432+-0.6927     ?      9.1591+-0.8500        ? might be 1.0241x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.7901+-1.2703     ?      9.4038+-0.3656        ? might be 1.0698x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     10.0044+-0.9269            9.5695+-0.2726          might be 1.0454x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.2658+-0.4312     ?      9.5878+-1.1038        ? might be 1.0347x slower
   fold-put-by-id-to-multi-put-by-offset             12.1638+-0.9794           11.9233+-1.2340          might be 1.0202x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.9641+-0.7812           10.4998+-0.6671          might be 1.0442x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.3741+-1.7746           11.1201+-1.3174          might be 1.0228x faster
   fold-put-structure                                 7.9530+-1.0751     ?      8.2544+-0.1892        ? might be 1.0379x slower
   for-of-iterate-array-entries                      10.6078+-0.0317           10.5708+-0.0577        
   for-of-iterate-array-keys                          3.4485+-0.0585     ?      3.4945+-0.1010        ? might be 1.0133x slower
   for-of-iterate-array-values                        3.5161+-0.2036            3.3816+-0.1152          might be 1.0398x faster
   fround                                            17.7928+-1.5483           17.0738+-0.2502          might be 1.0421x faster
   ftl-library-inlining-dataview                     58.1843+-0.4143     ?     58.6662+-1.1359        ?
   ftl-library-inlining                              97.9745+-1.5624           97.1259+-0.6130        
   function-call                                     10.5469+-0.0914     ?     10.8947+-0.8088        ? might be 1.0330x slower
   function-dot-apply                                 2.0308+-0.0363     ?      2.0444+-0.0336        ?
   function-test                                      2.7032+-0.0321     ?      2.7580+-0.0491        ? might be 1.0203x slower
   function-with-eval                                87.7772+-1.0292           87.1446+-1.9618        
   gcse-poly-get-less-obvious                        21.1309+-0.3790           21.0281+-0.3158        
   gcse-poly-get                                     22.1318+-1.4697     ?     23.0770+-1.8956        ? might be 1.0427x slower
   gcse                                               3.3726+-0.0298     ?      3.3909+-0.0650        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7072+-0.2078            2.6341+-0.0352          might be 1.0277x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.8430+-0.2587            4.6281+-0.0161          might be 1.0464x faster
   get-by-id-chain-from-try-block                     2.4062+-0.0650     ?      2.4200+-0.0325        ?
   get-by-id-check-structure-elimination              3.9060+-0.0684            3.8998+-0.0730        
   get-by-id-proto-or-self                           15.1927+-0.5787     ?     15.2297+-0.7205        ?
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8807+-0.0189            2.8706+-0.0263        
   get-by-id-self-or-proto                           15.7816+-1.3242           15.0835+-0.6334          might be 1.0463x faster
   get-by-val-out-of-bounds                           4.2115+-0.0583     ?      4.2328+-0.0503        ?
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7249+-0.0360     ?      2.9009+-0.3549        ? might be 1.0646x slower
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.0631+-0.0324     ?      6.0956+-0.2093        ?
   get-by-val-with-string-chain-from-try-block   
                                                      2.4433+-0.0289            2.4305+-0.0316        
   get-by-val-with-string-check-structure-elimination   
                                                      5.1728+-0.0672            5.1185+-0.0419          might be 1.0106x faster
   get-by-val-with-string-proto-or-self              15.4272+-0.6656     ?     15.5053+-0.5925        ?
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.0839+-0.0338            3.0449+-0.0154          might be 1.0128x faster
   get-by-val-with-string-self-or-proto              15.7072+-1.3561           15.5603+-0.5658        
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      2.9580+-0.0648            2.9020+-0.0182          might be 1.0193x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.2490+-0.0423           12.2154+-0.0337        
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.4783+-0.1652            2.4513+-0.0470          might be 1.0110x faster
   get-by-val-with-symbol-check-structure-elimination   
                                                     10.9527+-0.0159     ?     11.0070+-0.1109        ?
   get-by-val-with-symbol-proto-or-self              15.4757+-0.6439     ?     15.6916+-0.9106        ? might be 1.0140x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.7681+-0.2017            3.7251+-0.0983          might be 1.0115x faster
   get-by-val-with-symbol-self-or-proto              15.5771+-0.6389     ?     15.8154+-0.7590        ? might be 1.0153x slower
   get_callee_monomorphic                             2.5417+-0.4015            2.3551+-0.0558          might be 1.0792x faster
   get_callee_polymorphic                             3.3781+-0.0600     ?      3.4392+-0.0779        ? might be 1.0181x slower
   getter-no-activation                               4.7693+-0.1439            4.7371+-0.1320        
   getter-prototype                                   7.8220+-0.0576            7.8062+-0.1385        
   getter-richards-try-catch                        970.3440+-9.9184     ?    983.6841+-12.5441       ? might be 1.0137x slower
   getter-richards                                  114.8048+-3.8737          113.5520+-5.2384          might be 1.0110x faster
   getter                                             5.4112+-0.5748     ?      5.9649+-0.6318        ? might be 1.1023x slower
   global-object-access-with-mutating-structure   
                                                      5.6425+-0.0592            5.5385+-0.0746          might be 1.0188x faster
   global-var-const-infer-fire-from-opt               0.8841+-0.0809            0.7991+-0.0866          might be 1.1063x faster
   global-var-const-infer                             0.7113+-0.1035            0.6344+-0.0141          might be 1.1212x faster
   hard-overflow-check-equal                         27.3360+-0.1364     ?     27.5158+-0.4324        ?
   hard-overflow-check                               27.2447+-0.6603           27.0408+-0.3915        
   HashMap-put-get-iterate-keys                      25.0658+-1.4582     ?     26.4224+-1.7463        ? might be 1.0541x slower
   HashMap-put-get-iterate                           26.8241+-1.6266           26.4235+-0.7542          might be 1.0152x faster
   HashMap-string-put-get-iterate                    23.6803+-1.3015           22.9619+-0.7039          might be 1.0313x faster
   hoist-make-rope                                    8.6912+-1.3618            8.5734+-0.7849          might be 1.0137x faster
   hoist-poly-check-structure-effectful-loop   
                                                      3.6753+-0.0555            3.6338+-0.0563          might be 1.0114x faster
   hoist-poly-check-structure                         3.1169+-0.0813            3.0831+-0.0640          might be 1.0110x faster
   imul-double-only                                   7.7633+-0.3062            7.5973+-0.3402          might be 1.0219x faster
   imul-int-only                                      9.0631+-0.3428            8.3069+-0.8189          might be 1.0910x faster
   imul-mixed                                         7.0444+-0.2713            6.9615+-0.2947          might be 1.0119x faster
   in-four-cases                                     16.8323+-0.5395           16.8177+-0.1803        
   in-one-case-false                                  9.5669+-0.5757            9.2122+-0.0542          might be 1.0385x faster
   in-one-case-true                                   9.3559+-0.3109     ?      9.9058+-0.9195        ? might be 1.0588x slower
   in-two-cases                                       9.6513+-0.3107     ?      9.9525+-0.4761        ? might be 1.0312x slower
   indexed-properties-in-objects                      2.8101+-0.0432            2.7944+-0.0356        
   infer-closure-const-then-mov-no-inline             3.5930+-0.0416            3.5678+-0.0212        
   infer-closure-const-then-mov                      17.5088+-0.2338     ?     17.7745+-0.4306        ? might be 1.0152x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.0011+-0.4060           10.9068+-0.0823        
   infer-closure-const-then-put-to-scope             22.2613+-0.3749     ?     22.2956+-0.0581        ?
   infer-closure-const-then-reenter-no-inline   
                                                     47.0961+-0.2424     ?     48.1132+-1.4880        ? might be 1.0216x slower
   infer-closure-const-then-reenter                  22.6319+-0.7032     ?     22.6542+-0.2240        ?
   infer-constant-global-property                     3.3957+-0.0207     ?      3.4019+-0.0268        ?
   infer-constant-property                            2.7268+-0.1862            2.6201+-0.0314          might be 1.0407x faster
   infer-one-time-closure-ten-vars                    7.6737+-0.1296     ?      7.7776+-0.0800        ? might be 1.0135x slower
   infer-one-time-closure-two-vars                    7.4716+-0.0936            7.3761+-0.1693          might be 1.0129x faster
   infer-one-time-closure                             7.2709+-0.1248            7.2101+-0.1843        
   infer-one-time-deep-closure                       10.6083+-0.2278     ?     11.0022+-0.8576        ? might be 1.0371x slower
   inline-arguments-access                            3.5781+-0.0440     ?      3.7284+-0.2123        ? might be 1.0420x slower
   inline-arguments-aliased-access                    3.5744+-0.0433            3.5729+-0.0815        
   inline-arguments-local-escape                      3.8764+-0.4724            3.5991+-0.0445          might be 1.0770x faster
   inline-get-scoped-var                              4.4655+-0.0452     ?      4.4987+-0.0777        ?
   inlined-put-by-id-transition                       9.2123+-0.4702            8.9753+-0.1940          might be 1.0264x faster
   inlined-put-by-val-with-string-transition   
                                                     42.5698+-3.9338           40.6547+-1.7099          might be 1.0471x faster
   inlined-put-by-val-with-symbol-transition   
                                                     40.9533+-2.4453           39.9971+-0.1956          might be 1.0239x faster
   int-or-other-abs-then-get-by-val                   4.5300+-0.0739     ?      4.5684+-0.0256        ?
   int-or-other-abs-zero-then-get-by-val             14.9861+-0.0446     ?     15.0731+-0.1291        ?
   int-or-other-add-then-get-by-val                   4.5470+-0.2638     ?      4.5692+-0.3563        ?
   int-or-other-add                                   4.9542+-0.0289     ?      4.9581+-0.0550        ?
   int-or-other-div-then-get-by-val                   3.7686+-0.0619     ?      3.9353+-0.4616        ? might be 1.0442x slower
   int-or-other-max-then-get-by-val                   3.9225+-0.0733     ?      3.9644+-0.1845        ? might be 1.0107x slower
   int-or-other-min-then-get-by-val                   3.9409+-0.4178            3.7809+-0.0425          might be 1.0423x faster
   int-or-other-mod-then-get-by-val                   3.5133+-0.0489            3.4632+-0.0413          might be 1.0145x faster
   int-or-other-mul-then-get-by-val                   3.6174+-0.0625     ?      3.6375+-0.0682        ?
   int-or-other-neg-then-get-by-val                   3.9990+-0.0335     ?      4.0193+-0.0747        ?
   int-or-other-neg-zero-then-get-by-val             15.1051+-0.1322     ?     15.1626+-0.2966        ?
   int-or-other-sub-then-get-by-val                   4.3648+-0.0348     ?      4.4406+-0.1069        ? might be 1.0174x slower
   int-or-other-sub                                   3.4951+-0.0593            3.4678+-0.0433        
   int-overflow-local                                 4.0555+-0.0392     ?      4.0742+-0.0864        ?
   Int16Array-alloc-long-lived                       43.6225+-1.2152     ?     44.1325+-0.9786        ? might be 1.0117x slower
   Int16Array-bubble-sort-with-byteLength            19.8344+-0.6968           19.4811+-0.2167          might be 1.0181x faster
   Int16Array-bubble-sort                            16.6038+-0.1833           16.5129+-0.0307        
   Int16Array-load-int-mul                            1.4422+-0.0300            1.4367+-0.0192        
   Int16Array-to-Int32Array-set                      45.5738+-0.6376           45.4064+-0.4155        
   Int32Array-alloc-large                            11.3999+-0.2273           11.3153+-0.3311        
   Int32Array-alloc-long-lived                       48.4660+-1.1699     ?     48.4732+-0.7744        ?
   Int32Array-alloc                                   3.0319+-0.0782            3.0024+-0.1048        
   Int32Array-Int8Array-view-alloc                    5.9991+-0.1804            5.9826+-0.1700        
   int52-spill                                        4.6050+-0.0670     ?      4.6251+-0.0839        ?
   Int8Array-alloc-long-lived                        39.2949+-0.9155     ?     39.4332+-1.3031        ?
   Int8Array-load-with-byteLength                     3.3848+-0.0797     ?      3.5974+-0.6406        ? might be 1.0628x slower
   Int8Array-load                                     3.4648+-0.2082            3.4030+-0.0966          might be 1.0182x faster
   integer-divide                                    10.7557+-1.2157           10.3531+-0.1264          might be 1.0389x faster
   integer-modulo                                     1.5881+-0.0140     ?      1.6021+-0.0286        ?
   is-boolean-fold-tricky                             3.8161+-0.0813            3.7635+-0.0499          might be 1.0140x faster
   is-boolean-fold                                    2.6422+-0.0278     ?      2.7084+-0.1165        ? might be 1.0250x slower
   is-function-fold-tricky-internal-function   
                                                      9.4532+-0.0679            9.2937+-0.1321          might be 1.0172x faster
   is-function-fold-tricky                            4.0306+-0.0621            3.9876+-0.0738          might be 1.0108x faster
   is-function-fold                                   2.7257+-0.0895            2.6787+-0.0561          might be 1.0176x faster
   is-number-fold-tricky                              4.0051+-0.1016            3.9528+-0.0518          might be 1.0132x faster
   is-number-fold                                     2.6702+-0.0466     ?      2.6901+-0.0863        ?
   is-object-or-null-fold-functions                   2.7424+-0.1177            2.6950+-0.0660          might be 1.0176x faster
   is-object-or-null-fold-less-tricky                 4.0413+-0.0806            4.0293+-0.1192        
   is-object-or-null-fold-tricky                      4.7805+-0.0513            4.7314+-0.0546          might be 1.0104x faster
   is-object-or-null-fold                             2.7175+-0.1070            2.6707+-0.0236          might be 1.0175x faster
   is-object-or-null-trickier-function                4.0261+-0.0608     ?      4.1040+-0.2096        ? might be 1.0194x slower
   is-object-or-null-trickier-internal-function   
                                                      9.7173+-0.1015     ?     10.2145+-1.3602        ? might be 1.0512x slower
   is-object-or-null-tricky-function                  4.0131+-0.0462            3.9943+-0.0229        
   is-object-or-null-tricky-internal-function   
                                                      7.3750+-0.0373     ^      7.1836+-0.0365        ^ definitely 1.0266x faster
   is-string-fold-tricky                              3.9844+-0.0459            3.9273+-0.0255          might be 1.0146x faster
   is-string-fold                                     2.6819+-0.0377            2.6574+-0.0459        
   is-undefined-fold-tricky                           3.3611+-0.0677            3.3330+-0.0497        
   is-undefined-fold                                  2.6429+-0.0223     ?      2.7238+-0.2269        ? might be 1.0306x slower
   JSONP-negative-0                                   0.2722+-0.0153     ?      0.2818+-0.0323        ? might be 1.0352x slower
   large-int-captured                                 4.1772+-0.2302            4.0790+-0.0452          might be 1.0241x faster
   large-int-neg                                     13.8124+-0.3379     ?     14.4538+-1.7786        ? might be 1.0464x slower
   large-int                                         12.8279+-0.2276     ?     13.0207+-0.3727        ? might be 1.0150x slower
   load-varargs-elimination                          20.0648+-0.4255     ?     20.4291+-0.8273        ? might be 1.0182x slower
   logical-not-weird-types                            3.0173+-0.0547            3.0161+-0.0266        
   logical-not                                        4.2819+-0.0361     ?      4.3296+-0.1052        ? might be 1.0111x slower
   lots-of-fields                                     8.9823+-0.1357            8.9640+-0.1204        
   make-indexed-storage                               2.8665+-0.1685     ?      2.8703+-0.1501        ?
   make-rope-cse                                      3.6203+-0.1416            3.6035+-0.0349        
   marsaglia-larger-ints                             31.8461+-1.1994           31.3162+-0.2266          might be 1.0169x faster
   marsaglia-osr-entry                               20.8161+-0.1552     ?     20.8609+-0.4290        ?
   math-with-out-of-bounds-array-values              20.9289+-0.1425     ?     21.5000+-1.2057        ? might be 1.0273x slower
   max-boolean                                        2.7077+-0.0451            2.7016+-0.0376        
   method-on-number                                  15.3310+-0.1014           15.2623+-0.0858        
   min-boolean                                        2.6440+-0.0374            2.6334+-0.0399        
   minus-boolean-double                               3.0637+-0.0271     ?      3.1176+-0.1202        ? might be 1.0176x slower
   minus-boolean                                      2.3354+-0.0386     ?      2.3423+-0.0268        ?
   misc-strict-eq                                    28.5207+-1.0769           28.0711+-1.1651          might be 1.0160x faster
   mod-boolean-double                                11.1957+-0.3565           11.0237+-0.0833          might be 1.0156x faster
   mod-boolean                                        8.2718+-0.0847     ?      8.3071+-0.1119        ?
   mul-boolean-double                                 3.6338+-0.0435     ?      3.6920+-0.1960        ? might be 1.0160x slower
   mul-boolean                                        2.8065+-0.0482     ?      2.8093+-0.0198        ?
   neg-boolean                                        3.0913+-0.0313            3.0783+-0.0209        
   negative-zero-divide                               0.3755+-0.0129            0.3576+-0.0106          might be 1.0502x faster
   negative-zero-modulo                               0.3787+-0.0300            0.3563+-0.0088          might be 1.0627x faster
   negative-zero-negate                               0.3459+-0.0334     ?      0.3469+-0.0244        ?
   nested-function-parsing                           45.4895+-0.6117           45.4073+-1.0255        
   new-array-buffer-dead                             86.3708+-0.5707     ?     86.7158+-0.5472        ?
   new-array-buffer-push                              6.2376+-0.2692            6.1499+-0.2123          might be 1.0143x faster
   new-array-dead                                    14.8133+-0.5553     ?     15.2627+-0.3982        ? might be 1.0303x slower
   new-array-push                                     3.4535+-0.0302     ?      3.5293+-0.3030        ? might be 1.0219x slower
   no-inline-constructor                             31.2910+-0.1132     ^     30.3049+-0.1992        ^ definitely 1.0325x faster
   number-test                                        2.9847+-0.0131     ?      3.0214+-0.0402        ? might be 1.0123x slower
   object-closure-call                                4.8717+-0.0517     ?      5.4961+-1.5145        ? might be 1.1282x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.3147+-0.2025            4.1968+-0.1669          might be 1.0281x faster
   object-test                                        2.7040+-0.0160            2.6983+-0.0405        
   obvious-sink-pathology-taken                      97.1811+-1.0740           96.7818+-1.6108        
   obvious-sink-pathology                            29.4484+-0.3327           29.3926+-0.4618        
   obviously-elidable-new-object                     28.3073+-0.5155           28.2855+-0.3462        
   plus-boolean-arith                                 2.4135+-0.0653     ?      2.4637+-0.1210        ? might be 1.0208x slower
   plus-boolean-double                                3.1204+-0.0168     ?      3.1387+-0.0612        ?
   plus-boolean                                       2.6348+-0.1238            2.5593+-0.0448          might be 1.0295x faster
   poly-chain-access-different-prototypes-simple   
                                                      2.5753+-0.0309     ?      2.6100+-0.0387        ? might be 1.0135x slower
   poly-chain-access-different-prototypes             2.5501+-0.0344            2.5496+-0.0374        
   poly-chain-access-simpler                          2.5845+-0.0342     ?      2.5927+-0.0235        ?
   poly-chain-access                                  2.5018+-0.0315     ?      2.5173+-0.0436        ?
   poly-stricteq                                     49.6485+-1.1436     ?     49.6996+-1.0932        ?
   polymorphic-array-call                             1.2955+-0.0837            1.2527+-0.0604          might be 1.0342x faster
   polymorphic-get-by-id                              2.8857+-0.0449     ?      2.9395+-0.0603        ? might be 1.0186x slower
   polymorphic-put-by-id                             27.6441+-0.8913           27.3924+-0.5811        
   polymorphic-put-by-val-with-string                28.2394+-0.3981           28.1709+-0.9008        
   polymorphic-put-by-val-with-symbol                28.0359+-0.2508     ?     28.0816+-0.4713        ?
   polymorphic-structure                             12.2614+-0.1766     ?     12.3373+-0.4535        ?
   polyvariant-monomorphic-get-by-id                  7.0106+-0.9037     ?      7.0347+-1.1021        ?
   proto-getter-access                                8.3163+-0.1358     ?      8.3745+-0.1324        ?
   prototype-access-with-mutating-prototype           5.4070+-0.1842     ?      5.4637+-0.1236        ? might be 1.0105x slower
   put-by-id-replace-and-transition                   7.7956+-0.4007     ?      8.1045+-0.5233        ? might be 1.0396x slower
   put-by-id-slightly-polymorphic                     2.7145+-0.1060            2.6980+-0.0720        
   put-by-id                                          9.8105+-0.3287            9.5541+-0.1634          might be 1.0268x faster
   put-by-val-direct                                  0.3922+-0.0753            0.3475+-0.0167          might be 1.1287x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.5421+-0.4691            5.4023+-0.4025          might be 1.0259x faster
   put-by-val-machine-int                             2.5581+-0.0788            2.5194+-0.0343          might be 1.0154x faster
   put-by-val-with-string-replace-and-transition   
                                                      9.8821+-0.1185     ?      9.9301+-0.0483        ?
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9198+-0.0652     ?      2.9674+-0.0893        ? might be 1.0163x slower
   put-by-val-with-string                            10.0017+-0.1074     ?     10.1884+-0.2010        ? might be 1.0187x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     11.3833+-0.0792     ?     11.5997+-0.2336        ? might be 1.0190x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2117+-0.1340            3.1639+-0.1012          might be 1.0151x faster
   put-by-val-with-symbol                            10.2664+-0.3575           10.2589+-0.5173        
   rare-osr-exit-on-local                            13.2559+-0.0455     ?     13.3703+-0.1098        ?
   raytrace-with-empty-try-catch                      5.0893+-0.0636     ?      5.1293+-0.0939        ?
   raytrace-with-try-catch                            9.6173+-0.1417            9.5097+-0.1547          might be 1.0113x faster
   register-pressure-from-osr                        16.1334+-0.1120     ?     16.1800+-0.3192        ?
   repeat-multi-get-by-offset                        21.3506+-0.1126           21.2980+-0.3269        
   richards-empty-try-catch                          80.4632+-18.9860          71.0152+-0.7751          might be 1.1330x faster
   richards-try-catch                               238.6912+-1.8175     ?    238.9566+-1.4757        ?
   setter-prototype                                   7.8074+-0.3921            7.6654+-0.0827          might be 1.0185x faster
   setter                                             5.7029+-0.6937     ?      5.7385+-0.6430        ?
   simple-activation-demo                            23.9718+-0.9036           23.5856+-0.2222          might be 1.0164x faster
   simple-getter-access                              10.9903+-0.5059           10.6465+-0.1599          might be 1.0323x faster
   simple-poly-call-nested                            8.5628+-0.6070     ?      8.6896+-0.4326        ? might be 1.0148x slower
   simple-poly-call                                   1.2911+-0.0378            1.2844+-0.0310        
   sin-boolean                                       19.5177+-1.6620           17.9852+-1.0659          might be 1.0852x faster
   singleton-scope                                   63.5813+-1.3067     ?     64.6547+-3.8967        ? might be 1.0169x slower
   sink-function                                      9.8293+-0.5220            9.6231+-0.6141          might be 1.0214x faster
   sink-huge-activation                              16.0143+-0.4338     ?     16.1260+-0.4649        ?
   sinkable-new-object-dag                           54.1672+-2.3018           52.1514+-1.6868          might be 1.0387x faster
   sinkable-new-object-taken                         42.4604+-1.5278           40.9923+-2.5689          might be 1.0358x faster
   sinkable-new-object                               29.1228+-0.2675     ?     29.3457+-0.4748        ?
   slow-array-profile-convergence                     2.4745+-0.0254     ?      2.4964+-0.0276        ?
   slow-convergence                                   2.3700+-0.0199     ?      2.3817+-0.0627        ?
   slow-ternaries                                    17.0605+-0.2690     ?     19.9107+-6.3360        ? might be 1.1671x slower
   sorting-benchmark                                 16.3370+-0.0694     ?     16.4663+-0.1586        ?
   sparse-conditional                                 1.1896+-0.0759            1.1769+-0.0221          might be 1.0108x faster
   splice-to-remove                                  12.0234+-0.8161     ?     12.3917+-1.0474        ? might be 1.0306x slower
   string-char-code-at                               12.9946+-0.2289     ?     13.2048+-0.5788        ? might be 1.0162x slower
   string-concat-object                               2.2545+-0.1116            2.1928+-0.0580          might be 1.0281x faster
   string-concat-pair-object                          2.2129+-0.0650            2.1858+-0.0792          might be 1.0124x faster
   string-concat-pair-simple                          9.3263+-0.2014            9.2070+-0.2085          might be 1.0130x faster
   string-concat-simple                               9.5241+-0.3078            9.3738+-0.2112          might be 1.0160x faster
   string-cons-repeat                                 6.2838+-0.0442     ?      6.3940+-0.1926        ? might be 1.0176x slower
   string-cons-tower                                  6.5670+-0.2077            6.4874+-0.0750          might be 1.0123x faster
   string-equality                                   15.6006+-0.1687           15.5030+-0.0922        
   string-get-by-val-big-char                         6.4397+-0.0394     ?      6.4914+-0.0740        ?
   string-get-by-val-out-of-bounds-insane             3.0538+-0.1048     ?      3.0911+-0.1396        ? might be 1.0122x slower
   string-get-by-val-out-of-bounds                    3.9234+-0.0341     ?      3.9397+-0.0562        ?
   string-get-by-val                                  2.8155+-0.0230            2.8100+-0.0335        
   string-hash                                        1.8628+-0.0454            1.8539+-0.0297        
   string-long-ident-equality                        13.2432+-0.3444           13.1273+-0.0450        
   string-out-of-bounds                              10.0443+-0.2305            9.9513+-0.1798        
   string-repeat-arith                               27.1472+-2.1259           26.3323+-0.3561          might be 1.0309x faster
   string-sub                                        54.0976+-0.4130           53.7591+-1.5718        
   string-test                                        2.8844+-0.0830            2.8804+-0.0690        
   string-var-equality                               24.7783+-0.2189           24.6470+-0.1508        
   structure-hoist-over-transitions                   2.4748+-0.0722            2.3798+-0.0431          might be 1.0399x faster
   substring-concat-weird                            36.4586+-1.2340           35.2508+-0.5461          might be 1.0343x faster
   substring-concat                                  40.3966+-0.8921           39.8949+-0.7860          might be 1.0126x faster
   substring                                         44.6601+-0.2564     ?     44.8883+-0.3494        ?
   switch-char-constant                               2.6643+-0.0409     ?      2.6695+-0.0284        ?
   switch-char                                        5.2778+-0.1029     ?      6.2516+-0.9270        ? might be 1.1845x slower
   switch-constant                                    8.4666+-0.5676     ?      8.5496+-0.7148        ?
   switch-string-basic-big-var                       14.4736+-0.1323           14.3723+-0.0423        
   switch-string-basic-big                           14.2643+-0.0722     ?     14.3327+-0.1777        ?
   switch-string-basic-var                           13.5512+-0.0376     ?     13.6162+-0.0990        ?
   switch-string-basic                               12.3769+-0.3381           12.3547+-0.1294        
   switch-string-big-length-tower-var                17.5831+-0.1212           17.5307+-0.1848        
   switch-string-length-tower-var                    12.8657+-0.1818     ?     13.4358+-0.6273        ? might be 1.0443x slower
   switch-string-length-tower                        11.3019+-0.1657           11.2375+-0.0938        
   switch-string-short                               11.4747+-0.3854           11.2465+-0.0733          might be 1.0203x faster
   switch                                            10.8461+-0.3178           10.7578+-0.1127        
   tear-off-arguments-simple                          3.1223+-0.0999            3.0801+-0.0129          might be 1.0137x faster
   tear-off-arguments                                 4.0180+-0.1040     ?      4.0626+-0.0621        ? might be 1.0111x slower
   temporal-structure                                11.5959+-0.0743     ?     11.6627+-0.2156        ?
   to-int32-boolean                                  12.2839+-0.0869     ?     12.3976+-0.2645        ?
   try-catch-get-by-val-cloned-arguments              9.1616+-0.1942            9.0406+-0.1877          might be 1.0134x faster
   try-catch-get-by-val-direct-arguments              2.1864+-0.0494            2.1226+-0.0284          might be 1.0301x faster
   try-catch-get-by-val-scoped-arguments              4.5760+-0.1012     ?      4.6873+-0.2590        ? might be 1.0243x slower
   typed-array-get-set-by-val-profiling              26.3908+-0.4453           26.3081+-0.3598        
   undefined-property-access                        217.9684+-4.1094          215.7817+-2.9033          might be 1.0101x faster
   undefined-test                                     2.9860+-0.0302     ?      3.0081+-0.0537        ?
   unprofiled-licm                                    9.2561+-0.1549            9.2274+-0.0505        
   v8-raytrace-with-empty-try-catch                  23.8810+-0.4021     ?     24.0401+-0.8322        ?
   v8-raytrace-with-try-catch                        61.8796+-1.3865           60.3725+-1.0324          might be 1.0250x faster
   varargs-call                                      12.7985+-0.1414     ?     12.7994+-0.1171        ?
   varargs-construct-inline                          21.6446+-0.3788           21.5068+-0.1504        
   varargs-construct                                 20.3234+-0.5365           20.1718+-0.1023        
   varargs-inline                                     8.7325+-0.1172     ?      8.7648+-0.1113        ?
   varargs-strict-mode                                9.9231+-0.1440            9.8306+-0.0477        
   varargs                                            9.7795+-0.0645     ?      9.8391+-0.0973        ?
   weird-inlining-const-prop                          2.0930+-0.0652     ?      2.1987+-0.0921        ? might be 1.0505x slower

   <geometric>                                        7.9203+-0.0138            7.9066+-0.0168          might be 1.0017x faster

                                                        TipOfTree                LazySlowPath                                   
AsmBench:
   bigfib.cpp                                       461.4143+-10.1411    ^    441.8242+-4.3578        ^ definitely 1.0443x faster
   cray.c                                           392.9474+-2.5624     ?    393.1709+-2.0818        ?
   dry.c                                            427.1070+-7.2073          418.9111+-8.6867          might be 1.0196x faster
   FloatMM.c                                        687.1698+-3.6241     ?    687.9941+-6.3887        ?
   gcc-loops.cpp                                   3445.9452+-16.8151    ?   3461.1735+-14.9808       ?
   n-body.c                                         834.6586+-8.0509          829.1597+-4.1416        
   Quicksort.c                                      409.4754+-6.9808     ?    409.9520+-4.5216        ?
   stepanov_container.cpp                          3512.9198+-29.3336    ?   3524.8396+-36.7002       ?
   Towers.c                                         238.5330+-2.2185          238.4304+-1.6170        

   <geometric>                                      720.7394+-2.4872     ^    716.0400+-1.7129        ^ definitely 1.0066x faster

                                                        TipOfTree                LazySlowPath                                   
CompressionBench:
   huffman                                           61.5305+-1.4293           60.9656+-1.3717        
   arithmetic-simple                                283.1003+-6.6927          276.9004+-3.4888          might be 1.0224x faster
   arithmetic-precise                               245.3054+-1.7173          243.6239+-0.4322        
   arithmetic-complex-precise                       249.2643+-4.3520          247.8599+-3.8654        
   arithmetic-precise-order-0                       283.1423+-1.2491     ?    285.4641+-1.9978        ?
   arithmetic-precise-order-1                       304.2594+-3.5441          303.0113+-2.8497        
   arithmetic-precise-order-2                       347.1212+-3.5373     ?    350.9721+-3.6519        ? might be 1.0111x slower
   arithmetic-simple-order-1                        322.7831+-4.1599     ?    323.8018+-7.1994        ?
   arithmetic-simple-order-2                        377.6834+-4.8874          376.8096+-3.5374        
   lz-string                                        328.7832+-43.1137         309.3584+-2.1833          might be 1.0628x faster

   <geometric>                                      257.2001+-3.1908          255.1010+-0.8888          might be 1.0082x faster

                                                        TipOfTree                LazySlowPath                                   
Geomean of preferred means:
   <scaled-result>                                   49.9466+-0.1001           49.6862+-0.1911          might be 1.0052x faster
Comment 9 Filip Pizlo 2015-10-10 17:54:49 PDT
Created attachment 262841 [details]
almost done
Comment 10 Filip Pizlo 2015-10-10 18:23:36 PDT
Created attachment 262843 [details]
the patch
Comment 11 WebKit Commit Bot 2015-10-10 18:25:57 PDT
Attachment 262843 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.h:67:  The parameter name "callSiteIndex" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:41:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:150:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:151:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7324:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:8471:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/SharedTask.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPathCall.h:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:44:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:45:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:46:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:54:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:74:  Declaration has space between type name and * in numberOfCallingConventionRegisters * wordSize  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:126:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 19 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 12 Filip Pizlo 2015-10-10 20:05:07 PDT
Created attachment 262844 [details]
the patch
Comment 13 WebKit Commit Bot 2015-10-10 20:06:46 PDT
Attachment 262844 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.h:67:  The parameter name "callSiteIndex" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:41:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:150:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:151:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7324:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:8471:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/SharedTask.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPathCall.h:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:44:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:45:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:46:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:54:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:74:  Declaration has space between type name and * in numberOfCallingConventionRegisters * wordSize  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:126:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 19 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 14 Saam Barati 2015-10-12 10:09:55 PDT
Comment on attachment 262844 [details]
the patch

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

LGTM

> Source/JavaScriptCore/ftl/FTLCompile.cpp:598
> +                // FIXME: This should be pushing the lazy slow path index in some vector or whatever.

Don't you do this below?

> Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7247
> +    // This is a mechanism for creating a code generator that fills in a gap in the code using our

This is a nice API

> Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7288
> +    // LValue output = lazySlowPath(

These lambdas shouldn't be capturing any stack variables by reference, right? Maybe it's worth just adding a sentence even though it's relatively obvious.

> Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7341
> +        CallSiteIndex callSiteIndex =

I wonder if the right thing to do here is to have LazySlowPathDescriptor take a CodeOrigin, and then when compiling the lazy slow path
we get the actual call site index for the code origin. This way, if this lazy slow path is duplicated, each version will have its own call site
index. I'm not sure this strictly matters, but its more in the spirit of the fixes I need to make for *ById

> Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:81
> +    m_stackBytesNeeded = (m_stackBytesNeeded + stackAlignmentBytes() - 1) & ~(stackAlignmentBytes() - 1);

Is this just rounding up to stackAlignmentBytes()? If so, I think calling roundingUpToMultiple is clearer.
Comment 15 Filip Pizlo 2015-10-12 10:17:41 PDT
(In reply to comment #14)
> Comment on attachment 262844 [details]
> the patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=262844&action=review
> 
> LGTM
> 
> > Source/JavaScriptCore/ftl/FTLCompile.cpp:598
> > +                // FIXME: This should be pushing the lazy slow path index in some vector or whatever.
> 
> Don't you do this below?

Yup, removed the FIXME.

> 
> > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7247
> > +    // This is a mechanism for creating a code generator that fills in a gap in the code using our
> 
> This is a nice API
> 
> > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7288
> > +    // LValue output = lazySlowPath(
> 
> These lambdas shouldn't be capturing any stack variables by reference,
> right? Maybe it's worth just adding a sentence even though it's relatively
> obvious.

Yeah, I added a comment.

> 
> > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7341
> > +        CallSiteIndex callSiteIndex =
> 
> I wonder if the right thing to do here is to have LazySlowPathDescriptor
> take a CodeOrigin, and then when compiling the lazy slow path
> we get the actual call site index for the code origin. This way, if this
> lazy slow path is duplicated, each version will have its own call site
> index. I'm not sure this strictly matters, but its more in the spirit of the
> fixes I need to make for *ById

Sure.  I think that's the right approach.  But, I'm not going to do it in this patch, since this patch reuses the InlineCacheDescriptor logic that already requires a CallSiteIndex to be produced by FTLLowerDFGToLLVM.cpp.  There is no way for this patch to make LazySlowPathDescriptor take a CodeOrigin and do the "right thing" without either making it completely separate from the InlineCacheDescriptor logic or by fixing the InlineCacheDescriptor in this patch.

> 
> > Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:81
> > +    m_stackBytesNeeded = (m_stackBytesNeeded + stackAlignmentBytes() - 1) & ~(stackAlignmentBytes() - 1);
> 
> Is this just rounding up to stackAlignmentBytes()? If so, I think calling
> roundingUpToMultiple is clearer.

Yeah, that's just a round-up.  This code is not new to this patch.  It was just moved.  So, I'll keep it like this for now.
Comment 16 Filip Pizlo 2015-10-12 10:57:28 PDT
Landed in http://trac.webkit.org/changeset/190860
Comment 18 Filip Pizlo 2015-10-12 11:12:42 PDT
(In reply to comment #17)
> This broke LLINT CLOOP build:
> 
> https://build.webkit.org/builders/
> Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/
> compile-webkit/logs/stdio

Fix landed in: http://trac.webkit.org/changeset/190865
Comment 19 Csaba Osztrogonác 2015-10-12 12:07:01 PDT
(In reply to comment #18)
> (In reply to comment #17)
> > This broke LLINT CLOOP build:
> > 
> > https://build.webkit.org/builders/
> > Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/
> > compile-webkit/logs/stdio
> 
> Fix landed in: http://trac.webkit.org/changeset/190865

The build is still broken.
Comment 20 Filip Pizlo 2015-10-12 12:16:12 PDT
(In reply to comment #19)
> (In reply to comment #18)
> > (In reply to comment #17)
> > > This broke LLINT CLOOP build:
> > > 
> > > https://build.webkit.org/builders/
> > > Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/
> > > compile-webkit/logs/stdio
> > 
> > Fix landed in: http://trac.webkit.org/changeset/190865
> 
> The build is still broken.

Another try: http://trac.webkit.org/changeset/190878
Comment 21 Brent Fulgham 2015-10-12 12:26:36 PDT
This is still broken, even with the most recent checkin. Should we roll it out?
Comment 22 Brent Fulgham 2015-10-12 12:31:16 PDT
Should those be "SharedTask" -> "SharedTaskFunctor"? The "SharedTask" class (at least on my source tree) doesn't accept any template arguments.
Comment 23 Filip Pizlo 2015-10-12 12:36:30 PDT
(In reply to comment #21)
> This is still broken, even with the most recent checkin. Should we roll it
> out?

The Windows bots need a clean build.
Comment 24 Filip Pizlo 2015-10-12 12:36:53 PDT
(In reply to comment #22)
> Should those be "SharedTask" -> "SharedTaskFunctor"? The "SharedTask" class
> (at least on my source tree) doesn't accept any template arguments.

Your checkout must be stale, this patch turns SharedTask into a template.