Bug 140660

Summary: Polymorphic call inlining should be based on polymorphic call inline caching rather than logging
Product: WebKit Reporter: Filip Pizlo <fpizlo>
Component: JavaScriptCoreAssignee: Filip Pizlo <fpizlo>
Status: RESOLVED FIXED    
Severity: Normal CC: ap, barraclough, commit-queue, ddkilzer, ggaren, kling, mark.lam, mhahnenb, mmirman, msaboff, nrotem, oliver, sam, sbarati
Priority: P2 Keywords: InRadar
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Bug Depends on: 140659, 140959, 140980, 141062, 141107    
Bug Blocks: 140685, 140975    
Attachments:
Description Flags
it begins
none
more
none
almost done
none
it builds!
none
it passes most tests
none
rebased
none
more refinements
none
getting there
none
the patch
none
the patch
none
the patch ggaren: review+

Description Filip Pizlo 2015-01-19 20:06:15 PST
...
Comment 1 Filip Pizlo 2015-01-20 11:41:01 PST
Created attachment 245005 [details]
it begins
Comment 2 Filip Pizlo 2015-01-20 12:33:42 PST
Created attachment 245010 [details]
more
Comment 3 Filip Pizlo 2015-01-20 13:01:17 PST
Created attachment 245012 [details]
almost done
Comment 4 Filip Pizlo 2015-01-20 16:02:04 PST
Created attachment 245031 [details]
it builds!
Comment 5 Filip Pizlo 2015-01-21 15:19:52 PST
Created attachment 245094 [details]
it passes most tests
Comment 6 Filip Pizlo 2015-01-26 17:59:27 PST
I made this pass all tests, but in its current form it is not a speed-up.  I need to investigate what is going on.  Part of the problem is that right now I'm testing on a relatively noisy machine; I'll need to switch to a quieter machine for the rest of my experiments.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r179136)
"FixPolyCall" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r179136)

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.

                                                        TipOfTree                FixPolyCall                                    
SunSpider:
   3d-cube                                            4.8558+-0.0721     ?      4.9723+-0.4128        ? might be 1.0240x slower
   3d-morph                                           6.0593+-0.0953            6.0163+-0.0730        
   3d-raytrace                                        6.3211+-0.0614     ?      6.5042+-0.4535        ? might be 1.0290x slower
   access-binary-trees                                2.0788+-0.0598     ^      1.9854+-0.0326        ^ definitely 1.0471x faster
   access-fannkuch                                    5.9025+-0.3382            5.8666+-0.3605        
   access-nbody                                       2.8342+-0.0864     ?      2.8611+-0.1857        ?
   access-nsieve                                      3.5344+-0.0818            3.5312+-0.0662        
   bitops-3bit-bits-in-byte                           1.5518+-0.0302     ?      1.5601+-0.0492        ?
   bitops-bits-in-byte                                3.6075+-0.2641            3.6074+-0.1971        
   bitops-bitwise-and                                 2.0337+-0.0810     ?      2.7629+-1.9379        ? might be 1.3586x slower
   bitops-nsieve-bits                                 3.6860+-0.1130            3.6228+-0.0621          might be 1.0174x faster
   controlflow-recursive                              2.1583+-0.1528            2.0998+-0.1337          might be 1.0279x faster
   crypto-aes                                         4.0738+-0.0963     ?      4.1367+-0.1704        ? might be 1.0154x slower
   crypto-md5                                         2.3341+-0.0371            2.2906+-0.0264          might be 1.0190x faster
   crypto-sha1                                        2.7106+-0.1998            2.6374+-0.2598          might be 1.0278x faster
   date-format-tofte                                  9.6587+-0.5001            9.5047+-0.6546          might be 1.0162x faster
   date-format-xparb                                  5.2814+-0.2546     ?      5.3512+-0.2784        ? might be 1.0132x slower
   math-cordic                                        3.0581+-0.0361            3.0430+-0.0566        
   math-partial-sums                                  5.0774+-0.0708            4.9861+-0.0696          might be 1.0183x faster
   math-spectral-norm                                 1.9101+-0.0442     ?      1.9120+-0.0901        ?
   regexp-dna                                         7.7842+-1.2425     ?      8.1080+-1.3190        ? might be 1.0416x slower
   string-base64                                      4.3015+-0.1596            4.2791+-0.1802        
   string-fasta                                       6.7238+-0.4960     ?      7.0305+-0.8661        ? might be 1.0456x slower
   string-tagcloud                                    9.6505+-0.1322     ?     10.1047+-0.5070        ? might be 1.0471x slower
   string-unpack-code                                20.4137+-0.1169           20.3167+-1.4290        
   string-validate-input                              4.5991+-0.0677            4.5395+-0.0827          might be 1.0131x faster

   <arithmetic> *                                     5.0846+-0.0637     ?      5.1396+-0.1146        ? might be 1.0108x slower
   <geometric>                                        4.2010+-0.0374     ?      4.2315+-0.0910        ? might be 1.0073x slower
   <harmonic>                                         3.5930+-0.0236     ?      3.6010+-0.0863        ? might be 1.0022x slower

                                                        TipOfTree                FixPolyCall                                    
LongSpider:
   3d-cube                                          854.7516+-10.6600    ?    875.7804+-34.7338       ? might be 1.0246x slower
   3d-morph                                        1569.9261+-56.7171    ?   1593.7264+-82.2804       ? might be 1.0152x slower
   3d-raytrace                                      781.3981+-32.3612         741.8986+-8.2863          might be 1.0532x faster
   access-binary-trees                             1005.5844+-17.7382    ?   1006.5353+-12.1762       ?
   access-fannkuch                                  331.7889+-11.1695    ?    337.5868+-13.8001       ? might be 1.0175x slower
   access-nbody                                     615.7902+-3.8148     ?    625.5809+-29.9598       ? might be 1.0159x slower
   access-nsieve                                    934.9967+-8.8635     ?    944.0406+-28.6616       ?
   bitops-3bit-bits-in-byte                          46.8556+-0.8666     ?     49.0632+-1.5896        ? might be 1.0471x slower
   bitops-bits-in-byte                              109.4880+-9.7351     ?    111.2798+-10.1379       ? might be 1.0164x slower
   bitops-nsieve-bits                               721.0316+-32.4553         694.7774+-4.1978          might be 1.0378x faster
   controlflow-recursive                            495.0665+-19.3433         488.2212+-5.6572          might be 1.0140x faster
   crypto-aes                                       704.0070+-11.7194    ?    707.4647+-7.9522        ?
   crypto-md5                                       626.0496+-22.7878         619.1036+-11.5709         might be 1.0112x faster
   crypto-sha1                                      683.0887+-27.7961         674.4854+-25.7800         might be 1.0128x faster
   date-format-tofte                                806.1702+-9.5200     ?    851.0765+-51.9804       ? might be 1.0557x slower
   date-format-xparb                                767.0769+-24.4380    ?    773.2832+-12.9653       ?
   math-cordic                                      630.7135+-30.3916         602.8797+-24.3067         might be 1.0462x faster
   math-partial-sums                                556.0626+-26.0133    ?    556.4766+-22.8071       ?
   math-spectral-norm                               581.1031+-27.3986         574.4264+-10.5647         might be 1.0116x faster
   string-base64                                    369.6418+-11.6243         366.1196+-2.3382        
   string-fasta                                     439.6733+-14.7963    ?    441.8207+-7.7052        ?
   string-tagcloud                                  225.3708+-7.4796          225.0334+-7.6755        

   <arithmetic>                                     629.8016+-5.6205     ?    630.0300+-6.2366        ? might be 1.0004x slower
   <geometric> *                                    517.4642+-5.9397     ?    518.0108+-3.8257        ? might be 1.0011x slower
   <harmonic>                                       336.9593+-5.5629     ?    342.2204+-4.8509        ? might be 1.0156x slower

                                                        TipOfTree                FixPolyCall                                    
V8Spider:
   crypto                                            55.8490+-1.6561           54.9303+-1.5342          might be 1.0167x faster
   deltablue                                        109.4323+-7.9379     ^     83.7924+-6.7757        ^ definitely 1.3060x faster
   earley-boyer                                      47.2363+-3.6520     ?     47.6353+-2.1398        ?
   raytrace                                          43.1516+-0.5055     ^     41.2514+-0.8062        ^ definitely 1.0461x faster
   regexp                                            71.8124+-2.9425     ?     73.7677+-1.9984        ? might be 1.0272x slower
   richards                                         102.7402+-26.5313          79.0120+-3.0887          might be 1.3003x faster
   splay                                             36.7013+-1.7106           36.0933+-3.0978          might be 1.0168x faster

   <arithmetic>                                      66.7033+-4.7709     ^     59.4975+-0.9404        ^ definitely 1.1211x faster
   <geometric> *                                     61.4480+-3.2161     ^     56.7256+-0.9052        ^ definitely 1.0833x faster
   <harmonic>                                        57.0414+-2.3076           54.0350+-0.9939          might be 1.0556x faster

                                                        TipOfTree                FixPolyCall                                    
Octane:
   encrypt                                           0.23607+-0.00746          0.23540+-0.00751       
   decrypt                                           4.11038+-0.18736    ?     4.12621+-0.18494       ?
   deltablue                                x2       0.20546+-0.00494          0.20379+-0.00315       
   earley                                            0.69655+-0.00649    ?     0.71070+-0.01568       ? might be 1.0203x slower
   boyer                                             5.42812+-0.11748          5.37849+-0.03850       
   navier-stokes                            x2       5.37391+-0.20773          5.19521+-0.01944         might be 1.0344x faster
   raytrace                                 x2       1.34170+-0.03551    ?     1.37496+-0.09865       ? might be 1.0248x slower
   richards                                 x2       0.13704+-0.00557    ?     0.15011+-0.01255       ? might be 1.0954x slower
   splay                                    x2       0.39117+-0.00307    ?     0.39671+-0.00740       ? might be 1.0142x slower
   regexp                                   x2      34.67763+-1.37195         33.48366+-0.51511         might be 1.0357x faster
   pdfjs                                    x2      51.43245+-0.51229    ?    51.46683+-0.34558       ?
   mandreel                                 x2      54.33918+-1.02912         54.07859+-0.36252       
   gbemu                                    x2      44.86952+-0.73534    !    47.37845+-1.07666       ! definitely 1.0559x slower
   closure                                           0.57350+-0.00715          0.56479+-0.01064         might be 1.0154x faster
   jquery                                            7.59473+-0.35511          7.20646+-0.06271         might be 1.0539x faster
   box2d                                    x2      15.99452+-0.14954    ?    16.33539+-0.43363       ? might be 1.0213x slower
   zlib                                     x2     477.97645+-2.72988    ?   503.23821+-33.84595      ? might be 1.0529x slower
   typescript                               x2     859.27669+-10.16573       847.97827+-11.97219        might be 1.0133x faster

   <arithmetic>                                    103.68903+-0.64792    ?   104.69275+-2.67564       ? might be 1.0097x slower
   <geometric> *                                     7.30687+-0.03588    ?     7.37068+-0.07083       ? might be 1.0087x slower
   <harmonic>                                        0.75740+-0.01094    ?     0.78177+-0.02638       ? might be 1.0322x slower

                                                        TipOfTree                FixPolyCall                                    
Kraken:
   ai-astar                                          274.138+-5.178      ?     279.253+-12.471        ? might be 1.0187x slower
   audio-beat-detection                              114.156+-2.080            112.965+-4.623           might be 1.0105x faster
   audio-dft                                         163.293+-5.969            156.085+-1.414           might be 1.0462x faster
   audio-fft                                          93.559+-23.371            83.208+-2.484           might be 1.1244x faster
   audio-oscillator                                  239.754+-6.020            237.256+-3.454           might be 1.0105x faster
   imaging-darkroom                                  181.792+-8.301      ?     186.695+-9.071         ? might be 1.0270x slower
   imaging-desaturate                                 62.888+-1.672             62.168+-0.453           might be 1.0116x faster
   imaging-gaussian-blur                             112.747+-2.846      ?     114.454+-4.416         ? might be 1.0151x slower
   json-parse-financial                               48.209+-3.360             47.308+-2.103           might be 1.0190x faster
   json-stringify-tinderbox                           60.807+-2.832             59.560+-3.421           might be 1.0209x faster
   stanford-crypto-aes                                58.515+-1.533      ?      60.197+-2.711         ? might be 1.0288x slower
   stanford-crypto-ccm                                56.344+-6.099      ?      62.606+-3.959         ? might be 1.1111x slower
   stanford-crypto-pbkdf2                            176.011+-4.383            172.458+-3.269           might be 1.0206x faster
   stanford-crypto-sha256-iterative                   56.009+-2.462             55.028+-2.161           might be 1.0178x faster

   <arithmetic> *                                    121.302+-2.765            120.660+-1.258           might be 1.0053x faster
   <geometric>                                       102.278+-2.603            101.844+-1.252           might be 1.0043x faster
   <harmonic>                                         87.582+-2.485             87.546+-1.455           might be 1.0004x faster

                                                        TipOfTree                FixPolyCall                                    
JSRegress:
   abs-boolean                                        2.6049+-0.0677            2.5647+-0.0306          might be 1.0156x faster
   adapt-to-double-divide                            16.9186+-0.3066           16.5565+-0.1070          might be 1.0219x faster
   aliased-arguments-getbyval                         1.1918+-0.1035            1.1116+-0.0355          might be 1.0721x faster
   allocate-big-object                                2.5558+-0.4302            2.4336+-0.1182          might be 1.0502x faster
   arity-mismatch-inlining                            0.8627+-0.0694            0.8506+-0.0687          might be 1.0142x faster
   array-access-polymorphic-structure                 6.6723+-0.7541     ?      6.8214+-1.0141        ? might be 1.0223x slower
   array-nonarray-polymorhpic-access                 39.8150+-12.0110          35.5320+-0.9976          might be 1.1205x faster
   array-prototype-every                             76.2627+-2.3596     !     83.3018+-2.4938        ! definitely 1.0923x slower
   array-prototype-forEach                           74.7880+-2.9860     !     82.9992+-2.6629        ! definitely 1.1098x slower
   array-prototype-map                               93.3985+-2.1734     !    100.6982+-3.8273        ! definitely 1.0782x slower
   array-prototype-some                              76.9130+-3.0117     ?     83.7532+-4.6873        ? might be 1.0889x slower
   array-splice-contiguous                           41.6426+-2.2368           41.0195+-2.1454          might be 1.0152x faster
   array-with-double-add                              4.0129+-0.0710            4.0056+-0.0448        
   array-with-double-increment                        3.2922+-0.1901     ?      3.5830+-0.9336        ? might be 1.0883x slower
   array-with-double-mul-add                          4.9202+-0.0449     ?      4.9234+-0.0678        ?
   array-with-double-sum                              3.2391+-0.0157            3.2382+-0.1135        
   array-with-int32-add-sub                           6.6977+-0.1013            6.6814+-0.2090        
   array-with-int32-or-double-sum                     3.3183+-0.0937            3.2527+-0.0440          might be 1.0202x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     33.6755+-1.8291           32.6456+-1.6186          might be 1.0315x faster
   ArrayBuffer-DataView-alloc-long-lived             13.7045+-1.0870           13.4375+-1.4760          might be 1.0199x faster
   ArrayBuffer-Int32Array-byteOffset                  3.4444+-0.0684     ?      3.5673+-0.2831        ? might be 1.0357x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     33.3881+-1.4565           32.3429+-1.9763          might be 1.0323x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.9961+-1.6458           22.6314+-2.0743          might be 1.0161x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.9967+-1.5317           12.2891+-0.5588          might be 1.1390x faster
   ArrayBuffer-Int8Array-alloc                       12.2901+-1.5505           11.0680+-1.2785          might be 1.1104x faster
   asmjs_bool_bug                                     7.2844+-0.0654     ?      7.4041+-0.2901        ? might be 1.0164x slower
   assign-custom-setter-polymorphic                   3.2333+-0.0379     ^      2.9891+-0.0500        ^ definitely 1.0817x faster
   assign-custom-setter                               4.8489+-0.5299            4.1934+-0.1572          might be 1.1563x faster
   basic-set                                          9.7010+-0.1444     ?     10.0443+-0.4641        ? might be 1.0354x slower
   big-int-mul                                        3.9959+-0.0968            3.9931+-0.0636        
   boolean-test                                       2.9200+-0.0593     ?      2.9530+-0.0454        ? might be 1.0113x slower
   branch-fold                                        3.6387+-0.0489     ?      3.6564+-0.1138        ?
   by-val-generic                                     8.5134+-0.3697     ?      8.5792+-0.0806        ?
   call-spread-apply                                 20.7251+-1.8108           18.9203+-1.1110          might be 1.0954x faster
   call-spread-call                                  15.3475+-0.3227     ?     16.4271+-1.4629        ? might be 1.0703x slower
   captured-assignments                               0.4463+-0.0227            0.4328+-0.0112          might be 1.0312x faster
   cast-int-to-double                                 5.3556+-0.2399            5.3299+-0.3069        
   cell-argument                                      8.2843+-0.1661     ?      8.4526+-0.2442        ? might be 1.0203x slower
   cfg-simplify                                       2.8669+-0.0354     ?      2.9221+-0.0909        ? might be 1.0193x slower
   chain-getter-access                                9.7006+-0.2536            9.6702+-0.3387        
   cmpeq-obj-to-obj-other                            10.5999+-1.0832     ?     10.7236+-1.1801        ? might be 1.0117x slower
   constant-test                                      4.8171+-0.0195            4.8051+-0.0281        
   DataView-custom-properties                        39.6448+-2.4336           39.1651+-0.9497          might be 1.0122x faster
   delay-tear-off-arguments-strictmode                9.2396+-0.8645            8.3322+-0.6098          might be 1.1089x faster
   destructuring-arguments                            5.6628+-0.1177            5.6363+-0.0654        
   destructuring-swap                                 4.9360+-0.0456     ?      4.9422+-0.0409        ?
   direct-arguments-getbyval                          1.1482+-0.0917     ?      1.1575+-0.0566        ?
   div-boolean-double                                 5.2026+-0.1001            5.1766+-0.0866        
   div-boolean                                        7.7222+-0.0770     ?      7.7245+-0.1022        ?
   double-get-by-val-out-of-bounds                    4.2112+-0.0255     !      4.4477+-0.0444        ! definitely 1.0561x slower
   double-pollution-getbyval                          8.7473+-0.0646     ?      8.8260+-0.1981        ?
   double-pollution-putbyoffset                       4.1319+-0.1219     ?      4.1700+-0.1400        ?
   double-to-int32-typed-array-no-inline              2.2651+-0.1717            2.1342+-0.0427          might be 1.0614x faster
   double-to-int32-typed-array                        1.9797+-0.1547     ?      1.9797+-0.2214        ?
   double-to-uint32-typed-array-no-inline             2.5753+-0.6664            2.1806+-0.0403          might be 1.1810x faster
   double-to-uint32-typed-array                       2.0083+-0.0378            2.0072+-0.1096        
   elidable-new-object-dag                           43.5420+-1.4718           41.9149+-2.6828          might be 1.0388x faster
   elidable-new-object-roflcopter                   173.7063+-3.5263          173.6252+-1.9137        
   elidable-new-object-then-call                     40.1200+-3.7072           38.7590+-1.3740          might be 1.0351x faster
   elidable-new-object-tree                          45.3626+-1.1883           44.8440+-1.3154          might be 1.0116x faster
   empty-string-plus-int                              5.4471+-0.2963            5.3599+-0.2293          might be 1.0163x faster
   emscripten-cube2hash                              36.2364+-1.6329     ?     36.5983+-1.8590        ?
   external-arguments-getbyval                        1.3615+-0.1170            1.2933+-0.0318          might be 1.0527x faster
   external-arguments-putbyval                        2.0293+-0.0934     ?      2.0793+-0.1029        ? might be 1.0246x slower
   fixed-typed-array-storage-var-index                1.2185+-0.0287     ?      1.2506+-0.0690        ? might be 1.0263x slower
   fixed-typed-array-storage                          0.9441+-0.1331            0.8691+-0.0133          might be 1.0863x faster
   Float32Array-matrix-mult                           4.5580+-0.5131            4.4146+-0.2761          might be 1.0325x faster
   Float32Array-to-Float64Array-set                  56.0017+-3.3237           53.4372+-1.0345          might be 1.0480x faster
   Float64Array-alloc-long-lived                     66.2747+-1.7408     ?     66.5922+-1.9978        ?
   Float64Array-to-Int16Array-set                    67.0790+-0.9843     ?     67.1090+-1.5051        ?
   fold-double-to-int                                14.6191+-0.5399           14.4402+-1.4539          might be 1.0124x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     17.6242+-0.3059     ^     14.9293+-0.5075        ^ definitely 1.1805x faster
   fold-get-by-id-to-multi-get-by-offset             17.7137+-0.7415     ^     14.7365+-0.6530        ^ definitely 1.2020x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     12.1895+-0.4597     ?     12.6613+-1.2188        ? might be 1.0387x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     13.5758+-1.4191           11.7904+-1.3551          might be 1.1514x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     12.4886+-0.5201           12.2031+-1.9613          might be 1.0234x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     12.7851+-1.2997           10.8551+-0.7792          might be 1.1778x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     16.1974+-1.0587     ^     13.0218+-0.8406        ^ definitely 1.2439x faster
   fold-put-by-id-to-multi-put-by-offset             18.1560+-0.6844     ^     14.6327+-0.1678        ^ definitely 1.2408x faster
   fold-put-structure                                11.8010+-0.2994           11.5566+-1.3592          might be 1.0211x faster
   for-of-iterate-array-entries                       5.8132+-0.3832            5.5607+-0.1503          might be 1.0454x faster
   for-of-iterate-array-keys                          2.7125+-0.0586     ?      2.7813+-0.1777        ? might be 1.0254x slower
   for-of-iterate-array-values                        2.4795+-0.1348     ?      2.4809+-0.0968        ?
   fround                                            19.3899+-0.6530           19.3670+-0.6622        
   ftl-library-inlining-dataview                     71.6540+-2.7304           69.4315+-2.0358          might be 1.0320x faster
   ftl-library-inlining                              84.4565+-16.2125    ?     96.8886+-20.4333       ? might be 1.1472x slower
   function-dot-apply                                 1.5692+-0.0589            1.5165+-0.0494          might be 1.0347x faster
   function-test                                      3.3249+-0.0604     ?      3.3411+-0.1718        ?
   function-with-eval                               115.9856+-5.7224          112.6545+-4.8517          might be 1.0296x faster
   gcse-poly-get-less-obvious                        19.5771+-1.7588     ?     19.9500+-1.6427        ? might be 1.0190x slower
   gcse-poly-get                                     22.2209+-1.3414     ?     22.9461+-2.3563        ? might be 1.0326x slower
   gcse                                               4.2405+-0.1065            4.2034+-0.0355        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7132+-0.0585            2.6760+-0.0734          might be 1.0139x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.3677+-0.1292            6.1943+-0.1923          might be 1.0280x faster
   get-by-id-chain-from-try-block                     9.2748+-0.8685            8.9945+-0.1592          might be 1.0312x faster
   get-by-id-check-structure-elimination              5.1655+-0.0239     ?      5.2098+-0.1419        ?
   get-by-id-proto-or-self                           18.5611+-1.0215           17.8597+-2.0172          might be 1.0393x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0062+-0.2669     ?      3.3507+-1.1622        ? might be 1.1146x slower
   get-by-id-self-or-proto                           17.7912+-1.2727           17.2415+-0.8768          might be 1.0319x faster
   get-by-val-out-of-bounds                           4.1284+-0.1272     ?      4.1603+-0.2651        ?
   get_callee_monomorphic                             4.1012+-0.6618            3.6544+-0.0675          might be 1.1223x faster
   get_callee_polymorphic                             4.0809+-0.0271     ?      4.1392+-0.1232        ? might be 1.0143x slower
   getter-no-activation                               4.4222+-0.4633     ?      4.4950+-0.2663        ? might be 1.0165x slower
   getter-richards                                  136.6946+-9.3738     ^    122.2817+-2.2576        ^ definitely 1.1179x faster
   getter                                             5.0229+-0.0482     ?      5.0430+-0.1408        ?
   global-var-const-infer-fire-from-opt               0.8567+-0.1081     ?      0.8822+-0.1047        ? might be 1.0298x slower
   global-var-const-infer                             0.9192+-0.0650            0.8480+-0.0625          might be 1.0840x faster
   HashMap-put-get-iterate-keys                      26.4805+-0.7582     ?     29.0417+-5.5071        ? might be 1.0967x slower
   HashMap-put-get-iterate                           26.3799+-0.4008     ?     26.7995+-0.4108        ? might be 1.0159x slower
   HashMap-string-put-get-iterate                    27.2003+-0.6643     ?     27.2336+-1.5220        ?
   hoist-make-rope                                   11.6169+-0.8343           11.5478+-1.0306        
   hoist-poly-check-structure-effectful-loop   
                                                      4.9361+-0.1230     ?      5.6876+-1.6168        ? might be 1.1522x slower
   hoist-poly-check-structure                         3.6498+-0.0718            3.6466+-0.0445        
   imul-double-only                                   7.7137+-0.5618     ?      8.3614+-0.3174        ? might be 1.0840x slower
   imul-int-only                                      9.7094+-0.0701     ?      9.7491+-0.1159        ?
   imul-mixed                                         7.6849+-0.1759            7.6145+-0.0631        
   in-four-cases                                     18.8474+-0.1938     ?     19.1661+-0.5741        ? might be 1.0169x slower
   in-one-case-false                                  9.9693+-0.4435            9.7517+-0.0324          might be 1.0223x faster
   in-one-case-true                                   9.8102+-0.0472     ?     10.1263+-0.5623        ? might be 1.0322x slower
   in-two-cases                                      10.0985+-0.0672     ?     10.1007+-0.1022        ?
   indexed-properties-in-objects                      2.8373+-0.0392     ?      2.8435+-0.0357        ?
   infer-closure-const-then-mov-no-inline             3.7801+-0.1581     ?      3.8242+-0.1401        ? might be 1.0117x slower
   infer-closure-const-then-mov                      18.9110+-1.5171           18.0459+-0.2999          might be 1.0479x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.1744+-0.1630           11.9859+-0.1549          might be 1.0157x faster
   infer-closure-const-then-put-to-scope             20.4838+-1.7558           19.5442+-0.9822          might be 1.0481x faster
   infer-closure-const-then-reenter-no-inline   
                                                     50.9416+-2.1743     ?     51.9684+-3.5951        ? might be 1.0202x slower
   infer-closure-const-then-reenter                  19.1571+-1.4938           18.9400+-0.9545          might be 1.0115x faster
   infer-constant-global-property                     3.5693+-0.1194            3.4856+-0.0299          might be 1.0240x faster
   infer-constant-property                            2.6448+-0.0569     ?      2.6635+-0.0957        ?
   infer-one-time-closure-ten-vars                   12.8719+-1.8219           12.0554+-0.4227          might be 1.0677x faster
   infer-one-time-closure-two-vars                   12.1540+-1.4230           11.8880+-0.9912          might be 1.0224x faster
   infer-one-time-closure                            12.7484+-1.6343           12.3360+-1.0155          might be 1.0334x faster
   infer-one-time-deep-closure                       20.4493+-0.4741     ?     21.5289+-1.6734        ? might be 1.0528x slower
   inline-arguments-access                            1.9062+-0.0743            1.8636+-0.0462          might be 1.0229x faster
   inline-arguments-aliased-access                    1.7187+-0.1321            1.6523+-0.0407          might be 1.0402x faster
   inline-arguments-local-escape                     12.9386+-1.2555           12.8108+-1.2361        
   inline-get-scoped-var                              4.0952+-0.0252     ?      4.1209+-0.0370        ?
   inlined-put-by-id-transition                      10.8613+-0.6601           10.2812+-0.4419          might be 1.0564x faster
   int-or-other-abs-then-get-by-val                   4.8861+-0.0454            4.8814+-0.0548        
   int-or-other-abs-zero-then-get-by-val             17.4480+-1.3536     ?     17.9751+-2.0289        ? might be 1.0302x slower
   int-or-other-add-then-get-by-val                   4.2500+-0.0359     ?      5.2919+-2.2765        ? might be 1.2451x slower
   int-or-other-add                                   5.1728+-0.0486     ?      5.2887+-0.2863        ? might be 1.0224x slower
   int-or-other-div-then-get-by-val                   4.2227+-0.0328     ?      4.3116+-0.1462        ? might be 1.0211x slower
   int-or-other-max-then-get-by-val                   4.3625+-0.0449     ?      4.5452+-0.2622        ? might be 1.0419x slower
   int-or-other-min-then-get-by-val                   4.4128+-0.0294     ?      4.4677+-0.1552        ? might be 1.0124x slower
   int-or-other-mod-then-get-by-val                   3.9094+-0.0229            3.8742+-0.0217        
   int-or-other-mul-then-get-by-val                   3.9744+-0.2843            3.8763+-0.1171          might be 1.0253x faster
   int-or-other-neg-then-get-by-val                   4.7166+-0.0627            4.6831+-0.0180        
   int-or-other-neg-zero-then-get-by-val             17.1496+-0.4988     ?     17.5130+-1.2416        ? might be 1.0212x slower
   int-or-other-sub-then-get-by-val                   5.2218+-2.5297            4.3506+-0.2910          might be 1.2003x faster
   int-or-other-sub                                   3.4583+-0.0390     ?      3.4927+-0.0803        ?
   int-overflow-local                                 4.2684+-0.0361     ?      4.4541+-0.4804        ? might be 1.0435x slower
   Int16Array-alloc-long-lived                       48.8264+-2.6135     ?     48.9718+-1.7517        ?
   Int16Array-bubble-sort-with-byteLength            20.8721+-0.9930     ?     21.0953+-1.4596        ? might be 1.0107x slower
   Int16Array-bubble-sort                            21.9623+-0.5351     ?     22.1095+-0.8242        ?
   Int16Array-load-int-mul                            1.5120+-0.0723     ?      1.5522+-0.1090        ? might be 1.0266x slower
   Int16Array-to-Int32Array-set                      51.5733+-1.8543     ?     58.0252+-13.7398       ? might be 1.1251x slower
   Int32Array-alloc-large                            26.2203+-0.6322     ?     26.4393+-1.0306        ?
   Int32Array-alloc-long-lived                       54.5660+-0.6658           53.9912+-1.5750          might be 1.0106x faster
   Int32Array-alloc                                   3.1350+-0.3421     ?      3.3247+-0.5444        ? might be 1.0605x slower
   Int32Array-Int8Array-view-alloc                    7.1949+-0.8625            7.0646+-0.7978          might be 1.0184x faster
   int52-spill                                        7.4267+-0.9127            6.3667+-0.1968          might be 1.1665x faster
   Int8Array-alloc-long-lived                        46.3942+-1.5728           45.9552+-0.8630        
   Int8Array-load-with-byteLength                     3.3898+-0.1268            3.3509+-0.0557          might be 1.0116x faster
   Int8Array-load                                     3.3340+-0.0491            3.3210+-0.0492        
   integer-divide                                    11.6283+-0.1189     ?     12.2227+-1.0833        ? might be 1.0511x slower
   integer-modulo                                     2.0492+-0.0626     ?      2.0613+-0.0904        ?
   large-int-captured                                 6.4569+-0.1172     ?      6.7437+-0.9490        ? might be 1.0444x slower
   large-int-neg                                     17.2897+-1.2777           16.6168+-0.8426          might be 1.0405x faster
   large-int                                         15.2902+-0.1054     ?     15.8517+-0.9536        ? might be 1.0367x slower
   logical-not                                        4.6142+-0.1806     ?      4.7382+-0.2123        ? might be 1.0269x slower
   lots-of-fields                                    10.0887+-0.3176     ?     10.4023+-1.0792        ? might be 1.0311x slower
   make-indexed-storage                               2.9175+-0.1193     ?      2.9600+-0.1032        ? might be 1.0146x slower
   make-rope-cse                                      4.4353+-0.3996            4.1667+-0.1809          might be 1.0645x faster
   marsaglia-larger-ints                             38.3720+-0.5328     ?     38.5032+-0.6003        ?
   marsaglia-osr-entry                               24.5290+-2.6522           24.0444+-2.3899          might be 1.0202x faster
   max-boolean                                        2.4333+-0.0300     ?      2.4634+-0.0684        ? might be 1.0124x slower
   method-on-number                                  16.9022+-0.9349     ?     17.4259+-0.8304        ? might be 1.0310x slower
   min-boolean                                        2.4477+-0.0473     ?      2.4863+-0.1481        ? might be 1.0158x slower
   minus-boolean-double                               3.1052+-0.0582            3.0781+-0.0468        
   minus-boolean                                      2.4006+-0.1715            2.2879+-0.0620          might be 1.0493x faster
   misc-strict-eq                                    37.3159+-0.8508     ?     38.4224+-1.3396        ? might be 1.0297x slower
   mod-boolean-double                                10.9810+-0.5061     ?     11.0183+-0.3008        ?
   mod-boolean                                        7.7192+-0.0146     ?      7.7893+-0.0953        ?
   mul-boolean-double                                 3.7732+-0.1671     ?      3.8206+-0.2789        ? might be 1.0126x slower
   mul-boolean                                        2.8488+-0.0651            2.7854+-0.0328          might be 1.0228x faster
   neg-boolean                                        3.1118+-0.0453     ?      3.1460+-0.1007        ? might be 1.0110x slower
   negative-zero-divide                               0.3488+-0.0281            0.3261+-0.0153          might be 1.0694x faster
   negative-zero-modulo                               0.3314+-0.0087     ?      0.3413+-0.0202        ? might be 1.0300x slower
   negative-zero-negate                               0.3183+-0.0190            0.3016+-0.0175          might be 1.0556x faster
   nested-function-parsing                           24.0308+-1.3673     ?     24.8972+-1.9170        ? might be 1.0361x slower
   new-array-buffer-dead                              2.7240+-0.0582     ?      2.7277+-0.0646        ?
   new-array-buffer-push                              7.3053+-0.7457     ?      7.6665+-0.8677        ? might be 1.0494x slower
   new-array-dead                                    11.8805+-0.2619     ?     12.7213+-1.1686        ? might be 1.0708x slower
   new-array-push                                     5.1517+-0.2445            5.0889+-0.1182          might be 1.0123x faster
   number-test                                        2.8902+-0.0314            2.8855+-0.0381        
   object-closure-call                                5.4802+-0.0298     ?      5.5620+-0.1204        ? might be 1.0149x slower
   object-test                                        2.9828+-0.0607     ?      3.0443+-0.0715        ? might be 1.0206x slower
   obvious-sink-pathology-taken                     148.3119+-8.6280          144.5269+-2.0287          might be 1.0262x faster
   obvious-sink-pathology                           141.7208+-1.3928          140.9859+-3.3288        
   obviously-elidable-new-object                     34.5907+-1.1907     ?     35.5520+-1.5682        ? might be 1.0278x slower
   plus-boolean-arith                                 2.4513+-0.0288            2.4360+-0.0244        
   plus-boolean-double                                3.1918+-0.1348            3.1234+-0.0592          might be 1.0219x faster
   plus-boolean                                       2.3343+-0.0824            2.3328+-0.0520        
   poly-chain-access-different-prototypes-simple   
                                                      3.2361+-0.0455     ?      3.2546+-0.1000        ?
   poly-chain-access-different-prototypes             2.5638+-0.2838     ?      2.6535+-0.2987        ? might be 1.0350x slower
   poly-chain-access-simpler                          3.3602+-0.3052            3.2679+-0.0707          might be 1.0282x faster
   poly-chain-access                                  2.6897+-0.2584            2.6052+-0.2897          might be 1.0324x faster
   poly-stricteq                                     59.8027+-3.4198     ?     60.7222+-4.0278        ? might be 1.0154x slower
   polymorphic-array-call                             1.6940+-0.0939            1.6844+-0.0418        
   polymorphic-get-by-id                              3.0804+-0.0777     ?      3.1163+-0.1403        ? might be 1.0117x slower
   polymorphic-put-by-id                             30.7161+-3.6300           29.3763+-2.4264          might be 1.0456x faster
   polymorphic-structure                             15.0584+-0.4832           15.0066+-0.4231        
   polyvariant-monomorphic-get-by-id                  8.6912+-0.2956            8.4338+-0.0492          might be 1.0305x faster
   proto-getter-access                                9.6438+-0.0977     ?      9.6527+-0.1413        ?
   put-by-id-replace-and-transition                   8.8872+-0.6357            8.6499+-0.2435          might be 1.0274x faster
   put-by-id-slightly-polymorphic                     2.8848+-0.0709            2.8387+-0.0410          might be 1.0163x faster
   put-by-id                                         13.2398+-0.3698           13.1303+-0.3772        
   put-by-val-direct                                  0.5466+-0.0245     ?      0.5735+-0.1556        ? might be 1.0493x slower
   put-by-val-large-index-blank-indexing-type   
                                                      6.0163+-0.7143            5.8521+-0.7485          might be 1.0281x faster
   put-by-val-machine-int                             2.4974+-0.0346            2.4784+-0.0433        
   rare-osr-exit-on-local                            15.0212+-0.2546     ?     15.0340+-0.5378        ?
   register-pressure-from-osr                        22.3055+-0.8415           22.1149+-0.8654        
   setter                                             5.3951+-0.0491            5.3849+-0.0894        
   simple-activation-demo                            25.7234+-0.9541     ?     26.9574+-1.8811        ? might be 1.0480x slower
   simple-getter-access                              13.2102+-2.1809           12.7567+-0.9280          might be 1.0355x faster
   simple-poly-call-nested                           15.4377+-0.7211     ^      7.7977+-0.1761        ^ definitely 1.9798x faster
   simple-poly-call                                   1.2827+-0.0179            1.2245+-0.0861          might be 1.0475x faster
   sin-boolean                                       21.2543+-2.3209     ?     21.4231+-1.7895        ?
   sinkable-new-object-dag                           70.0524+-2.1562           69.8431+-1.7089        
   sinkable-new-object-taken                         49.9705+-2.3624     ?     50.6995+-2.4632        ? might be 1.0146x slower
   sinkable-new-object                               39.1710+-0.9024     ?     39.7083+-2.0279        ? might be 1.0137x slower
   slow-array-profile-convergence                     2.6998+-0.0400            2.6559+-0.0572          might be 1.0165x faster
   slow-convergence                                   3.1071+-0.0490     ?      3.1219+-0.0471        ?
   sparse-conditional                                 1.1255+-0.0587            1.0966+-0.0313          might be 1.0264x faster
   splice-to-remove                                  18.3586+-1.9581           17.5758+-1.4759          might be 1.0445x faster
   string-char-code-at                               17.3532+-1.2162           16.6620+-0.3681          might be 1.0415x faster
   string-concat-object                               2.0837+-0.0556     ?      2.1720+-0.1932        ? might be 1.0423x slower
   string-concat-pair-object                          2.1786+-0.1958            2.0755+-0.1352          might be 1.0497x faster
   string-concat-pair-simple                         10.9543+-0.3651           10.7103+-0.3179          might be 1.0228x faster
   string-concat-simple                              11.0822+-0.2624     ?     11.1250+-0.4205        ?
   string-cons-repeat                                 7.7448+-0.6293            7.5123+-0.5663          might be 1.0310x faster
   string-cons-tower                                  7.8068+-0.3923            7.4906+-0.5982          might be 1.0422x faster
   string-equality                                   18.3364+-1.0866           17.7820+-0.8115          might be 1.0312x faster
   string-get-by-val-big-char                         7.1576+-0.2517            7.0474+-0.2871          might be 1.0156x faster
   string-get-by-val-out-of-bounds-insane             3.7957+-0.0735            3.7852+-0.1266        
   string-get-by-val-out-of-bounds                    5.8351+-1.4429     ?      5.8614+-1.4421        ?
   string-get-by-val                                  3.5206+-0.0285     ^      3.2395+-0.0302        ^ definitely 1.0868x faster
   string-hash                                        2.0826+-0.0794            2.0683+-0.2102        
   string-long-ident-equality                        16.6316+-2.4595           15.7700+-1.9074          might be 1.0546x faster
   string-repeat-arith                               33.8362+-3.2219           32.9402+-1.9035          might be 1.0272x faster
   string-sub                                        66.7640+-3.9407     ?     68.1994+-2.0446        ? might be 1.0215x slower
   string-test                                        2.8356+-0.0733            2.8059+-0.0464          might be 1.0106x faster
   string-var-equality                               30.7239+-0.5379           30.5293+-0.2405        
   structure-hoist-over-transitions                   2.4953+-0.1239     ?      2.5002+-0.1325        ?
   substring-concat-weird                            39.3398+-1.9475     ?     40.2207+-1.8132        ? might be 1.0224x slower
   substring-concat                                  42.8111+-3.1394           40.5611+-1.6172          might be 1.0555x faster
   substring                                         45.8837+-3.0508     ?     45.9677+-2.2315        ?
   switch-char-constant                               2.6961+-0.0618            2.6659+-0.0966          might be 1.0113x faster
   switch-char                                        6.5530+-0.3849     ?      6.5992+-0.5026        ?
   switch-constant                                    9.9723+-0.7087            9.9130+-0.4805        
   switch-string-basic-big-var                       15.6877+-1.7898           14.6914+-0.3270          might be 1.0678x faster
   switch-string-basic-big                           15.5298+-1.6479           15.0079+-1.4100          might be 1.0348x faster
   switch-string-basic-var                           16.9318+-1.7600           15.2917+-1.6183          might be 1.1073x faster
   switch-string-basic                               14.6938+-1.9253     ?     15.0055+-1.8105        ? might be 1.0212x slower
   switch-string-big-length-tower-var                21.3973+-2.8714           20.0861+-0.6103          might be 1.0653x faster
   switch-string-length-tower-var                    14.7623+-0.4733     ?     16.3682+-1.6108        ? might be 1.1088x slower
   switch-string-length-tower                        13.1365+-1.3770     ?     13.8285+-1.8967        ? might be 1.0527x slower
   switch-string-short                               12.4461+-0.2447     ?     12.9090+-1.4015        ? might be 1.0372x slower
   switch                                            12.4585+-1.4431     ?     13.1562+-1.0668        ? might be 1.0560x slower
   tear-off-arguments-simple                          2.4137+-0.1236            2.3795+-0.1139          might be 1.0144x faster
   tear-off-arguments                                 3.7255+-0.1610            3.6297+-0.1590          might be 1.0264x faster
   temporal-structure                                12.5828+-0.6364           12.0783+-0.1749          might be 1.0418x faster
   to-int32-boolean                                  13.6977+-0.2859     ?     14.3160+-1.9184        ? might be 1.0451x slower
   undefined-property-access                        389.8842+-9.6853          388.6372+-14.8223       
   undefined-test                                     2.9333+-0.0526            2.8903+-0.0457          might be 1.0149x faster
   unprofiled-licm                                   22.8466+-1.3804           22.5964+-0.5660          might be 1.0111x faster
   weird-inlining-const-prop                          2.0200+-0.0920            1.9810+-0.1197          might be 1.0197x faster

   <arithmetic>                                      17.8317+-0.0779           17.7639+-0.0823          might be 1.0038x faster
   <geometric> *                                      8.2205+-0.0320     ^      8.1295+-0.0213        ^ definitely 1.0112x faster
   <harmonic>                                         4.1167+-0.0266            4.0559+-0.0346          might be 1.0150x faster

                                                        TipOfTree                FixPolyCall                                    
AsmBench:
   bigfib.cpp                                       500.6852+-5.0778          495.8510+-3.2542        
   cray.c                                           480.9032+-11.9170         468.1924+-2.1892          might be 1.0271x faster
   dry.c                                            492.6243+-12.5120    ?    515.2286+-15.5100       ? might be 1.0459x slower
   FloatMM.c                                        776.3303+-45.9828         734.4489+-5.0235          might be 1.0570x faster
   gcc-loops.cpp                                   4316.7029+-221.0614       4264.4427+-168.2738        might be 1.0123x faster
   n-body.c                                        1020.4313+-45.0425         998.0839+-6.5351          might be 1.0224x faster
   Quicksort.c                                      450.1820+-9.0885     ?    464.3783+-21.6487       ? might be 1.0315x slower
   stepanov_container.cpp                          3745.5236+-355.0059       3604.2242+-23.2952         might be 1.0392x faster
   Towers.c                                         263.8844+-2.4640     ?    266.0249+-10.0289       ?

   <arithmetic>                                    1338.5853+-42.9698        1312.3194+-19.3890         might be 1.0200x faster
   <geometric> *                                    826.2439+-15.2109         819.1920+-7.0102          might be 1.0086x faster
   <harmonic>                                       604.3393+-7.5653     ?    604.4607+-6.3356        ? might be 1.0002x slower

                                                        TipOfTree                FixPolyCall                                    
CompressionBench:
   huffman                                          516.0573+-22.4937         505.2410+-4.1904          might be 1.0214x faster
   arithmetic-simple                                449.3128+-11.0331         448.0127+-15.6114       
   arithmetic-precise                               327.9791+-8.6538          327.7670+-6.4686        
   arithmetic-complex-precise                       327.0308+-8.6137     ?    328.9188+-11.2624       ?
   arithmetic-precise-order-0                       466.0970+-4.5364     ?    480.9045+-11.1181       ? might be 1.0318x slower
   arithmetic-precise-order-1                       369.3030+-11.5207    ?    371.6289+-14.0879       ?
   arithmetic-precise-order-2                       415.0593+-26.3274    ?    461.6051+-143.6895      ? might be 1.1121x slower
   arithmetic-simple-order-1                        487.5367+-15.7168         478.5391+-5.3785          might be 1.0188x faster
   arithmetic-simple-order-2                        539.6783+-20.9272         529.0524+-9.5843          might be 1.0201x faster
   lz-string                                        348.9992+-14.6386    ?    350.7224+-4.3016        ?

   <arithmetic>                                     424.7053+-1.3866     ?    428.2392+-16.9090       ? might be 1.0083x slower
   <geometric> *                                    417.8795+-1.4564     ?    420.7981+-14.2070       ? might be 1.0070x slower
   <harmonic>                                       411.1027+-2.1486     ?    413.5972+-12.1648       ? might be 1.0061x slower

                                                        TipOfTree                FixPolyCall                                    
All benchmarks:
   <arithmetic>                                     102.3111+-1.2242          101.6980+-0.5453          might be 1.0060x faster
   <geometric>                                       13.6317+-0.0343     ^     13.5203+-0.0547        ^ definitely 1.0082x faster
   <harmonic>                                         3.4505+-0.0266     ?      3.4568+-0.0459        ? might be 1.0018x slower

                                                        TipOfTree                FixPolyCall                                    
Geomean of preferred means:
   <scaled-result>                                   67.0029+-0.4776           66.3624+-0.5757          might be 1.0097x faster
Comment 7 Filip Pizlo 2015-01-26 19:48:50 PST
Here is a less noisy run.  It clearly shows that we're doing something wrong in Richards.  Richards has some polymorphic calls.  I'll have to investigate what we're doing there.  Also, SunSpider isn't showing a speed-up, which is strange - the main purpose of this was to improve SunSpider.  But other compiler start-up time benchmarks are showing improvements, which is promising.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on oldmac (MacPro4,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r179136)
"FixPolyCall" at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/jsc (r179136)

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.

                                                        TipOfTree                FixPolyCall                                    
SunSpider:
   3d-cube                                            7.5815+-0.1623     ?      7.7526+-0.1068        ? might be 1.0226x slower
   3d-morph                                           9.8092+-0.1107     ^      9.6370+-0.0549        ^ definitely 1.0179x faster
   3d-raytrace                                        9.9220+-0.1417     ?     10.0169+-0.1330        ?
   access-binary-trees                                3.0205+-0.0465     ?      3.0626+-0.0883        ? might be 1.0139x slower
   access-fannkuch                                   10.0365+-0.0928     ?     10.0987+-0.1317        ?
   access-nbody                                       4.9386+-0.0250            4.9195+-0.0887        
   access-nsieve                                      5.5632+-0.0997     ?      5.6114+-0.0852        ?
   bitops-3bit-bits-in-byte                           2.0557+-0.0533            2.0222+-0.0374          might be 1.0165x faster
   bitops-bits-in-byte                                6.9560+-0.0665            6.9181+-0.1392        
   bitops-bitwise-and                                 3.3794+-0.0096            3.3430+-0.1112          might be 1.0109x faster
   bitops-nsieve-bits                                 5.7636+-0.0884     ?      5.8485+-0.0274        ? might be 1.0147x slower
   controlflow-recursive                              3.2107+-0.0456     ?      3.2297+-0.0522        ?
   crypto-aes                                         6.3582+-0.0500            6.3381+-0.0321        
   crypto-md5                                         3.8226+-0.1215     ?      3.9580+-0.0523        ? might be 1.0354x slower
   crypto-sha1                                        3.8964+-0.0907            3.8750+-0.0858        
   date-format-tofte                                 13.9573+-0.7264     ?     13.9841+-0.2716        ?
   date-format-xparb                                  8.3298+-0.2130            8.1357+-0.1388          might be 1.0239x faster
   math-cordic                                        5.0111+-0.0787            4.9473+-0.0409          might be 1.0129x faster
   math-partial-sums                                 10.5314+-0.2331     ?     10.5389+-0.1006        ?
   math-spectral-norm                                 3.3203+-0.0305            3.2592+-0.0845          might be 1.0187x faster
   regexp-dna                                        11.9778+-0.1338           11.9537+-0.1819        
   string-base64                                      6.5921+-0.0476            6.5726+-0.1355        
   string-fasta                                      10.4513+-0.1017           10.3003+-0.1578          might be 1.0147x faster
   string-tagcloud                                   15.6632+-0.2695           15.5046+-0.1058          might be 1.0102x faster
   string-unpack-code                                31.7536+-0.6477           31.5404+-0.2875        
   string-validate-input                              7.4191+-0.1034     ?      7.4209+-0.1229        ?

   <arithmetic> *                                     8.1277+-0.0287            8.1073+-0.0290          might be 1.0025x faster
   <geometric>                                        6.7176+-0.0192            6.7085+-0.0184          might be 1.0013x faster
   <harmonic>                                         5.6723+-0.0295            5.6642+-0.0201          might be 1.0014x faster

                                                        TipOfTree                FixPolyCall                                    
LongSpider:
   3d-cube                                         1361.5319+-8.9989         1355.0175+-9.2741        
   3d-morph                                        2281.1131+-1.5369     ?   2287.5930+-11.1696       ?
   3d-raytrace                                     1281.7066+-19.7997        1274.9945+-11.8870       
   access-binary-trees                             1623.4429+-5.2031     ?   1638.7830+-52.2495       ?
   access-fannkuch                                  527.6164+-14.4061    ?    528.7609+-15.8620       ?
   access-nbody                                    1230.3524+-3.9376         1229.6328+-1.3139        
   access-nsieve                                   1534.3455+-1.4296         1531.6598+-4.4802        
   bitops-3bit-bits-in-byte                          57.1425+-0.3988           57.0953+-0.2071        
   bitops-bits-in-byte                              388.0894+-8.7618          385.9900+-7.2083        
   bitops-nsieve-bits                              1145.9926+-0.7123         1145.9567+-5.4090        
   controlflow-recursive                            885.9849+-0.6954     ?    886.5292+-0.6564        ?
   crypto-aes                                      1108.9457+-13.4468        1099.0426+-4.0424        
   crypto-md5                                       951.2662+-10.4669    ?    965.2819+-14.9148       ? might be 1.0147x slower
   crypto-sha1                                     1157.5897+-12.6367        1153.8704+-3.0046        
   date-format-tofte                               1221.3362+-9.8889     ?   1242.6692+-20.7652       ? might be 1.0175x slower
   date-format-xparb                               1173.3985+-26.9964    ?   1178.6465+-15.5854       ?
   math-cordic                                      820.7515+-0.6929          819.7214+-1.8062        
   math-partial-sums                               1309.5774+-2.1018     ?   1309.9017+-3.2197        ?
   math-spectral-norm                              1302.8190+-11.5240        1297.9260+-0.8491        
   string-base64                                    568.8195+-2.3222     ?    568.8405+-2.5863        ?
   string-fasta                                     710.4099+-5.5257     ^    697.2695+-2.5474        ^ definitely 1.0188x faster
   string-tagcloud                                  368.6283+-6.6334          361.6895+-2.2190          might be 1.0192x faster

   <arithmetic>                                    1045.9482+-1.6816     ?   1046.2215+-2.7473        ? might be 1.0003x slower
   <geometric> *                                    874.8948+-1.7992          874.0253+-2.1656          might be 1.0010x faster
   <harmonic>                                       534.9330+-2.2282          533.8218+-1.8425          might be 1.0021x faster

                                                        TipOfTree                FixPolyCall                                    
V8Spider:
   crypto                                            81.9673+-1.0641     ?     83.0882+-1.7375        ? might be 1.0137x slower
   deltablue                                        122.7781+-1.9660     ^     97.3098+-2.0512        ^ definitely 1.2617x faster
   earley-boyer                                      72.4917+-0.2813           72.2585+-0.7101        
   raytrace                                          53.5066+-0.9923     ^     49.4819+-0.8061        ^ definitely 1.0813x faster
   regexp                                           116.8440+-0.6929     ?    117.0502+-0.6449        ?
   richards                                         113.1674+-0.9047     ^    105.7589+-1.4353        ^ definitely 1.0701x faster
   splay                                             57.9990+-2.5130           56.3223+-1.6640          might be 1.0298x faster

   <arithmetic>                                      88.3934+-0.4904     ^     83.0385+-0.4789        ^ definitely 1.0645x faster
   <geometric> *                                     84.1618+-0.5207     ^     79.5389+-0.4536        ^ definitely 1.0581x faster
   <harmonic>                                        80.0056+-0.5779     ^     75.9743+-0.5274        ^ definitely 1.0531x faster

                                                        TipOfTree                FixPolyCall                                    
Octane:
   encrypt                                           0.38764+-0.00559    ?     0.38879+-0.00517       ?
   decrypt                                           6.81660+-0.00576    ?     6.82924+-0.02685       ?
   deltablue                                x2       0.31960+-0.00099    ?     0.32190+-0.00335       ?
   earley                                            1.23142+-0.01274          1.22760+-0.00612       
   boyer                                            10.54749+-0.02812         10.41545+-0.13390         might be 1.0127x faster
   navier-stokes                            x2       7.74534+-0.00532          7.74429+-0.01088       
   raytrace                                 x2       2.27275+-0.09353    ?     2.27535+-0.11742       ?
   richards                                 x2       0.20282+-0.00366    !     0.23787+-0.01840       ! definitely 1.1728x slower
   splay                                    x2       0.61542+-0.00481    ?     0.62202+-0.00803       ? might be 1.0107x slower
   regexp                                   x2      59.08863+-0.29472         58.61115+-0.30563       
   pdfjs                                    x2      84.39290+-0.30881         84.20211+-0.78989       
   mandreel                                 x2      88.58676+-0.52712         88.09275+-0.32743       
   gbemu                                    x2      75.22039+-1.06138    !    82.26167+-1.53264       ! definitely 1.0936x slower
   closure                                           0.91824+-0.00257          0.91568+-0.00171       
   jquery                                           11.92135+-0.01924         11.89289+-0.13603       
   box2d                                    x2      28.09959+-0.31097         28.04878+-0.29651       
   zlib                                     x2     790.62085+-2.97169        775.36279+-42.36094        might be 1.0197x faster
   typescript                               x2    1277.91634+-16.49183      1271.45736+-18.04910      

   <arithmetic>                                    162.06618+-1.22661        161.00486+-2.81174         might be 1.0066x faster
   <geometric> *                                    11.85432+-0.03897    ?    12.02470+-0.13914       ? might be 1.0144x slower
   <harmonic>                                        1.17656+-0.00825    !     1.25074+-0.03760       ! definitely 1.0630x slower

                                                        TipOfTree                FixPolyCall                                    
Kraken:
   ai-astar                                          528.422+-1.142      ?     528.449+-1.562         ?
   audio-beat-detection                              200.986+-0.673            199.525+-3.547         
   audio-dft                                         259.561+-23.398           251.181+-1.361           might be 1.0334x faster
   audio-fft                                         131.952+-0.828      ?     132.254+-0.730         ?
   audio-oscillator                                  356.559+-0.997      ?     357.245+-1.329         ?
   imaging-darkroom                                  286.378+-0.375      ?     286.842+-0.943         ?
   imaging-desaturate                                112.803+-0.288      ?     112.835+-0.209         ?
   imaging-gaussian-blur                             183.544+-0.665      ?     183.635+-0.429         ?
   json-parse-financial                               86.921+-0.619      ^      82.171+-0.575         ^ definitely 1.0578x faster
   json-stringify-tinderbox                          103.267+-1.143            101.750+-0.625           might be 1.0149x faster
   stanford-crypto-aes                                98.924+-1.052      ?      99.443+-1.052         ?
   stanford-crypto-ccm                                87.515+-10.963     ?      95.975+-4.247         ? might be 1.0967x slower
   stanford-crypto-pbkdf2                            272.576+-2.429      ?     275.023+-1.520         ?
   stanford-crypto-sha256-iterative                  107.730+-0.972            107.164+-0.570         

   <arithmetic> *                                    201.224+-2.229            200.964+-0.508           might be 1.0013x faster
   <geometric>                                       170.404+-2.188      ?     170.452+-0.751         ? might be 1.0003x slower
   <harmonic>                                        147.795+-2.416      ?     148.153+-0.965         ? might be 1.0024x slower

                                                        TipOfTree                FixPolyCall                                    
JSRegress:
   abs-boolean                                        4.4034+-0.0527     ?      4.4085+-0.0574        ?
   adapt-to-double-divide                            20.3856+-0.4091           20.2237+-0.3619        
   aliased-arguments-getbyval                         1.8081+-0.0113            1.7943+-0.0271        
   allocate-big-object                                3.9622+-0.1399     ?      4.0366+-0.0522        ? might be 1.0188x slower
   arity-mismatch-inlining                            1.2097+-0.0148            1.1830+-0.0168          might be 1.0226x faster
   array-access-polymorphic-structure                11.0122+-0.2241     ?     11.1973+-0.1668        ? might be 1.0168x slower
   array-nonarray-polymorhpic-access                 57.6248+-0.2487           57.5643+-0.2313        
   array-prototype-every                            125.1196+-0.8436     !    132.3649+-1.8905        ! definitely 1.0579x slower
   array-prototype-forEach                          124.2053+-1.0871     !    130.0935+-1.7421        ! definitely 1.0474x slower
   array-prototype-map                              149.4895+-2.5467     !    158.2474+-2.6354        ! definitely 1.0586x slower
   array-prototype-some                             125.3059+-1.8168     !    132.4377+-1.6100        ! definitely 1.0569x slower
   array-splice-contiguous                           68.5832+-0.4377           67.9850+-0.7215        
   array-with-double-add                              6.4950+-0.1471     ?      6.5256+-0.0607        ?
   array-with-double-increment                        4.7965+-0.0676     ?      4.8455+-0.1000        ? might be 1.0102x slower
   array-with-double-mul-add                          8.3687+-0.1078     ?      8.4645+-0.1031        ? might be 1.0115x slower
   array-with-double-sum                              5.1441+-0.0685            5.0917+-0.0487          might be 1.0103x faster
   array-with-int32-add-sub                          11.1366+-0.0699     ?     11.3333+-0.1595        ? might be 1.0177x slower
   array-with-int32-or-double-sum                     5.2172+-0.0607            5.1490+-0.0553          might be 1.0132x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     59.3319+-0.8240     ?     59.6520+-1.1811        ?
   ArrayBuffer-DataView-alloc-long-lived             23.9583+-0.2827     ?     24.0300+-0.3848        ?
   ArrayBuffer-Int32Array-byteOffset                  5.5673+-0.1114     ?      5.6662+-0.0275        ? might be 1.0178x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     61.9939+-1.7986     ?     62.4517+-0.6124        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     40.7150+-0.6543           40.1014+-0.1143          might be 1.0153x faster
   ArrayBuffer-Int8Array-alloc-long-lived            23.5614+-1.1643           23.0718+-0.3132          might be 1.0212x faster
   ArrayBuffer-Int8Array-alloc                       20.1064+-0.4768           19.9118+-0.2162        
   asmjs_bool_bug                                    10.3083+-0.1224     ?     10.4773+-0.1311        ? might be 1.0164x slower
   assign-custom-setter-polymorphic                   5.1355+-0.1876            5.0064+-0.0304          might be 1.0258x faster
   assign-custom-setter                               6.6882+-0.1071     ?      6.8825+-0.3012        ? might be 1.0291x slower
   basic-set                                         15.8947+-0.2218           15.6545+-0.1990          might be 1.0153x faster
   big-int-mul                                        6.7691+-0.1894     ?      6.7691+-0.1631        ?
   boolean-test                                       5.0315+-0.0649            5.0009+-0.0483        
   branch-fold                                        5.4591+-0.0394            5.4098+-0.0369        
   by-val-generic                                    12.6405+-0.2689     ?     12.7661+-0.4698        ?
   call-spread-apply                                 29.2950+-0.2775     ?     29.3957+-0.2642        ?
   call-spread-call                                  25.3347+-0.1400     !     29.8722+-0.3581        ! definitely 1.1791x slower
   captured-assignments                               0.6483+-0.0058            0.6385+-0.0053          might be 1.0154x faster
   cast-int-to-double                                 9.6417+-0.1787            9.5950+-0.1289        
   cell-argument                                     11.2107+-0.3723     ?     11.3278+-0.0787        ? might be 1.0104x slower
   cfg-simplify                                       4.3442+-0.1882            4.3095+-0.0346        
   chain-getter-access                               13.8563+-0.2066     ?     13.9326+-0.1152        ?
   cmpeq-obj-to-obj-other                            13.9104+-0.3735           13.8570+-0.3058        
   constant-test                                      9.0547+-0.1745     ?      9.0676+-0.2008        ?
   DataView-custom-properties                        67.3010+-0.8402           66.9647+-0.5664        
   delay-tear-off-arguments-strictmode               14.2341+-0.2316     !     14.9486+-0.1825        ! definitely 1.0502x slower
   destructuring-arguments                           10.4858+-0.0599     ?     10.5466+-0.1202        ?
   destructuring-swap                                 9.2591+-0.1299            9.0770+-0.1246          might be 1.0201x faster
   direct-arguments-getbyval                          1.7957+-0.0212     ?      1.7975+-0.0238        ?
   div-boolean-double                                 6.5337+-0.1133     ?      6.5499+-0.1538        ?
   div-boolean                                       11.7613+-0.1810           11.7094+-0.1627        
   double-get-by-val-out-of-bounds                    6.7611+-0.1389     ?      7.0837+-0.3989        ? might be 1.0477x slower
   double-pollution-getbyval                         11.3762+-0.2762           11.3294+-0.2074        
   double-pollution-putbyoffset                       6.3781+-0.0914            6.3370+-0.1762        
   double-to-int32-typed-array-no-inline              3.2343+-0.0686     ?      3.2760+-0.0416        ? might be 1.0129x slower
   double-to-int32-typed-array                        2.8285+-0.1008     ?      2.8741+-0.0531        ? might be 1.0161x slower
   double-to-uint32-typed-array-no-inline             3.4023+-0.0567     ^      3.3009+-0.0403        ^ definitely 1.0307x faster
   double-to-uint32-typed-array                       3.0218+-0.0610            2.9689+-0.0538          might be 1.0178x faster
   elidable-new-object-dag                           63.0132+-1.0829           62.4923+-0.8702        
   elidable-new-object-roflcopter                   244.0214+-2.2848          243.1897+-2.6869        
   elidable-new-object-then-call                     57.0220+-1.4296           56.8922+-1.2225        
   elidable-new-object-tree                          70.3890+-0.8029     ?     70.5164+-1.8963        ?
   empty-string-plus-int                              8.8884+-0.1133     ?      8.9207+-0.1201        ?
   emscripten-cube2hash                              53.8701+-0.4382           53.4736+-0.3737        
   external-arguments-getbyval                        2.2084+-0.0258     ?      2.2712+-0.0643        ? might be 1.0284x slower
   external-arguments-putbyval                        3.3680+-0.0172            3.3366+-0.0309        
   fixed-typed-array-storage-var-index                1.6372+-0.0280            1.6268+-0.0298        
   fixed-typed-array-storage                          1.2558+-0.0323            1.2176+-0.0106          might be 1.0314x faster
   Float32Array-matrix-mult                           6.8122+-0.0535            6.7735+-0.0908        
   Float32Array-to-Float64Array-set                  90.2367+-2.1576           89.8655+-2.2028        
   Float64Array-alloc-long-lived                    101.7918+-1.0985     ?    101.9213+-0.7797        ?
   Float64Array-to-Int16Array-set                   112.7216+-0.7609          112.5348+-1.0762        
   fold-double-to-int                                20.1327+-0.1763     ?     20.2313+-0.2828        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     24.4086+-0.2492     ^     18.7358+-0.5021        ^ definitely 1.3028x faster
   fold-get-by-id-to-multi-get-by-offset             23.0310+-0.3361     ^     17.2620+-0.2660        ^ definitely 1.3342x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     17.9065+-0.0974     ^     12.9003+-0.1680        ^ definitely 1.3881x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     17.9795+-0.3341     ^     12.7849+-0.1570        ^ definitely 1.4063x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     16.9926+-0.1267     ^     12.4724+-0.2531        ^ definitely 1.3624x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     15.9093+-0.1715     ^     11.5390+-0.3743        ^ definitely 1.3787x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     22.6215+-0.1233     ^     17.7499+-0.3477        ^ definitely 1.2745x faster
   fold-put-by-id-to-multi-put-by-offset             23.4626+-0.3731     ^     18.3753+-0.3678        ^ definitely 1.2769x faster
   fold-put-structure                                16.9591+-0.1113     ^     12.7107+-0.7837        ^ definitely 1.3342x faster
   for-of-iterate-array-entries                       8.5702+-0.1989     ?      8.7860+-0.1125        ? might be 1.0252x slower
   for-of-iterate-array-keys                          4.0304+-0.0902     ?      4.0523+-0.0510        ?
   for-of-iterate-array-values                        3.5007+-0.0342            3.4681+-0.0536        
   fround                                            23.7790+-0.4236           23.7212+-0.3142        
   ftl-library-inlining-dataview                    107.8218+-6.8432     ?    107.9261+-5.7013        ?
   ftl-library-inlining                             141.0395+-21.3123         130.3971+-11.5483         might be 1.0816x faster
   function-dot-apply                                 2.7243+-0.0654     ?      2.7443+-0.0424        ?
   function-test                                      5.4431+-0.0929            5.4399+-0.0854        
   function-with-eval                               181.0358+-1.1848     ?    184.8003+-8.5852        ? might be 1.0208x slower
   gcse-poly-get-less-obvious                        29.2733+-0.2691     ?     29.3977+-0.4543        ?
   gcse-poly-get                                     29.7768+-0.1722           29.6702+-0.1838        
   gcse                                               7.6545+-0.1549     ?      7.6794+-0.0750        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.9118+-0.0929            3.8987+-0.0656        
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.7928+-0.1061     ?      9.9357+-0.1193        ? might be 1.0146x slower
   get-by-id-chain-from-try-block                    19.3918+-0.2014           19.2956+-0.0504        
   get-by-id-check-structure-elimination              8.8954+-0.0901            8.8353+-0.1574        
   get-by-id-proto-or-self                           25.7747+-2.6243           24.9370+-1.6388          might be 1.0336x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.6125+-0.0632     ?      4.6138+-0.0512        ?
   get-by-id-self-or-proto                           25.4762+-1.7482     ?     25.6415+-2.7473        ?
   get-by-val-out-of-bounds                           6.6827+-0.2402     ?      6.9101+-0.1139        ? might be 1.0340x slower
   get_callee_monomorphic                             5.9041+-0.1093     ?      6.0079+-0.1356        ? might be 1.0176x slower
   get_callee_polymorphic                             6.0200+-0.0791            5.9029+-0.1017          might be 1.0198x faster
   getter-no-activation                               6.8717+-0.0586     ?      6.9696+-0.0958        ? might be 1.0143x slower
   getter-richards                                  156.2186+-7.6846     ^    144.1081+-3.6898        ^ definitely 1.0840x faster
   getter                                             7.7855+-0.2198     ?      7.8150+-0.1012        ?
   global-var-const-infer-fire-from-opt               1.3440+-0.0805            1.3072+-0.0928          might be 1.0282x faster
   global-var-const-infer                             1.2848+-0.0324     ?      1.2893+-0.0310        ?
   HashMap-put-get-iterate-keys                      40.7632+-0.4200     ?     41.2675+-0.7746        ? might be 1.0124x slower
   HashMap-put-get-iterate                           40.0997+-0.5484     ?     40.2276+-0.9885        ?
   HashMap-string-put-get-iterate                    39.7029+-0.2828     ?     39.7985+-0.8728        ?
   hoist-make-rope                                   14.0520+-1.2434     ?     15.1226+-0.2043        ? might be 1.0762x slower
   hoist-poly-check-structure-effectful-loop   
                                                      7.8809+-0.2188     ?      7.9463+-0.2216        ?
   hoist-poly-check-structure                         5.7093+-0.0761            5.6996+-0.0670        
   imul-double-only                                  10.1100+-0.3188     ?     10.1849+-0.2018        ?
   imul-int-only                                     13.0698+-0.1875           13.0590+-0.1780        
   imul-mixed                                         9.8538+-0.7520     ?      9.9960+-0.6092        ? might be 1.0144x slower
   in-four-cases                                     28.6838+-0.1025     ?     28.7319+-0.2741        ?
   in-one-case-false                                 14.8882+-0.0848     ?     14.9156+-0.1571        ?
   in-one-case-true                                  14.9108+-0.0733           14.8749+-0.1111        
   in-two-cases                                      15.4172+-0.1741     ?     15.5855+-0.1516        ? might be 1.0109x slower
   indexed-properties-in-objects                      4.3853+-0.1387     ?      4.4346+-0.0617        ? might be 1.0112x slower
   infer-closure-const-then-mov-no-inline             5.1926+-0.1278     ?      5.2007+-0.0742        ?
   infer-closure-const-then-mov                      29.4766+-0.1191     ?     29.5035+-0.1232        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.7720+-0.2902           17.7305+-0.1544        
   infer-closure-const-then-put-to-scope             35.5169+-0.0876     ?     35.6212+-0.1137        ?
   infer-closure-const-then-reenter-no-inline   
                                                     81.1805+-0.3176           81.0754+-0.1099        
   infer-closure-const-then-reenter                  35.0501+-0.2376           34.8089+-0.3926        
   infer-constant-global-property                     5.5928+-0.0578     ?      5.6057+-0.0555        ?
   infer-constant-property                            3.8763+-0.0689            3.8607+-0.0748        
   infer-one-time-closure-ten-vars                   16.5282+-0.1816     ?     16.6178+-0.2955        ?
   infer-one-time-closure-two-vars                   16.0394+-0.2331           15.9242+-0.2211        
   infer-one-time-closure                            15.9484+-0.2987           15.7686+-0.2045          might be 1.0114x faster
   infer-one-time-deep-closure                       28.2682+-0.2297     ?     28.2984+-0.2719        ?
   inline-arguments-access                            3.0078+-0.0445            2.9217+-0.0662          might be 1.0295x faster
   inline-arguments-aliased-access                    2.8220+-0.0303            2.8117+-0.0539        
   inline-arguments-local-escape                     21.7090+-0.2720     ^     20.6118+-0.1864        ^ definitely 1.0532x faster
   inline-get-scoped-var                              6.7216+-0.0357     ?      6.7505+-0.0708        ?
   inlined-put-by-id-transition                      18.3134+-0.4426           17.6666+-0.7248          might be 1.0366x faster
   int-or-other-abs-then-get-by-val                   8.0928+-0.1854     ?      8.2449+-0.0776        ? might be 1.0188x slower
   int-or-other-abs-zero-then-get-by-val             30.6063+-0.2556     ?     30.7075+-0.1709        ?
   int-or-other-add-then-get-by-val                   6.9610+-0.1211     ?      6.9681+-0.0550        ?
   int-or-other-add                                   9.2728+-0.1620            9.2485+-0.1527        
   int-or-other-div-then-get-by-val                   6.1310+-0.0679            6.0581+-0.1854          might be 1.0120x faster
   int-or-other-max-then-get-by-val                   7.7955+-0.1717            7.7401+-0.3330        
   int-or-other-min-then-get-by-val                   6.2766+-0.0675            6.2382+-0.0684        
   int-or-other-mod-then-get-by-val                   5.9243+-0.2088     ?      6.0086+-0.1553        ? might be 1.0142x slower
   int-or-other-mul-then-get-by-val                   5.9270+-0.1199     ?      5.9280+-0.1285        ?
   int-or-other-neg-then-get-by-val                   7.4115+-0.0510            7.3302+-0.0695          might be 1.0111x faster
   int-or-other-neg-zero-then-get-by-val             30.5800+-0.1710     ?     30.6747+-0.1747        ?
   int-or-other-sub-then-get-by-val                   6.9369+-0.1227     ?      6.9496+-0.1175        ?
   int-or-other-sub                                   5.9583+-0.2879     ?      6.0190+-0.2397        ? might be 1.0102x slower
   int-overflow-local                                 6.8895+-0.0996            6.8888+-0.0541        
   Int16Array-alloc-long-lived                       73.7036+-1.2096           73.3246+-0.5092        
   Int16Array-bubble-sort-with-byteLength            43.8259+-0.1227     ?     43.8784+-0.4619        ?
   Int16Array-bubble-sort                            42.3573+-0.3010     ?     42.4847+-0.1244        ?
   Int16Array-load-int-mul                            2.2148+-0.0432            2.2027+-0.0393        
   Int16Array-to-Int32Array-set                      84.0289+-1.9929           83.2220+-0.5603        
   Int32Array-alloc-large                            42.9993+-1.2904           42.5151+-1.2739          might be 1.0114x faster
   Int32Array-alloc-long-lived                       80.6552+-0.5656     ?     81.0398+-0.4786        ?
   Int32Array-alloc                                   4.8960+-0.1885     ?      4.9203+-0.0615        ?
   Int32Array-Int8Array-view-alloc                   12.3295+-0.2148           12.0706+-0.2464          might be 1.0214x faster
   int52-spill                                        9.9876+-0.2265            9.6867+-0.2357          might be 1.0311x faster
   Int8Array-alloc-long-lived                        66.8200+-0.5778           65.8551+-0.6214          might be 1.0147x faster
   Int8Array-load-with-byteLength                     5.6347+-0.0683            5.5768+-0.0618          might be 1.0104x faster
   Int8Array-load                                     5.6127+-0.0714     ?      5.6601+-0.0956        ?
   integer-divide                                    17.0110+-0.1457     ?     17.0370+-0.1641        ?
   integer-modulo                                     3.0484+-0.0761            2.9958+-0.0723          might be 1.0175x faster
   large-int-captured                                12.8605+-0.2808     ?     13.1573+-0.1386        ? might be 1.0231x slower
   large-int-neg                                     24.0554+-0.5072     ?     24.3747+-0.4146        ? might be 1.0133x slower
   large-int                                         21.4970+-0.3571     ?     21.7906+-0.4251        ? might be 1.0137x slower
   logical-not                                        7.9027+-0.4658            7.4226+-0.1493          might be 1.0647x faster
   lots-of-fields                                    18.2312+-0.1145     ?     18.3298+-0.2104        ?
   make-indexed-storage                               4.6942+-0.4122     ?      4.7663+-0.2861        ? might be 1.0154x slower
   make-rope-cse                                      6.2630+-0.0300     ?      6.2693+-0.0610        ?
   marsaglia-larger-ints                             64.0637+-0.6226     ?     64.1947+-0.8197        ?
   marsaglia-osr-entry                               31.2587+-0.3349     ?     31.6539+-0.5360        ? might be 1.0126x slower
   max-boolean                                        3.9037+-0.0677            3.8855+-0.0437        
   method-on-number                                  27.6343+-0.3032     !     28.4398+-0.2556        ! definitely 1.0291x slower
   min-boolean                                        3.7740+-0.0681     ?      3.8137+-0.0857        ? might be 1.0105x slower
   minus-boolean-double                               4.9151+-0.0985     ?      4.9517+-0.0287        ?
   minus-boolean                                      3.8144+-0.0490            3.7889+-0.0475        
   misc-strict-eq                                    57.2335+-3.5239     ?     57.4887+-3.2569        ?
   mod-boolean-double                                13.8448+-0.1437     ?     14.0500+-0.2710        ? might be 1.0148x slower
   mod-boolean                                       10.6334+-0.1791     ?     10.7529+-0.2175        ? might be 1.0112x slower
   mul-boolean-double                                 5.7734+-0.0483            5.7378+-0.0307        
   mul-boolean                                        4.1329+-0.0469            4.0835+-0.0378          might be 1.0121x faster
   neg-boolean                                        5.0416+-0.0685            5.0236+-0.0382        
   negative-zero-divide                               0.4674+-0.0032            0.4653+-0.0059        
   negative-zero-modulo                               0.4719+-0.0026            0.4685+-0.0048        
   negative-zero-negate                               0.4414+-0.0072            0.4389+-0.0034        
   nested-function-parsing                           40.0349+-0.1638     ?     40.1733+-0.2155        ?
   new-array-buffer-dead                              4.3928+-0.0808     ?      4.4230+-0.1359        ?
   new-array-buffer-push                             10.7449+-0.2050     ?     10.8024+-0.2667        ?
   new-array-dead                                    14.9914+-0.2331           14.7856+-0.3395          might be 1.0139x faster
   new-array-push                                     7.3912+-0.1724            7.3869+-0.2498        
   number-test                                        4.8704+-0.0497     ?      4.8722+-0.0340        ?
   object-closure-call                                9.0166+-0.0720            9.0077+-0.0353        
   object-test                                        5.2528+-0.0662            5.2255+-0.0632        
   obvious-sink-pathology-taken                     207.8750+-1.5401          206.5188+-0.8723        
   obvious-sink-pathology                           198.9239+-2.2818          196.9643+-1.7760        
   obviously-elidable-new-object                     51.5151+-1.1394     ?     51.5998+-0.3645        ?
   plus-boolean-arith                                 3.8391+-0.0543            3.8382+-0.0497        
   plus-boolean-double                                4.9907+-0.0233            4.9806+-0.0357        
   plus-boolean                                       3.7338+-0.0606     ?      3.7657+-0.0478        ?
   poly-chain-access-different-prototypes-simple   
                                                      4.5207+-0.0555     ?      4.5854+-0.0539        ? might be 1.0143x slower
   poly-chain-access-different-prototypes             2.9885+-0.0644     ?      3.0852+-0.1416        ? might be 1.0323x slower
   poly-chain-access-simpler                          4.5160+-0.0516            4.5120+-0.0593        
   poly-chain-access                                  3.0717+-0.3408            2.9342+-0.0155          might be 1.0468x faster
   poly-stricteq                                     85.7221+-0.5835           84.9334+-1.5628        
   polymorphic-array-call                             2.3772+-0.0421     ?      2.4541+-0.0437        ? might be 1.0324x slower
   polymorphic-get-by-id                              4.9237+-0.0555     ?      4.9903+-0.2014        ? might be 1.0135x slower
   polymorphic-put-by-id                             45.6350+-5.2817           44.3319+-1.8418          might be 1.0294x faster
   polymorphic-structure                             29.6200+-0.1921     ?     29.8777+-0.6132        ?
   polyvariant-monomorphic-get-by-id                 13.0732+-0.1326           12.9604+-0.2771        
   proto-getter-access                               13.8151+-0.2484     ?     13.9161+-0.2005        ?
   put-by-id-replace-and-transition                  12.8161+-0.2448     ?     12.8690+-0.0812        ?
   put-by-id-slightly-polymorphic                     4.1845+-0.0433            4.1661+-0.0347        
   put-by-id                                         21.4096+-0.1765     ?     21.6488+-0.4165        ? might be 1.0112x slower
   put-by-val-direct                                  0.8338+-0.0107            0.8253+-0.0129          might be 1.0103x faster
   put-by-val-large-index-blank-indexing-type   
                                                     10.4066+-0.2836            9.9341+-0.2864          might be 1.0476x faster
   put-by-val-machine-int                             4.2558+-0.1647     ?      4.2651+-0.2319        ?
   rare-osr-exit-on-local                            21.8853+-0.1549           21.8109+-0.0802        
   register-pressure-from-osr                        31.9952+-0.1778     ?     32.0128+-0.2576        ?
   setter                                             7.6802+-0.0888            7.6266+-0.1509        
   simple-activation-demo                            39.1651+-0.1808     ?     39.2475+-0.1056        ?
   simple-getter-access                              19.9055+-0.2273     ?     19.9231+-0.2430        ?
   simple-poly-call-nested                           22.7512+-0.3884     ^     10.9276+-0.0788        ^ definitely 2.0820x faster
   simple-poly-call                                   1.7993+-0.0393     ^      1.7212+-0.0317        ^ definitely 1.0454x faster
   sin-boolean                                       23.9953+-1.0165           23.8555+-0.9317        
   sinkable-new-object-dag                           94.6180+-0.9197     ?     95.0242+-0.9176        ?
   sinkable-new-object-taken                         79.3456+-1.0662     ?     79.5811+-0.7475        ?
   sinkable-new-object                               56.3257+-1.8549           55.9158+-4.1539        
   slow-array-profile-convergence                     4.3966+-0.1306            4.2683+-0.1784          might be 1.0301x faster
   slow-convergence                                   5.1195+-0.0715            5.1038+-0.0527        
   sparse-conditional                                 1.7051+-0.0193            1.6800+-0.0372          might be 1.0150x faster
   splice-to-remove                                  27.4496+-0.2081     ?     27.5444+-0.2284        ?
   string-char-code-at                               23.6293+-0.1073           23.6223+-0.2634        
   string-concat-object                               3.2587+-0.0380            3.2351+-0.0325        
   string-concat-pair-object                          3.1864+-0.0593            3.1777+-0.0683        
   string-concat-pair-simple                         18.4221+-0.2847     ?     18.6420+-0.2183        ? might be 1.0119x slower
   string-concat-simple                              18.6597+-0.4171           18.6533+-0.3637        
   string-cons-repeat                                12.0290+-0.0978           12.0212+-0.0706        
   string-cons-tower                                 11.0943+-0.0470           11.0676+-0.0376        
   string-equality                                   26.4648+-0.1424     ?     26.7231+-0.5822        ?
   string-get-by-val-big-char                        12.6775+-0.2054           12.5449+-0.2514          might be 1.0106x faster
   string-get-by-val-out-of-bounds-insane             6.6756+-0.0439     ?      6.7731+-0.2022        ? might be 1.0146x slower
   string-get-by-val-out-of-bounds                    8.0020+-0.1288            8.0000+-0.2360        
   string-get-by-val                                  5.7049+-0.0171            5.6837+-0.0264        
   string-hash                                        3.1087+-0.0664            3.0671+-0.0483          might be 1.0136x faster
   string-long-ident-equality                        21.3425+-0.2398     ?     21.6949+-0.1132        ? might be 1.0165x slower
   string-repeat-arith                               61.4371+-6.3206     ^     49.2359+-0.4752        ^ definitely 1.2478x faster
   string-sub                                        99.3842+-6.4919           96.9591+-0.5538          might be 1.0250x faster
   string-test                                        4.8473+-0.0321     ?      4.8865+-0.0672        ?
   string-var-equality                               52.4665+-0.5950     ?     52.8529+-1.2817        ?
   structure-hoist-over-transitions                   3.8976+-0.0409     ?      3.9044+-0.0255        ?
   substring-concat-weird                            62.4399+-0.6087     ?     63.2601+-0.6042        ? might be 1.0131x slower
   substring-concat                                  65.9036+-0.4505     ?     66.0607+-0.2561        ?
   substring                                         74.6895+-0.3204           74.2843+-0.1658        
   switch-char-constant                               3.9087+-0.0449     ?      3.9139+-0.0230        ?
   switch-char                                        9.4338+-0.1715            9.4010+-0.0966        
   switch-constant                                   17.0259+-0.4924           16.9674+-1.6811        
   switch-string-basic-big-var                       25.4707+-1.6434     ?     26.3865+-0.6814        ? might be 1.0360x slower
   switch-string-basic-big                           27.2079+-2.8004           25.5811+-1.5607          might be 1.0636x faster
   switch-string-basic-var                           34.5253+-1.9558           34.4420+-1.4975        
   switch-string-basic                               27.1927+-0.7025     ?     28.2575+-0.7094        ? might be 1.0392x slower
   switch-string-big-length-tower-var                29.9479+-0.1943     ?     30.0149+-0.3035        ?
   switch-string-length-tower-var                    23.4742+-0.1777           23.4081+-0.1064        
   switch-string-length-tower                        16.9856+-0.0619     ?     17.0097+-0.0859        ?
   switch-string-short                               16.9697+-0.0550           16.8655+-0.1372        
   switch                                            20.1232+-2.3705     ?     21.1620+-0.3886        ? might be 1.0516x slower
   tear-off-arguments-simple                          3.9004+-0.0201     ?      3.9143+-0.0485        ?
   tear-off-arguments                                 6.1397+-0.0420            6.1224+-0.0696        
   temporal-structure                                20.7074+-0.3519           20.6839+-0.5234        
   to-int32-boolean                                  24.7980+-0.2476           24.6857+-0.1793        
   undefined-property-access                        559.7302+-0.9276          559.0930+-0.7187        
   undefined-test                                     5.0421+-0.0884     ?      5.0533+-0.0491        ?
   unprofiled-licm                                   31.4230+-0.4654           31.2461+-0.6115        
   weird-inlining-const-prop                          3.0376+-0.0964            3.0340+-0.0870        

   <arithmetic>                                      27.0357+-0.1150     ^     26.8123+-0.0422        ^ definitely 1.0083x faster
   <geometric> *                                     12.5903+-0.0271     ^     12.4363+-0.0153        ^ definitely 1.0124x faster
   <harmonic>                                         6.1900+-0.0135     ^      6.1396+-0.0143        ^ definitely 1.0082x faster

                                                        TipOfTree                FixPolyCall                                    
AsmBench:
   bigfib.cpp                                       805.9876+-6.9381          800.5723+-3.9880        
   cray.c                                           805.3544+-23.0839         800.1622+-2.3662        
   dry.c                                            786.6480+-11.0617    ?    787.6781+-0.7275        ?
   FloatMM.c                                       1145.8517+-1.1145         1145.2922+-0.9563        
   gcc-loops.cpp                                   7038.9987+-12.7575        7029.1763+-10.3793       
   n-body.c                                        2026.4683+-5.6897         2023.2705+-2.9121        
   Quicksort.c                                      707.2682+-0.4682     ^    705.9633+-0.7616        ^ definitely 1.0018x faster
   stepanov_container.cpp                          5774.0280+-18.4893    ?   5780.0971+-33.2748       ?
   Towers.c                                         483.1687+-11.8870    ^    468.7030+-2.0440        ^ definitely 1.0309x faster

   <arithmetic>                                    2174.8637+-4.5945         2171.2128+-4.5745          might be 1.0017x faster
   <geometric> *                                   1365.0641+-5.1374     ^   1358.1061+-1.2796        ^ definitely 1.0051x faster
   <harmonic>                                      1008.9290+-5.9826     ^    999.8683+-0.7743        ^ definitely 1.0091x faster

                                                        TipOfTree                FixPolyCall                                    
CompressionBench:
   huffman                                          723.0393+-11.8776    ?    723.0950+-10.2764       ?
   arithmetic-simple                                687.3353+-1.1337          685.5412+-2.2894        
   arithmetic-precise                               530.0193+-1.7648          526.4399+-3.3300        
   arithmetic-complex-precise                       528.7227+-1.4596     ^    524.4205+-2.0636        ^ definitely 1.0082x faster
   arithmetic-precise-order-0                       753.3258+-8.4710     ?    761.9788+-7.3901        ? might be 1.0115x slower
   arithmetic-precise-order-1                       565.1217+-5.4848          564.8609+-7.1305        
   arithmetic-precise-order-2                       628.8137+-2.6847     ?    631.1237+-5.4744        ?
   arithmetic-simple-order-1                        706.3149+-3.4002     ?    709.1667+-5.3332        ?
   arithmetic-simple-order-2                        787.8340+-2.6070     ?    793.0290+-5.8016        ?
   lz-string                                        537.0835+-4.1636          529.8291+-3.6942          might be 1.0137x faster

   <arithmetic>                                     644.7610+-1.4807     ?    644.9485+-1.9503        ? might be 1.0003x slower
   <geometric> *                                    637.8047+-1.3499          637.4292+-1.8455          might be 1.0006x faster
   <harmonic>                                       630.8767+-1.2719          629.9395+-1.7510          might be 1.0015x faster

                                                        TipOfTree                FixPolyCall                                    
All benchmarks:
   <arithmetic>                                     164.2863+-0.1453          163.8808+-0.3137          might be 1.0025x faster
   <geometric>                                       21.2008+-0.0252     ^     21.0147+-0.0331        ^ definitely 1.0089x faster
   <harmonic>                                         5.2630+-0.0140     !      5.3427+-0.0563        ! definitely 1.0151x slower

                                                        TipOfTree                FixPolyCall                                    
Geomean of preferred means:
   <scaled-result>                                  105.7560+-0.1344     ^    104.8999+-0.2376        ^ definitely 1.0082x faster
Comment 8 Filip Pizlo 2015-01-26 19:59:27 PST
The 13% richards slow-down is easy enough to reproduce with concurrent JIT enabled.  It reproduces on two different machines (an old Mac Pro and a relatively new MacBook Pro).  Oddly, if you disabled concurrent JIT, the results flip on the MBP.  Not on the Mac Pro - disabling concurrent JIT still results in a slow-down on that machine.
Comment 9 Filip Pizlo 2015-01-26 20:03:40 PST
Super interesting: we still get a slow-down even with FTL JIT disabled.  This suggests that this has nothing to do with poly inlining per se.  The presence of the poly IC's appears to perturb performance of normal call sites.

Reassuringly, if you disable the DFG JIT, then this becomes a speed-up.  So this isn't about the poly IC itself being slow - it's actually a progression for baseline performance, which is what we would have hoped.  What appears to be happening is that the profiling generated from the poly IC has lower fidelity even when the call is actually monomorphic.
Comment 10 Filip Pizlo 2015-01-26 20:35:03 PST
It seems that part of the slow down has to do with a polyvariant call not getting inlined when this patch is applied.  Disabling polyvariant call inlining doesn't eliminate the slow-down; this is consistent with there still being a slow-down with FTL disabled.
Comment 11 Filip Pizlo 2015-01-27 12:01:41 PST
Found the issue.  It's not a polyvariant call - it's actually a polymorphic call.  In richards, there is a call to the task run method call that can go to one of 4 task run methods (IdleTask, DeviceTask, WorkerTask, or HandlerTask).  The DeviceTask ends up being the most commonly called, but it's the last to be called.  So with call edge profiling we detect that we should emit:

if (callee = DeviceTask run)
    inline DeviceTask run
else
    polymorphic call

This ends up producing a healthy speed-up.  But with the new polymorphic call inline caching, we see the first three device types to be called (IdleTask, WorkerTask, and HandlerTask) and then we see a very high slow path count because the DeviceTask is what we usually end up calling.

This *might* be an example of why we want per-callee frequencies.  But it might also just be a good reason to increase the number of callees we allow in the poly call IC.  I'll mess with that.
Comment 12 Filip Pizlo 2015-01-27 12:43:29 PST
(In reply to comment #11)
> Found the issue.  It's not a polyvariant call - it's actually a polymorphic
> call.  In richards, there is a call to the task run method call that can go
> to one of 4 task run methods (IdleTask, DeviceTask, WorkerTask, or
> HandlerTask).  The DeviceTask ends up being the most commonly called, but
> it's the last to be called.  So with call edge profiling we detect that we
> should emit:
> 
> if (callee = DeviceTask run)
>     inline DeviceTask run
> else
>     polymorphic call
> 
> This ends up producing a healthy speed-up.  But with the new polymorphic
> call inline caching, we see the first three device types to be called
> (IdleTask, WorkerTask, and HandlerTask) and then we see a very high slow
> path count because the DeviceTask is what we usually end up calling.
> 
> This *might* be an example of why we want per-callee frequencies.  But it
> might also just be a good reason to increase the number of callees we allow
> in the poly call IC.  I'll mess with that.

Setting the poly call IC size to 4 appears to fix it.  I'm going to do a search over a variety of poly call IC sizes and see what effect it has on other programs.
Comment 13 Filip Pizlo 2015-01-27 14:29:06 PST
Ok - I'm on to something.  I tried IC size limits 3, 4, and 5.  5 appears best, but 4 is almost as good.  This removes the richards regression.  But there is still a gbemu regression and SunSpider isn't really seeing a progression.  I'll try to fix both of those issues.
Comment 14 Filip Pizlo 2015-01-27 15:02:01 PST
Created attachment 245478 [details]
rebased

Getting ready for the final bit of stuff
Comment 15 Filip Pizlo 2015-01-27 15:09:30 PST
I want to do two things: introduce fast path counts and allow the IC size to grow large, and mitigate the latter by using a binary switch instead of a linear branch chain.
Comment 16 Filip Pizlo 2015-01-27 19:01:31 PST
Created attachment 245503 [details]
more refinements

This introduces a binary switch and fast path counts.  Haven't tried it yet.
Comment 17 Filip Pizlo 2015-01-28 11:45:20 PST
Created attachment 245558 [details]
getting there

This patch passes tests but is still a regression on gbemu.  I believe that gbemu really wants one of its calls to be a normal virtual call rather than a cached polymorphic call.  I'm going to experiment with making the polymorphic call machinery adapt to calls that are megamorphic.
Comment 18 Filip Pizlo 2015-01-28 20:32:39 PST
Created attachment 245605 [details]
the patch

Done!
Comment 19 WebKit Commit Bot 2015-01-28 20:34:31 PST
Attachment 245605 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:18:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:19:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:25:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:28:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1705:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1871:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1873:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:168:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
Total errors found: 12 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 20 Filip Pizlo 2015-01-28 20:35:14 PST
Created attachment 245606 [details]
the patch

And now, without tabs!
Comment 21 Filip Pizlo 2015-01-28 20:36:25 PST
Here's a large-sample-count run of SunSpider on my MBP, showing a speed-up on SunSpider:

Benchmark report for SunSpider on dethklok (MacBookPro9,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r179242)
"FixPolyCall" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r179242)

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

3d-cube                         4.8866+-0.0376            4.8543+-0.0329        
3d-morph                        6.1824+-0.0436            6.1446+-0.0255        
3d-raytrace                     6.5977+-0.1845     ?      6.6014+-0.1960        ?
access-binary-trees             2.0885+-0.0399     ?      2.0977+-0.0381        ?
access-fannkuch                 5.8915+-0.0707     ?      5.9083+-0.1113        ?
access-nbody                    2.9811+-0.0979            2.9460+-0.0688          might be 1.0119x faster
access-nsieve                   3.6582+-0.0313            3.6398+-0.0432        
bitops-3bit-bits-in-byte        1.5962+-0.0179     ?      1.6017+-0.0192        ?
bitops-bits-in-byte             3.5769+-0.0389            3.5665+-0.0495        
bitops-bitwise-and              2.1190+-0.0531            2.0994+-0.0409        
bitops-nsieve-bits              3.7544+-0.0254     ?      3.7556+-0.0812        ?
controlflow-recursive           2.2437+-0.0595            2.1926+-0.0300          might be 1.0233x faster
crypto-aes                      4.1764+-0.0714     ?      4.2196+-0.0923        ? might be 1.0103x slower
crypto-md5                      2.4286+-0.0490            2.4253+-0.0506        
crypto-sha1                     2.7617+-0.0580            2.6770+-0.0474          might be 1.0316x faster
date-format-tofte               9.6993+-0.2640            9.4475+-0.1622          might be 1.0266x faster
date-format-xparb               5.4870+-0.1100            5.2813+-0.1062          might be 1.0390x faster
math-cordic                     3.1769+-0.0844            3.1148+-0.0449          might be 1.0200x faster
math-partial-sums               5.2267+-0.1075            5.1950+-0.0707        
math-spectral-norm              2.0129+-0.0673            1.9388+-0.0321          might be 1.0382x faster
regexp-dna                      8.0691+-0.2355            7.9427+-0.2030          might be 1.0159x faster
string-base64                   4.5848+-0.1194            4.5166+-0.0832          might be 1.0151x faster
string-fasta                    6.5762+-0.0534            6.5541+-0.0689        
string-tagcloud                10.1092+-0.0843           10.0951+-0.1729        
string-unpack-code             20.6961+-0.1538           20.5455+-0.2921        
string-validate-input           4.7125+-0.0752            4.6599+-0.0345          might be 1.0113x faster

<arithmetic> *                  5.2036+-0.0215     ^      5.1547+-0.0197        ^ definitely 1.0095x faster
<geometric>                     4.2997+-0.0134     ^      4.2611+-0.0117        ^ definitely 1.0091x faster
<harmonic>                      3.6758+-0.0109     ^      3.6458+-0.0097        ^ definitely 1.0082x faster
Comment 22 Filip Pizlo 2015-01-28 20:36:48 PST
Here's a SunSpider, Octane, AsmBench run on my MBP (fewer samples):

Benchmark report for SunSpider, Octane, and AsmBench on dethklok (MacBookPro9,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r179242)
"FixPolyCall" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r179242)

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.

                                        TipOfTree                FixPolyCall                                    
SunSpider:
   3d-cube                            4.8197+-0.0372     ?      4.9838+-0.6028        ? might be 1.0340x slower
   3d-morph                           6.4103+-0.6248            6.0075+-0.0367          might be 1.0670x faster
   3d-raytrace                        6.3250+-0.0850            6.2930+-0.2369        
   access-binary-trees                2.0028+-0.0260     ?      2.0251+-0.0933        ? might be 1.0112x slower
   access-fannkuch                    5.7402+-0.0383     ?      6.0172+-0.5350        ? might be 1.0482x slower
   access-nbody                       2.8374+-0.0662     ?      2.8810+-0.1253        ? might be 1.0154x slower
   access-nsieve                      3.5441+-0.0811     ?      3.6455+-0.0369        ? might be 1.0286x slower
   bitops-3bit-bits-in-byte           1.5651+-0.0455     ?      1.6098+-0.1236        ? might be 1.0286x slower
   bitops-bits-in-byte                3.5492+-0.1183            3.4893+-0.0326          might be 1.0172x faster
   bitops-bitwise-and                 2.0168+-0.0639     ?      2.0762+-0.1334        ? might be 1.0294x slower
   bitops-nsieve-bits                 3.7328+-0.2706            3.6347+-0.0286          might be 1.0270x faster
   controlflow-recursive              2.2379+-0.1940     ?      2.4342+-0.6340        ? might be 1.0877x slower
   crypto-aes                         4.0303+-0.0771            3.9875+-0.0688          might be 1.0107x faster
   crypto-md5                         2.4823+-0.2840            2.3923+-0.1226          might be 1.0376x faster
   crypto-sha1                        2.5816+-0.1007            2.5734+-0.1213        
   date-format-tofte                  9.4643+-0.2728     ?     10.7980+-3.1211        ? might be 1.1409x slower
   date-format-xparb                  5.5444+-0.5303     ?      5.7240+-0.9754        ? might be 1.0324x slower
   math-cordic                        3.0561+-0.0422     ?      3.0608+-0.0376        ?
   math-partial-sums                  5.1626+-0.0902            5.0476+-0.0891          might be 1.0228x faster
   math-spectral-norm                 1.8896+-0.0290     ?      2.0972+-0.5773        ? might be 1.1099x slower
   regexp-dna                         7.7404+-1.3290            7.3598+-0.2031          might be 1.0517x faster
   string-base64                      4.3940+-0.2608            4.2830+-0.0998          might be 1.0259x faster
   string-fasta                       6.4015+-0.0859     ?      6.7855+-0.6364        ? might be 1.0600x slower
   string-tagcloud                   10.1041+-0.3371     ?     10.3594+-0.6874        ? might be 1.0253x slower
   string-unpack-code                21.4417+-1.5241           20.4969+-1.5277          might be 1.0461x faster
   string-validate-input              4.6207+-0.1930     ?      4.6427+-0.1659        ?

   <arithmetic> *                     5.1421+-0.0914     ?      5.1810+-0.1442        ? might be 1.0076x slower
   <geometric>                        4.2193+-0.0456     ?      4.2613+-0.0784        ? might be 1.0100x slower
   <harmonic>                         3.5988+-0.0313     ?      3.6415+-0.0694        ? might be 1.0118x slower

                                        TipOfTree                FixPolyCall                                    
Octane:
   encrypt                           0.24821+-0.03876          0.23258+-0.00301         might be 1.0672x faster
   decrypt                           4.01782+-0.01861    ?     4.06039+-0.08587       ? might be 1.0106x slower
   deltablue                x2       0.20643+-0.00522          0.20511+-0.00285       
   earley                            0.72621+-0.08309          0.71169+-0.01280         might be 1.0204x faster
   boyer                             5.50676+-0.31650          5.40778+-0.06060         might be 1.0183x faster
   navier-stokes            x2       5.36930+-0.49714          5.18544+-0.04820         might be 1.0355x faster
   raytrace                 x2       1.31065+-0.03534    ?     1.31643+-0.04533       ?
   richards                 x2       0.13420+-0.00252          0.13415+-0.00153       
   splay                    x2       0.39231+-0.00931          0.38217+-0.00136         might be 1.0265x faster
   regexp                   x2      34.42388+-2.07032         34.42273+-0.59373       
   pdfjs                    x2      52.11575+-0.49626    ?    52.55593+-0.69477       ?
   mandreel                 x2      55.28892+-2.71486         53.79518+-0.27819         might be 1.0278x faster
   gbemu                    x2      44.72125+-0.77128    ?    47.06019+-2.34015       ? might be 1.0523x slower
   closure                           0.56806+-0.00241          0.56651+-0.00691       
   jquery                            8.20949+-1.43832          7.88236+-1.20685         might be 1.0415x faster
   box2d                    x2      13.40057+-0.08366    ?    13.53902+-0.16069       ? might be 1.0103x slower
   zlib                     x2     478.10385+-17.17574   ?   505.18743+-54.06191      ? might be 1.0566x slower
   typescript               x2     867.49902+-13.16426   ?   919.75391+-116.79714     ? might be 1.0602x slower

   <arithmetic>                    104.17363+-1.07316    ?   109.53122+-7.81338       ? might be 1.0514x slower
   <geometric> *                     7.24684+-0.07389    ?     7.26045+-0.08612       ? might be 1.0019x slower
   <harmonic>                        0.75519+-0.00824          0.74697+-0.00285         might be 1.0110x faster

                                        TipOfTree                FixPolyCall                                    
AsmBench:
   bigfib.cpp                       530.3802+-87.8702         501.4757+-4.4827          might be 1.0576x faster
   cray.c                           470.5333+-5.6511          469.3772+-2.3721        
   dry.c                            495.7466+-12.3185         493.5306+-10.6363       
   FloatMM.c                        728.5669+-2.5297     ?    736.6958+-9.0387        ? might be 1.0112x slower
   gcc-loops.cpp                   4173.6727+-9.7069     ?   4244.0462+-159.3924      ? might be 1.0169x slower
   n-body.c                         997.3752+-6.2489     ?   1000.8542+-23.6847       ?
   Quicksort.c                      451.1179+-18.8434         451.0982+-18.0806       
   stepanov_container.cpp          3602.4000+-22.0552        3593.6665+-17.3052       
   Towers.c                         262.7042+-1.9439     ?    281.6958+-47.6332       ? might be 1.0723x slower

   <arithmetic>                    1301.3886+-8.0324     ?   1308.0489+-21.5429       ? might be 1.0051x slower
   <geometric> *                    815.0658+-13.8666    ?    818.2437+-16.1845       ? might be 1.0039x slower
   <harmonic>                       600.9678+-10.6785    ?    606.5304+-23.3536       ? might be 1.0093x slower

                                        TipOfTree                FixPolyCall                                    
All benchmarks:
   <arithmetic>                     230.3292+-1.3863     ?    233.7397+-3.7608        ? might be 1.0148x slower
   <geometric>                       11.2243+-0.0586     ?     11.2842+-0.0626        ? might be 1.0053x slower
   <harmonic>                         1.3840+-0.0127            1.3737+-0.0068          might be 1.0075x faster

                                        TipOfTree                FixPolyCall                                    
Geomean of preferred means:
   <scaled-result>                   67.2149+-0.5190     ?     67.5088+-0.5563        ? might be 1.0044x slower
Comment 23 Filip Pizlo 2015-01-28 20:37:16 PST
Here's a run of all benchmarks on an older Mac Pro:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on oldmac (MacPro4,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r179242)
"FixPolyCall" at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/jsc (r179242)

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.

                                                        TipOfTree                FixPolyCall                                    
SunSpider:
   3d-cube                                            7.7431+-0.0613            7.6078+-0.1873          might be 1.0178x faster
   3d-morph                                           9.7134+-0.0904            9.6610+-0.1086        
   3d-raytrace                                        9.9838+-0.2051            9.8059+-0.1622          might be 1.0181x faster
   access-binary-trees                                3.1146+-0.0928            3.0540+-0.0779          might be 1.0199x faster
   access-fannkuch                                    9.9098+-0.1095     ?     10.1375+-0.3287        ? might be 1.0230x slower
   access-nbody                                       4.9222+-0.0513            4.9096+-0.0920        
   access-nsieve                                      5.5474+-0.1166     ?      5.5666+-0.1132        ?
   bitops-3bit-bits-in-byte                           2.0453+-0.0301     ?      2.0477+-0.0310        ?
   bitops-bits-in-byte                                6.9119+-0.1437            6.9077+-0.0892        
   bitops-bitwise-and                                 3.3750+-0.0152            3.3726+-0.0329        
   bitops-nsieve-bits                                 5.8400+-0.0423     ?      5.8576+-0.0461        ?
   controlflow-recursive                              3.1855+-0.0522     ?      3.2242+-0.0247        ? might be 1.0121x slower
   crypto-aes                                         6.3446+-0.2069     ?      6.3929+-0.0552        ?
   crypto-md5                                         3.9052+-0.0548            3.8197+-0.1498          might be 1.0224x faster
   crypto-sha1                                        3.8910+-0.0717            3.8712+-0.0837        
   date-format-tofte                                 13.7430+-0.2134     ?     13.9942+-0.3587        ? might be 1.0183x slower
   date-format-xparb                                  8.3760+-0.1299     ?      8.3846+-0.3068        ?
   math-cordic                                        4.9564+-0.0722            4.9110+-0.0909        
   math-partial-sums                                 10.5095+-0.2157     ?     10.6978+-0.2103        ? might be 1.0179x slower
   math-spectral-norm                                 3.2673+-0.0650     ?      3.2719+-0.0696        ?
   regexp-dna                                        12.0131+-0.2420     ?     12.0291+-0.1901        ?
   string-base64                                      6.5761+-0.0455     ?      6.5859+-0.0351        ?
   string-fasta                                      10.2776+-0.0762     ?     10.3318+-0.1295        ?
   string-tagcloud                                   15.4904+-0.2454           15.4272+-0.3401        
   string-unpack-code                                31.2062+-0.2590     !     32.4849+-0.5851        ! definitely 1.0410x slower
   string-validate-input                              7.4541+-0.0912            7.4288+-0.0370        

   <arithmetic> *                                     8.0886+-0.0263     ?      8.1455+-0.0311        ? might be 1.0070x slower
   <geometric>                                        6.7076+-0.0306     ?      6.7145+-0.0213        ? might be 1.0010x slower
   <harmonic>                                         5.6734+-0.0338            5.6643+-0.0244          might be 1.0016x faster

                                                        TipOfTree                FixPolyCall                                    
LongSpider:
   3d-cube                                         1374.4176+-12.7866        1370.0026+-20.9700       
   3d-morph                                        2282.9271+-3.5690     ?   2287.3702+-14.9360       ?
   3d-raytrace                                     1274.6424+-6.4620     ?   1286.4902+-30.3278       ?
   access-binary-trees                             1627.0184+-15.6320    ?   1628.7638+-8.9347        ?
   access-fannkuch                                  538.1798+-11.7588         530.0782+-13.5937         might be 1.0153x faster
   access-nbody                                    1232.4153+-4.0531         1229.9505+-1.4659        
   access-nsieve                                   1532.0018+-3.8758     ?   1545.9462+-38.5735       ?
   bitops-3bit-bits-in-byte                          57.0533+-0.2970     ?     57.2030+-0.3200        ?
   bitops-bits-in-byte                              392.4292+-6.1271          387.8375+-4.5169          might be 1.0118x faster
   bitops-nsieve-bits                              1148.3881+-6.4115         1144.3465+-4.8341        
   controlflow-recursive                            886.5205+-1.3441     ?    886.8161+-1.3665        ?
   crypto-aes                                      1095.0660+-1.9928     ?   1103.0529+-6.2945        ?
   crypto-md5                                       953.2603+-10.5879    ?    954.5077+-1.7423        ?
   crypto-sha1                                     1158.5999+-9.0525         1153.4832+-4.4243        
   date-format-tofte                               1209.8842+-14.9429    ?   1239.4604+-18.3103       ? might be 1.0244x slower
   date-format-xparb                               1236.8608+-45.0332        1222.9519+-72.6632         might be 1.0114x faster
   math-cordic                                      820.5909+-1.0322     ?    857.9649+-83.4131       ? might be 1.0455x slower
   math-partial-sums                               1311.3398+-3.1623         1309.8267+-3.6937        
   math-spectral-norm                              1304.6534+-13.3148        1299.4845+-1.7255        
   string-base64                                    570.6387+-4.4966     ?    571.2506+-2.1206        ?
   string-fasta                                     695.2519+-2.9267     ?    696.1490+-3.0236        ?
   string-tagcloud                                  362.1212+-1.9623     ?    366.1341+-6.3042        ? might be 1.0111x slower

   <arithmetic>                                    1048.3755+-3.2786     ?   1051.3214+-6.9806        ? might be 1.0028x slower
   <geometric> *                                    876.4548+-2.4190     ?    878.6154+-6.0346        ? might be 1.0025x slower
   <harmonic>                                       534.9611+-1.6363     ?    536.0557+-2.7610        ? might be 1.0020x slower

                                                        TipOfTree                FixPolyCall                                    
V8Spider:
   crypto                                            82.8378+-1.1365     ?     83.0167+-1.0180        ?
   deltablue                                        122.4006+-1.1134     ^     98.0278+-3.3151        ^ definitely 1.2486x faster
   earley-boyer                                      71.5969+-0.1246     !     72.3028+-0.5213        ! definitely 1.0099x slower
   raytrace                                          46.0900+-0.8624     ^     44.2883+-0.5730        ^ definitely 1.0407x faster
   regexp                                           115.8741+-0.8046     ?    116.6085+-1.0933        ?
   richards                                         114.4447+-2.9166     ^    104.0122+-1.2366        ^ definitely 1.1003x faster
   splay                                             56.2960+-1.7855           55.3670+-2.5617          might be 1.0168x faster

   <arithmetic>                                      87.0772+-0.3895     ^     81.9462+-0.6460        ^ definitely 1.0626x faster
   <geometric> *                                     82.0143+-0.4481     ^     77.9436+-0.6134        ^ definitely 1.0522x faster
   <harmonic>                                        76.8731+-0.5533     ^     73.7254+-0.6200        ^ definitely 1.0427x faster

                                                        TipOfTree                FixPolyCall                                    
Octane:
   encrypt                                           0.38660+-0.00506          0.38637+-0.00552       
   decrypt                                           6.94315+-0.21103          6.87493+-0.15471       
   deltablue                                x2       0.32203+-0.00685          0.32138+-0.00528       
   earley                                            1.22231+-0.00647    ?     1.24053+-0.01802       ? might be 1.0149x slower
   boyer                                            10.53766+-0.17992    ?    10.58220+-0.18963       ?
   navier-stokes                            x2       7.83037+-0.19437    ?     7.83939+-0.17682       ?
   raytrace                                 x2       2.27615+-0.03651          2.24910+-0.03183         might be 1.0120x faster
   richards                                 x2       0.20444+-0.00555          0.19952+-0.00054         might be 1.0247x faster
   splay                                    x2       0.62316+-0.00672          0.62252+-0.00845       
   regexp                                   x2      58.14070+-0.15416    ?    58.43748+-0.25022       ?
   pdfjs                                    x2      84.44214+-2.15521         84.25630+-0.81482       
   mandreel                                 x2      89.67196+-3.16487         88.35662+-0.29480         might be 1.0149x faster
   gbemu                                    x2      76.10458+-1.45601    !    78.57249+-0.83842       ! definitely 1.0324x slower
   closure                                           0.90053+-0.00420    !     0.90639+-0.00099       ! definitely 1.0065x slower
   jquery                                           11.68140+-0.30185    ?    11.80463+-0.10170       ? might be 1.0105x slower
   box2d                                    x2      23.08769+-0.21190    ?    23.40268+-0.62259       ? might be 1.0136x slower
   zlib                                     x2     778.19476+-43.33999   ?   792.58366+-6.54982       ? might be 1.0185x slower
   typescript                               x2    1303.17761+-55.44990      1286.68213+-18.10337        might be 1.0128x faster

   <arithmetic>                                    162.66076+-1.45877        162.62805+-1.61621         might be 1.0002x faster
   <geometric> *                                    11.72610+-0.04746    ?    11.73906+-0.04694       ? might be 1.0011x slower
   <harmonic>                                        1.18205+-0.01458          1.17076+-0.00571         might be 1.0096x faster

                                                        TipOfTree                FixPolyCall                                    
Kraken:
   ai-astar                                          528.180+-1.389      ?     529.118+-0.664         ?
   audio-beat-detection                              196.142+-4.532      ?     199.746+-3.955         ? might be 1.0184x slower
   audio-dft                                         253.224+-3.014      ?     256.755+-13.086        ? might be 1.0139x slower
   audio-fft                                         133.385+-1.527            132.329+-0.778         
   audio-oscillator                                  356.545+-0.796            356.356+-0.766         
   imaging-darkroom                                  287.724+-1.398      ?     288.111+-3.388         ?
   imaging-desaturate                                112.953+-0.234      ?     113.889+-2.939         ?
   imaging-gaussian-blur                             183.878+-0.628      ?     184.415+-3.481         ?
   json-parse-financial                               83.813+-2.139             82.414+-0.559           might be 1.0170x faster
   json-stringify-tinderbox                          100.826+-1.883      ?     102.970+-0.933         ? might be 1.0213x slower
   stanford-crypto-aes                               100.375+-3.731            100.196+-1.165         
   stanford-crypto-ccm                                93.216+-8.858      ?      94.284+-9.832         ? might be 1.0115x slower
   stanford-crypto-pbkdf2                            277.476+-6.572            276.994+-2.584         
   stanford-crypto-sha256-iterative                  107.448+-0.851      ?     108.038+-1.775         ?

   <arithmetic> *                                    201.085+-0.589      ?     201.830+-1.421         ? might be 1.0037x slower
   <geometric>                                       170.462+-1.410      ?     171.126+-1.667         ? might be 1.0039x slower
   <harmonic>                                        148.064+-2.254      ?     148.565+-2.110         ? might be 1.0034x slower

                                                        TipOfTree                FixPolyCall                                    
JSRegress:
   abs-boolean                                        4.3472+-0.0393     ?      4.4998+-0.2113        ? might be 1.0351x slower
   adapt-to-double-divide                            20.5409+-0.2379           20.4342+-0.3717        
   aliased-arguments-getbyval                         1.7630+-0.0400     ?      1.8052+-0.0254        ? might be 1.0239x slower
   allocate-big-object                                3.9596+-0.1061     ?      4.0835+-0.1058        ? might be 1.0313x slower
   arity-mismatch-inlining                            1.1994+-0.0255     ?      1.2054+-0.0348        ?
   array-access-polymorphic-structure                10.9436+-0.0574     ?     11.0904+-0.3211        ? might be 1.0134x slower
   array-nonarray-polymorhpic-access                 57.9485+-0.4345     ?     59.6107+-3.1039        ? might be 1.0287x slower
   array-prototype-every                            125.8075+-3.6432     !    146.7563+-1.6053        ! definitely 1.1665x slower
   array-prototype-forEach                          124.0273+-2.7556     !    142.4324+-1.6292        ! definitely 1.1484x slower
   array-prototype-map                              151.1400+-3.8483     !    173.7982+-0.9184        ! definitely 1.1499x slower
   array-prototype-some                             123.1647+-0.6726     !    145.2794+-1.5977        ! definitely 1.1796x slower
   array-splice-contiguous                           68.6637+-1.1688           68.1704+-0.5791        
   array-with-double-add                              6.4715+-0.1306     ?      6.5418+-0.1592        ? might be 1.0109x slower
   array-with-double-increment                        4.8363+-0.0642            4.8184+-0.0817        
   array-with-double-mul-add                          8.3795+-0.1971     ?      8.4421+-0.1210        ?
   array-with-double-sum                              5.1440+-0.0965            5.1290+-0.0471        
   array-with-int32-add-sub                          11.3419+-0.2369     ?     11.3944+-0.2377        ?
   array-with-int32-or-double-sum                     5.1804+-0.0523     ?      5.2124+-0.0604        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     57.4015+-1.5342     ?     59.3450+-2.3559        ? might be 1.0339x slower
   ArrayBuffer-DataView-alloc-long-lived             22.3796+-0.3986     !     24.2474+-0.6756        ! definitely 1.0835x slower
   ArrayBuffer-Int32Array-byteOffset                  5.6307+-0.0756     ?      5.6878+-0.0346        ? might be 1.0101x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     62.5754+-3.0025     ?     63.0499+-1.1020        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     37.8843+-0.8595     !     40.7436+-1.6740        ! definitely 1.0755x slower
   ArrayBuffer-Int8Array-alloc-long-lived            21.5275+-0.3219     !     23.0908+-0.6299        ! definitely 1.0726x slower
   ArrayBuffer-Int8Array-alloc                       18.6761+-0.3352     !     20.3300+-0.6417        ! definitely 1.0886x slower
   asmjs_bool_bug                                    10.2980+-0.2024     ?     10.4688+-0.2092        ? might be 1.0166x slower
   assign-custom-setter-polymorphic                   4.8110+-0.0185     ?      5.0101+-0.2941        ? might be 1.0414x slower
   assign-custom-setter                               6.7861+-0.2700            6.7684+-0.2407        
   basic-set                                         15.5647+-0.2726     ?     15.8498+-0.2689        ? might be 1.0183x slower
   big-int-mul                                        6.7995+-0.0484     ?      6.8053+-0.2036        ?
   boolean-test                                       5.0341+-0.0705            4.9993+-0.0559        
   branch-fold                                        5.4204+-0.0492     ?      5.4421+-0.0754        ?
   by-val-generic                                    12.7389+-0.3446           12.6557+-0.3160        
   call-spread-apply                                 20.8071+-0.2530     ?     21.0218+-0.3777        ? might be 1.0103x slower
   call-spread-call                                   8.9637+-0.1108            8.8973+-0.1781        
   captured-assignments                               0.6314+-0.0072     ?      0.6431+-0.0083        ? might be 1.0185x slower
   cast-int-to-double                                 9.4862+-0.1542     ?      9.6041+-0.1293        ? might be 1.0124x slower
   cell-argument                                     11.0897+-0.1723     ?     11.2362+-0.2438        ? might be 1.0132x slower
   cfg-simplify                                       4.3013+-0.0226     ?      4.3023+-0.0411        ?
   chain-getter-access                               13.8110+-0.1947     ?     13.9080+-0.2074        ?
   cmpeq-obj-to-obj-other                            13.8167+-0.2586     ?     14.0962+-0.3048        ? might be 1.0202x slower
   constant-test                                      9.0841+-0.1192            9.0122+-0.0486        
   DataView-custom-properties                        64.1408+-2.0208     !     70.2617+-1.4871        ! definitely 1.0954x slower
   delay-tear-off-arguments-strictmode                3.8832+-0.0462     ?      3.8944+-0.0488        ?
   destructuring-arguments                            9.1615+-0.0849            9.0510+-0.1593          might be 1.0122x faster
   destructuring-swap                                 9.2425+-0.0979            9.1685+-0.2009        
   direct-arguments-getbyval                          1.0373+-0.0142     ?      1.0507+-0.0146        ? might be 1.0129x slower
   div-boolean-double                                 6.5591+-0.0750     ?      6.5722+-0.0679        ?
   div-boolean                                       11.6874+-0.1388           11.6134+-0.1582        
   double-get-by-val-out-of-bounds                    6.7202+-0.1096     ?      6.8459+-0.1394        ? might be 1.0187x slower
   double-pollution-getbyval                         11.5002+-0.2181     ?     11.5086+-0.2034        ?
   double-pollution-putbyoffset                       6.2913+-0.1810     ?      6.3912+-0.1551        ? might be 1.0159x slower
   double-to-int32-typed-array-no-inline              3.2243+-0.0319     ?      3.2272+-0.0542        ?
   double-to-int32-typed-array                        2.8384+-0.0706            2.8046+-0.0627          might be 1.0121x faster
   double-to-uint32-typed-array-no-inline             3.3144+-0.0814     ?      3.3680+-0.1028        ? might be 1.0162x slower
   double-to-uint32-typed-array                       2.9898+-0.0698            2.9674+-0.0692        
   elidable-new-object-dag                           63.8998+-1.4894           63.3593+-0.6021        
   elidable-new-object-roflcopter                   244.1246+-1.6831          243.5238+-2.4515        
   elidable-new-object-then-call                     57.9811+-1.2739           57.6588+-0.5420        
   elidable-new-object-tree                          70.1278+-1.1543     ?     70.6317+-0.7282        ?
   empty-string-plus-int                              8.5554+-0.1358     !      8.8743+-0.1492        ! definitely 1.0373x slower
   emscripten-cube2hash                              53.7476+-0.8138           53.3005+-0.6383        
   external-arguments-getbyval                        2.1479+-0.0474     !      2.2213+-0.0242        ! definitely 1.0342x slower
   external-arguments-putbyval                        3.3895+-0.0204            3.2999+-0.0729          might be 1.0271x faster
   fixed-typed-array-storage-var-index                1.6397+-0.0389            1.6272+-0.0064        
   fixed-typed-array-storage                          1.2459+-0.0577            1.2301+-0.0267          might be 1.0128x faster
   Float32Array-matrix-mult                           6.7474+-0.0554     ?      6.9147+-0.3922        ? might be 1.0248x slower
   Float32Array-to-Float64Array-set                  92.5581+-0.5212     ^     89.9178+-1.4837        ^ definitely 1.0294x faster
   Float64Array-alloc-long-lived                    103.5635+-1.7044          101.9898+-1.1035          might be 1.0154x faster
   Float64Array-to-Int16Array-set                   112.2249+-0.7159     ?    112.3964+-1.2198        ?
   fold-double-to-int                                20.3447+-0.3990     ?     20.3851+-0.1462        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     24.5426+-0.1289     ^     12.3510+-0.2910        ^ definitely 1.9871x faster
   fold-get-by-id-to-multi-get-by-offset             23.2840+-0.4085     ^     11.0652+-0.2909        ^ definitely 2.1043x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     17.6646+-0.4747     ^     10.5139+-1.6353        ^ definitely 1.6801x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     17.8997+-0.4430     ^     10.7834+-0.6866        ^ definitely 1.6599x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     16.9428+-0.2338     ^      9.2050+-0.5001        ^ definitely 1.8406x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     15.8894+-0.1560     ^      7.5765+-0.5975        ^ definitely 2.0972x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     22.4945+-0.1286     ^     15.0210+-1.3938        ^ definitely 1.4975x faster
   fold-put-by-id-to-multi-put-by-offset             23.9040+-0.3779     ^     11.2602+-0.9230        ^ definitely 2.1229x faster
   fold-put-structure                                16.7803+-0.5084     ^      7.9063+-0.5863        ^ definitely 2.1224x faster
   for-of-iterate-array-entries                       8.6227+-0.3015     ?      8.6943+-0.2137        ?
   for-of-iterate-array-keys                          3.9689+-0.0991     ?      4.0623+-0.0984        ? might be 1.0235x slower
   for-of-iterate-array-values                        3.4840+-0.0826     ?      3.5066+-0.0872        ?
   fround                                            23.7209+-0.2487           23.6256+-0.2147        
   ftl-library-inlining-dataview                    106.3356+-2.7316     ?    107.2389+-5.3141        ?
   ftl-library-inlining                             128.4596+-17.4214    ?    142.9221+-0.2203        ? might be 1.1126x slower
   function-dot-apply                                 2.5901+-0.0447     ?      2.6113+-0.0366        ?
   function-test                                      5.4725+-0.1111            5.4388+-0.0920        
   function-with-eval                               181.7540+-0.5742          180.9929+-1.0972        
   gcse-poly-get-less-obvious                        29.1089+-0.4746     ?     29.6518+-0.3851        ? might be 1.0187x slower
   gcse-poly-get                                     29.7091+-0.1294     ?     29.9956+-0.7462        ?
   gcse                                               7.6549+-0.1188            7.5594+-0.1684          might be 1.0126x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.9093+-0.0436     ?      3.9123+-0.0865        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.8397+-0.2734     ?      9.8498+-0.1012        ?
   get-by-id-chain-from-try-block                    19.5870+-0.2454           19.4104+-0.1819        
   get-by-id-check-structure-elimination              8.9693+-0.1599            8.7669+-0.1783          might be 1.0231x faster
   get-by-id-proto-or-self                           25.8743+-2.4313           24.9679+-1.1596          might be 1.0363x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.6613+-0.0528            4.6513+-0.0755        
   get-by-id-self-or-proto                           25.4169+-0.7213           25.3053+-1.6580        
   get-by-val-out-of-bounds                           6.8379+-0.2359     ?      7.2094+-0.4222        ? might be 1.0543x slower
   get_callee_monomorphic                             5.8807+-0.1072     ?      5.9951+-0.1497        ? might be 1.0195x slower
   get_callee_polymorphic                             5.1165+-0.1087     ?      5.1418+-0.1249        ?
   getter-no-activation                               6.8623+-0.0480     ?      6.9453+-0.0607        ? might be 1.0121x slower
   getter-richards                                  163.6601+-8.7209          151.0332+-4.0713          might be 1.0836x faster
   getter                                             7.8403+-0.2371            7.6878+-0.1701          might be 1.0198x faster
   global-var-const-infer-fire-from-opt               1.3392+-0.0688     ?      1.3412+-0.1246        ?
   global-var-const-infer                             1.2929+-0.0472            1.2873+-0.0415        
   HashMap-put-get-iterate-keys                      40.9592+-0.4455     ?     41.0598+-0.3746        ?
   HashMap-put-get-iterate                           40.4697+-0.5826           40.3741+-0.5479        
   HashMap-string-put-get-iterate                    40.1143+-2.2264           39.8031+-0.3401        
   hoist-make-rope                                   14.0476+-1.0652           13.7897+-0.9542          might be 1.0187x faster
   hoist-poly-check-structure-effectful-loop   
                                                      8.0020+-0.1547     ?      8.0597+-0.1512        ?
   hoist-poly-check-structure                         5.7042+-0.0480            5.6742+-0.0667        
   imul-double-only                                  10.0771+-0.3462     ?     10.1142+-0.2501        ?
   imul-int-only                                     13.1656+-0.4187           12.8553+-0.5091          might be 1.0241x faster
   imul-mixed                                         9.6145+-0.5832     ?     10.1410+-0.5252        ? might be 1.0548x slower
   in-four-cases                                     28.6674+-0.1880     ?     28.7503+-0.0981        ?
   in-one-case-false                                 14.8816+-0.2234     ?     14.9885+-0.0829        ?
   in-one-case-true                                  14.8643+-0.0924     ?     14.9337+-0.2184        ?
   in-two-cases                                      15.5200+-0.1244     ?     15.6124+-0.1464        ?
   indexed-properties-in-objects                      4.3986+-0.0595     ?      4.3992+-0.0760        ?
   infer-closure-const-then-mov-no-inline             5.2253+-0.0231            5.1587+-0.1135          might be 1.0129x faster
   infer-closure-const-then-mov                      29.4488+-0.0474     ?     29.6029+-0.1386        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.6587+-0.1570     ?     17.7229+-0.3379        ?
   infer-closure-const-then-put-to-scope             35.8828+-0.5366           35.6579+-0.1111        
   infer-closure-const-then-reenter-no-inline   
                                                     81.0774+-0.1201     ?     81.1822+-0.1174        ?
   infer-closure-const-then-reenter                  34.6437+-0.2010           34.6389+-0.2467        
   infer-constant-global-property                     5.5492+-0.0221     ?      5.5999+-0.0556        ?
   infer-constant-property                            3.8892+-0.0567            3.8728+-0.0531        
   infer-one-time-closure-ten-vars                   16.7299+-0.1695     ?     16.8703+-0.1652        ?
   infer-one-time-closure-two-vars                   15.9514+-0.1502           15.7939+-0.2704        
   infer-one-time-closure                            15.7604+-0.3001     ?     15.9677+-0.0983        ? might be 1.0132x slower
   infer-one-time-deep-closure                       28.5570+-0.1734           28.4137+-0.1586        
   inline-arguments-access                            2.4738+-0.0322            2.4677+-0.0303        
   inline-arguments-aliased-access                    2.8352+-0.0075            2.8005+-0.0515          might be 1.0124x faster
   inline-arguments-local-escape                     21.8341+-0.2238     ?     22.1306+-0.1697        ? might be 1.0136x slower
   inline-get-scoped-var                              6.6786+-0.1361     ?      6.7233+-0.1456        ?
   inlined-put-by-id-transition                      18.4785+-0.2834           17.7625+-0.7768          might be 1.0403x faster
   int-or-other-abs-then-get-by-val                   8.1552+-0.1561            8.0565+-0.1175          might be 1.0122x faster
   int-or-other-abs-zero-then-get-by-val             30.6173+-0.2326     ?     30.8746+-0.5417        ?
   int-or-other-add-then-get-by-val                   6.9277+-0.1686     ?      7.0263+-0.1478        ? might be 1.0142x slower
   int-or-other-add                                   9.2705+-0.1454     ?      9.3211+-0.1128        ?
   int-or-other-div-then-get-by-val                   6.1370+-0.0738            6.1005+-0.1296        
   int-or-other-max-then-get-by-val                   7.4832+-0.1894     ?      7.5845+-0.2465        ? might be 1.0135x slower
   int-or-other-min-then-get-by-val                   6.2349+-0.0844     ?      6.2472+-0.0803        ?
   int-or-other-mod-then-get-by-val                   5.9661+-0.1549     ?      6.0859+-0.0502        ? might be 1.0201x slower
   int-or-other-mul-then-get-by-val                   5.9008+-0.1245     ?      5.9507+-0.1448        ?
   int-or-other-neg-then-get-by-val                   7.3807+-0.1597     ?      7.3897+-0.0870        ?
   int-or-other-neg-zero-then-get-by-val             30.9039+-0.7138           30.6108+-0.2211        
   int-or-other-sub-then-get-by-val                   6.9970+-0.0936            6.9847+-0.1019        
   int-or-other-sub                                   6.0735+-0.0513     ?      6.0960+-0.0730        ?
   int-overflow-local                                 6.8700+-0.0694            6.8273+-0.0728        
   Int16Array-alloc-long-lived                       73.7884+-1.5848           73.2537+-1.0115        
   Int16Array-bubble-sort-with-byteLength            43.7412+-0.0426           43.5420+-0.2596        
   Int16Array-bubble-sort                            43.2946+-1.9388           42.5194+-0.2127          might be 1.0182x faster
   Int16Array-load-int-mul                            2.2039+-0.0405     ?      2.2463+-0.0441        ? might be 1.0192x slower
   Int16Array-to-Int32Array-set                      82.6978+-1.3404     ?     83.6757+-1.5284        ? might be 1.0118x slower
   Int32Array-alloc-large                            42.6249+-0.9592     ?     42.6949+-1.7607        ?
   Int32Array-alloc-long-lived                       80.9175+-0.6305           80.7850+-1.0012        
   Int32Array-alloc                                   4.8780+-0.1095     ?      4.9430+-0.0605        ? might be 1.0133x slower
   Int32Array-Int8Array-view-alloc                   11.4331+-0.1068     !     12.2927+-0.2256        ! definitely 1.0752x slower
   int52-spill                                       10.0249+-0.0520     ?     10.1704+-0.2367        ? might be 1.0145x slower
   Int8Array-alloc-long-lived                        66.8451+-0.5106     ?     66.9681+-0.4506        ?
   Int8Array-load-with-byteLength                     5.6129+-0.0492            5.5898+-0.0597        
   Int8Array-load                                     5.5825+-0.0592     ?      5.6357+-0.0538        ?
   integer-divide                                    17.1477+-0.1326           17.0951+-0.0380        
   integer-modulo                                     3.0382+-0.0366            3.0072+-0.0538          might be 1.0103x faster
   large-int-captured                                13.1444+-0.0717           13.1287+-0.3447        
   large-int-neg                                     23.9643+-0.5267     ?     24.0327+-0.4878        ?
   large-int                                         21.8397+-0.2974           21.6537+-0.3080        
   logical-not                                        7.6494+-0.2964     ?      7.7212+-0.2477        ?
   lots-of-fields                                    18.3398+-0.2845     ?     18.3975+-0.2129        ?
   make-indexed-storage                               4.6823+-0.1155     ?      4.8034+-0.1243        ? might be 1.0259x slower
   make-rope-cse                                      6.2931+-0.1679     ?      6.4735+-0.4205        ? might be 1.0287x slower
   marsaglia-larger-ints                             64.3240+-0.5589     ?     64.4481+-0.7294        ?
   marsaglia-osr-entry                               31.3440+-0.7265     ?     31.4425+-0.3234        ?
   max-boolean                                        3.8555+-0.0499     ?      3.9737+-0.1993        ? might be 1.0307x slower
   method-on-number                                  28.7893+-0.8798           27.8940+-0.4873          might be 1.0321x faster
   min-boolean                                        3.8103+-0.0421     ?      3.8463+-0.0631        ?
   minus-boolean-double                               4.9498+-0.0390     ?      4.9578+-0.0369        ?
   minus-boolean                                      3.8210+-0.0893            3.8003+-0.0457        
   misc-strict-eq                                    60.2197+-11.8673          56.2010+-0.6960          might be 1.0715x faster
   mod-boolean-double                                13.8989+-0.1462     ?     13.9332+-0.1526        ?
   mod-boolean                                       10.5380+-0.1635           10.5100+-0.1500        
   mul-boolean-double                                 5.7339+-0.0518            5.7002+-0.1380        
   mul-boolean                                        4.1059+-0.0425     ?      4.1393+-0.0254        ?
   neg-boolean                                        5.0192+-0.0425     ?      5.0222+-0.0250        ?
   negative-zero-divide                               0.4617+-0.0074     ?      0.4659+-0.0039        ?
   negative-zero-modulo                               0.4643+-0.0054     ?      0.4665+-0.0027        ?
   negative-zero-negate                               0.4328+-0.0064     ?      0.4426+-0.0062        ? might be 1.0226x slower
   nested-function-parsing                           39.8116+-0.4351           38.6211+-0.8223          might be 1.0308x faster
   new-array-buffer-dead                              4.3975+-0.0998            4.3805+-0.1127        
   new-array-buffer-push                             10.8094+-0.2426           10.7107+-0.1853        
   new-array-dead                                    14.8610+-0.2176           14.6556+-0.2601          might be 1.0140x faster
   new-array-push                                     7.4779+-0.3515            7.3801+-0.2083          might be 1.0132x faster
   number-test                                        4.8671+-0.0346     ?      4.8938+-0.0445        ?
   object-closure-call                                8.9688+-0.1238     ?      8.9757+-0.1293        ?
   object-test                                        5.1766+-0.0615     ?      5.2937+-0.1052        ? might be 1.0226x slower
   obvious-sink-pathology-taken                     206.9022+-2.2729     ?    209.9453+-2.4941        ? might be 1.0147x slower
   obvious-sink-pathology                           195.8888+-2.0261     ?    199.4840+-3.5559        ? might be 1.0184x slower
   obviously-elidable-new-object                     51.5020+-1.1499     ?     51.9724+-1.3882        ?
   plus-boolean-arith                                 3.8365+-0.0418     ?      3.8530+-0.0613        ?
   plus-boolean-double                                4.9637+-0.0464     ?      5.0070+-0.0194        ?
   plus-boolean                                       3.7435+-0.0426            3.7375+-0.0523        
   poly-chain-access-different-prototypes-simple   
                                                      4.5566+-0.0557     ?      4.6199+-0.0381        ? might be 1.0139x slower
   poly-chain-access-different-prototypes             3.0354+-0.0914     ?      3.1280+-0.3025        ? might be 1.0305x slower
   poly-chain-access-simpler                          4.5218+-0.0745     ?      4.5529+-0.0696        ?
   poly-chain-access                                  2.9218+-0.0188     ?      3.1248+-0.3186        ? might be 1.0695x slower
   poly-stricteq                                     85.5696+-0.3393           85.5165+-0.2905        
   polymorphic-array-call                             2.3422+-0.0630     ?      2.3644+-0.0285        ?
   polymorphic-get-by-id                              4.9021+-0.0502     ?      4.9279+-0.0487        ?
   polymorphic-put-by-id                             45.0473+-3.6918     ?     45.3674+-1.4568        ?
   polymorphic-structure                             29.8420+-0.3768           29.7926+-0.2445        
   polyvariant-monomorphic-get-by-id                 12.9873+-0.3139     ?     13.0556+-0.3654        ?
   proto-getter-access                               14.0427+-0.3021           13.9965+-0.1277        
   put-by-id-replace-and-transition                  12.9687+-0.2833           12.9395+-0.2227        
   put-by-id-slightly-polymorphic                     4.1800+-0.0441            4.1602+-0.0488        
   put-by-id                                         21.0468+-0.4665     ?     21.2009+-0.4680        ?
   put-by-val-direct                                  0.8373+-0.0105            0.8325+-0.0050        
   put-by-val-large-index-blank-indexing-type   
                                                     10.0974+-0.2479            9.9545+-0.3082          might be 1.0143x faster
   put-by-val-machine-int                             4.3242+-0.1422            4.2310+-0.2150          might be 1.0220x faster
   rare-osr-exit-on-local                            21.9405+-0.1759           21.5299+-0.7719          might be 1.0191x faster
   register-pressure-from-osr                        32.2351+-0.3857           31.9899+-0.1414        
   setter                                             7.7150+-0.1643     ?      7.7475+-0.1924        ?
   simple-activation-demo                            39.2698+-0.1748     ?     39.2871+-0.1365        ?
   simple-getter-access                              19.9213+-0.2453           19.8409+-0.2640        
   simple-poly-call-nested                           22.5692+-0.2577     ^     11.3383+-0.1577        ^ definitely 1.9905x faster
   simple-poly-call                                   1.7791+-0.0100     ^      1.7402+-0.0216        ^ definitely 1.0223x faster
   sin-boolean                                       24.1276+-0.7492           23.5147+-0.4069          might be 1.0261x faster
   sinkable-new-object-dag                           95.9856+-2.3565           95.2555+-1.2453        
   sinkable-new-object-taken                         78.4886+-0.3070     ?     79.1586+-1.1438        ?
   sinkable-new-object                               55.0026+-1.0377     ?     56.1707+-3.2494        ? might be 1.0212x slower
   slow-array-profile-convergence                     4.3970+-0.1459            4.3807+-0.1248        
   slow-convergence                                   5.0880+-0.0537     ?      5.1067+-0.1050        ?
   sparse-conditional                                 1.7146+-0.0435     ?      1.7634+-0.1100        ? might be 1.0285x slower
   splice-to-remove                                  27.7640+-0.1504           27.5532+-0.4976        
   string-char-code-at                               23.5731+-0.1608     ?     23.6212+-0.1126        ?
   string-concat-object                               3.2631+-0.0924            3.2587+-0.0826        
   string-concat-pair-object                          3.1648+-0.1759            3.1549+-0.0331        
   string-concat-pair-simple                         18.2897+-0.4822     ?     18.3336+-0.3986        ?
   string-concat-simple                              18.6144+-0.4285     ?     18.8547+-0.4067        ? might be 1.0129x slower
   string-cons-repeat                                11.9548+-0.0524     ?     12.0766+-0.1155        ? might be 1.0102x slower
   string-cons-tower                                 11.0198+-0.0554     ?     11.1592+-0.1908        ? might be 1.0127x slower
   string-equality                                   26.7115+-0.5686           26.3701+-0.2054          might be 1.0129x faster
   string-get-by-val-big-char                        11.8064+-0.3169     !     12.5473+-0.2081        ! definitely 1.0628x slower
   string-get-by-val-out-of-bounds-insane             6.6931+-0.1303            6.6220+-0.1753          might be 1.0107x faster
   string-get-by-val-out-of-bounds                    8.0543+-0.3164            8.0090+-0.1869        
   string-get-by-val                                  5.6907+-0.0255            5.6717+-0.0440        
   string-hash                                        3.0720+-0.0644     ?      3.0821+-0.0601        ?
   string-long-ident-equality                        21.5580+-0.1906     ?     21.5872+-0.1910        ?
   string-repeat-arith                               49.2934+-0.5730     ?     49.3681+-0.6784        ?
   string-sub                                        95.5723+-0.9011     ?     97.4448+-1.4576        ? might be 1.0196x slower
   string-test                                        4.8590+-0.0745     ?      4.9137+-0.0458        ? might be 1.0113x slower
   string-var-equality                               52.4305+-0.4248     ?     52.4655+-0.4735        ?
   structure-hoist-over-transitions                   3.8220+-0.0421     ?      3.8468+-0.0939        ?
   substring-concat-weird                            62.7062+-0.3840     !     63.7391+-0.6251        ! definitely 1.0165x slower
   substring-concat                                  66.4360+-0.4295     ?     67.0146+-1.0875        ?
   substring                                         75.8142+-0.8509     ?     76.0374+-0.2187        ?
   switch-char-constant                               3.9180+-0.0691            3.9145+-0.0431        
   switch-char                                        9.3968+-0.1262            9.3870+-0.1186        
   switch-constant                                   16.3839+-1.6327           15.6190+-2.1479          might be 1.0490x faster
   switch-string-basic-big-var                       25.9536+-1.5609           25.1650+-1.9630          might be 1.0313x faster
   switch-string-basic-big                           25.7962+-1.1930     ?     26.3020+-3.1272        ? might be 1.0196x slower
   switch-string-basic-var                           34.5800+-1.6242     ?     35.1563+-1.9271        ? might be 1.0167x slower
   switch-string-basic                               27.5215+-0.6448     ?     27.7345+-0.3099        ?
   switch-string-big-length-tower-var                29.9933+-0.2222     ?     30.2907+-0.6778        ?
   switch-string-length-tower-var                    23.7891+-0.5660           23.7535+-0.8447        
   switch-string-length-tower                        17.0098+-0.0678     ?     17.0283+-0.1025        ?
   switch-string-short                               17.0376+-0.1609     ?     17.0702+-0.1649        ?
   switch                                            18.5686+-3.1825     ?     19.7286+-3.0320        ? might be 1.0625x slower
   tear-off-arguments-simple                          3.8773+-0.0498     ?      3.8960+-0.0337        ?
   tear-off-arguments                                 6.0628+-0.0909     ?      6.1207+-0.0403        ?
   temporal-structure                                20.6108+-0.5045           20.4831+-0.1218        
   to-int32-boolean                                  25.2767+-0.5445           24.8662+-0.4313          might be 1.0165x faster
   undefined-property-access                        558.3659+-0.7923     ?    559.8681+-0.9548        ?
   undefined-test                                     5.0676+-0.0650     ?      5.0821+-0.0391        ?
   unprofiled-licm                                   31.4823+-0.3637           31.1967+-0.5602        
   weird-inlining-const-prop                          3.0217+-0.0979            2.9689+-0.1542          might be 1.0178x faster

   <arithmetic>                                      26.7797+-0.0566     ?     26.8319+-0.0498        ? might be 1.0019x slower
   <geometric> *                                     12.3680+-0.0203     ^     12.1640+-0.0204        ^ definitely 1.0168x faster
   <harmonic>                                         6.0419+-0.0122     ^      6.0168+-0.0083        ^ definitely 1.0042x faster

                                                        TipOfTree                FixPolyCall                                    
AsmBench:
   bigfib.cpp                                       805.4345+-5.1748          799.2900+-4.2405        
   cray.c                                           794.8741+-3.0957     !    800.3571+-1.8107        ! definitely 1.0069x slower
   dry.c                                            787.4051+-13.0942         787.2689+-21.7158       
   FloatMM.c                                       1146.3075+-0.5622         1145.6097+-1.1621        
   gcc-loops.cpp                                   7033.9452+-10.0536    ?   7047.0699+-15.4229       ?
   n-body.c                                        2027.0303+-7.3026         2025.3682+-4.3534        
   Quicksort.c                                      702.5670+-2.1375     ?    702.7419+-5.7202        ?
   stepanov_container.cpp                          5813.1728+-69.0546        5782.6385+-15.3021       
   Towers.c                                         469.1574+-1.5392     !    474.9974+-2.9617        ! definitely 1.0124x slower

   <arithmetic>                                    2175.5438+-7.2932         2173.9268+-2.5388          might be 1.0007x faster
   <geometric> *                                   1358.7397+-2.0738     ?   1359.7553+-5.2654        ? might be 1.0007x slower
   <harmonic>                                       999.4826+-2.8460     ?   1002.0937+-5.4217        ? might be 1.0026x slower

                                                        TipOfTree                FixPolyCall                                    
CompressionBench:
   huffman                                          718.9412+-8.9648     ?    721.8475+-2.4491        ?
   arithmetic-simple                                687.3184+-2.3016     ?    687.4087+-2.5082        ?
   arithmetic-precise                               525.7948+-3.4266     ?    529.7552+-14.2001       ?
   arithmetic-complex-precise                       525.7145+-5.0058          523.1427+-1.8896        
   arithmetic-precise-order-0                       755.0008+-18.7412    ?    764.0262+-4.7342        ? might be 1.0120x slower
   arithmetic-precise-order-1                       559.7933+-2.9261     ?    563.4202+-5.2493        ?
   arithmetic-precise-order-2                       624.5126+-3.3595     ?    634.7485+-11.7355       ? might be 1.0164x slower
   arithmetic-simple-order-1                        706.9583+-2.7381     ?    712.5033+-12.2267       ?
   arithmetic-simple-order-2                        791.9235+-8.1264          789.9486+-4.8329        
   lz-string                                        526.4965+-7.3729     ?    542.0887+-12.9866       ? might be 1.0296x slower

   <arithmetic>                                     642.2454+-3.0335     ?    646.8889+-2.3550        ? might be 1.0072x slower
   <geometric> *                                    634.7794+-2.7807     ?    639.5922+-2.3510        ? might be 1.0076x slower
   <harmonic>                                       627.3571+-2.5601     !    632.3072+-2.3667        ! definitely 1.0079x slower

                                                        TipOfTree                FixPolyCall                                    
All benchmarks:
   <arithmetic>                                     164.2076+-0.1480     ?    164.4253+-0.3087        ? might be 1.0013x slower
   <geometric>                                       20.9061+-0.0260     ^     20.6579+-0.0291        ^ definitely 1.0120x faster
   <harmonic>                                         5.1949+-0.0213     ^      5.1647+-0.0061        ^ definitely 1.0058x faster

                                                        TipOfTree                FixPolyCall                                    
Geomean of preferred means:
   <scaled-result>                                  104.8656+-0.1221     ^    104.2773+-0.1201        ^ definitely 1.0056x faster
Comment 24 WebKit Commit Bot 2015-01-28 20:37:44 PST
Attachment 245606 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1705:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1871:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1873:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:168:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Use 'WTF::move()' instead of 'std::move()'.  [runtime/wtf_move] [4]
Total errors found: 8 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 25 Filip Pizlo 2015-01-28 20:38:14 PST
Here's a high-sample-count run of SunSpider on my Mac Pro.  Notice that this reports a slow-down where my MBP reported a speed-up.  I believe that the MBP is more representative, also the MBP's speed-up is larger than the Mac Pro's slow-down.


Benchmark report for SunSpider on oldmac (MacPro4,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r179242)
"FixPolyCall" at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/jsc (r179242)

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

3d-cube                         7.7170+-0.0340     ?      7.7181+-0.0326        ?
3d-morph                        9.7831+-0.0261            9.7388+-0.0354        
3d-raytrace                    10.0348+-0.0471            9.9964+-0.0382        
access-binary-trees             3.0732+-0.0189     ?      3.1182+-0.0287        ? might be 1.0146x slower
access-fannkuch                10.0455+-0.0322     ?     10.0678+-0.0339        ?
access-nbody                    4.9420+-0.0142     ?      4.9446+-0.0179        ?
access-nsieve                   5.5936+-0.0206     ?      5.6146+-0.0213        ?
bitops-3bit-bits-in-byte        2.0516+-0.0085     !      2.0834+-0.0221        ! definitely 1.0155x slower
bitops-bits-in-byte             6.9174+-0.0234     ?      6.9257+-0.0283        ?
bitops-bitwise-and              3.3669+-0.0034     ?      3.3755+-0.0090        ?
bitops-nsieve-bits              5.8508+-0.0123     ?      5.8626+-0.0150        ?
controlflow-recursive           3.2179+-0.0180     ?      3.2433+-0.0265        ?
crypto-aes                      6.3771+-0.0258     !      6.4364+-0.0283        ! definitely 1.0093x slower
crypto-md5                      3.8777+-0.0236     ?      3.9033+-0.0194        ?
crypto-sha1                     3.9060+-0.0268            3.8842+-0.0198        
date-format-tofte              13.8654+-0.0652     !     14.0650+-0.0663        ! definitely 1.0144x slower
date-format-xparb               8.4498+-0.0353     ^      8.2310+-0.0455        ^ definitely 1.0266x faster
math-cordic                     4.9779+-0.0240            4.9636+-0.0154        
math-partial-sums              10.5462+-0.0322     ?     10.5859+-0.0363        ?
math-spectral-norm              3.2844+-0.0135     ?      3.2957+-0.0113        ?
regexp-dna                     11.9974+-0.0444           11.9734+-0.0456        
string-base64                   6.5849+-0.0187     ?      6.6124+-0.0181        ?
string-fasta                   10.3796+-0.0540           10.3683+-0.0414        
string-tagcloud                15.4755+-0.0611           15.4274+-0.0524        
string-unpack-code             31.3835+-0.1273     !     32.3859+-0.1398        ! definitely 1.0319x slower
string-validate-input           7.4339+-0.0281     ?      7.4824+-0.0320        ?

<arithmetic> *                  8.1205+-0.0082     !      8.1655+-0.0083        ! definitely 1.0055x slower
<geometric>                     6.7273+-0.0053     !      6.7478+-0.0062        ! definitely 1.0030x slower
<harmonic>                      5.6840+-0.0052     !      5.7057+-0.0079        ! definitely 1.0038x slower
Comment 26 Filip Pizlo 2015-01-28 20:39:59 PST
Created attachment 245607 [details]
the patch

Fix style.
Comment 27 WebKit Commit Bot 2015-01-28 20:42:57 PST
Attachment 245607 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1705:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:168:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 5 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 28 Geoffrey Garen 2015-01-29 11:16:29 PST
Comment on attachment 245607 [details]
the patch

r=me

Do we know why we got a 2X speedup on those regress tests?
Comment 29 Filip Pizlo 2015-01-29 11:17:53 PST
(In reply to comment #28)
> Comment on attachment 245607 [details]
> the patch
> 
> r=me
> 
> Do we know why we got a 2X speedup on those regress tests?

Perfect storm: remove the overhead of call edge profiling and polymorphic calls in the first three tiers become faster thanks to inline caching.  Those are the only short-running (i.e. no FTL or less FTL) tests that hammer poly call.
Comment 30 Filip Pizlo 2015-01-29 12:31:40 PST
I'm not getting EWS bubbles.  I'll rageland and watch the bots.
Comment 31 Filip Pizlo 2015-01-29 12:35:07 PST
Landed in http://trac.webkit.org/changeset/179357
Comment 32 Alexey Proskuryakov 2015-01-29 17:12:13 PST
Several WebGL tests started to flakily fail around the time of this change. Can it be the culprit?

http://webkit-test-results.appspot.com/dashboards/flakiness_dashboard.html#showAllRuns=true&tests=webgl%2F1.0.2%2Fconformance%2Fglsl%2Ffunctions%2Fglsl-function-cos.html
Comment 33 WebKit Commit Bot 2015-01-29 17:26:23 PST
Re-opened since this is blocked by bug 141062
Comment 34 Andreas Kling 2015-01-29 17:30:25 PST
I'm rolling this out to see if it fixes the WebGL problem. Will roll back in if problem remains.
Comment 35 Alexey Proskuryakov 2015-01-30 09:50:29 PST
The issue no longer occurs, so it must have been this patch indeed.
Comment 36 Filip Pizlo 2015-01-30 15:23:42 PST
(In reply to comment #35)
> The issue no longer occurs, so it must have been this patch indeed.

To clarify, is it just these two tests: glsl-function-cos and glsl-function-sin?
Comment 37 Alexey Proskuryakov 2015-01-30 16:01:02 PST
Also this one:

webgl/1.0.2/conformance/glsl/functions/glsl-function-smoothstep-float.html
Comment 38 Filip Pizlo 2015-01-30 19:05:18 PST
I've confirmed that with the fix for https://bugs.webkit.org/show_bug.cgi?id=141107, this can be rolled back in without breaking the WebGL tests.
Comment 39 Alexey Proskuryakov 2015-01-30 19:29:56 PST
It's exciting that flakiness only seen in debug builds on a few seemingly unrelated tests has helped identify a real issue!
Comment 40 Filip Pizlo 2015-02-02 10:43:08 PST
Relanded in http://trac.webkit.org/changeset/179478
Comment 41 David Kilzer (:ddkilzer) 2015-02-06 09:45:28 PST
<rdar://problem/18777722>