Bug 144347 - Use the default hash value for Symbolized StringImpl
Summary: Use the default hash value for Symbolized StringImpl
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Yusuke Suzuki
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-04-28 12:40 PDT by Yusuke Suzuki
Modified: 2015-04-30 01:39 PDT (History)
6 users (show)

See Also:


Attachments
Patch (10.21 KB, patch)
2015-04-28 13:16 PDT, Yusuke Suzuki
no flags Details | Formatted Diff | Diff
Patch (10.29 KB, patch)
2015-04-28 13:17 PDT, Yusuke Suzuki
no flags Details | Formatted Diff | Diff
Patch (13.39 KB, patch)
2015-04-29 18:13 PDT, Yusuke Suzuki
no flags Details | Formatted Diff | Diff
Patch (13.72 KB, patch)
2015-04-30 01:32 PDT, Yusuke Suzuki
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Yusuke Suzuki 2015-04-28 12:40:06 PDT
Currently, symbolized StringImpl* has a special hash value to avoid the hash collision with the other normal StringImpl*. (Maybe it is introduced when private symbols are introduced)
However, it prevents using symbolized StringImpl* in the other place (such as using it as WTFString cause a problem because of its special hash value).

I think this situation leads a serious error easily.
To avoid this, I propose using the usual hash value in symbolized StringImpl*.
And if collision is a problem, I suggest introducing a special Hasher for PropertyTable.
Comment 1 Yusuke Suzuki 2015-04-28 13:04:16 PDT
https://bugs.webkit.org/show_bug.cgi?id=143947 is the example.
Comment 2 Yusuke Suzuki 2015-04-28 13:12:54 PDT
Symbolized StringImpl* will be exposed easily to the outside of JavaScriptCore.
https://bugs.webkit.org/show_bug.cgi?id=144310

When only using private symbols, they are not exposed to the outside of JSC, so we can handle it carefully.
But now, it's extended to symbols. So I think storing a special hash value in StringImpl* may cause an error.
Comment 3 Yusuke Suzuki 2015-04-28 13:16:13 PDT
Created attachment 251881 [details]
Patch
Comment 4 Yusuke Suzuki 2015-04-28 13:17:29 PDT
Created attachment 251882 [details]
Patch
Comment 5 Yusuke Suzuki 2015-04-28 13:18:26 PDT
I'll take performance results.
Comment 6 Yusuke Suzuki 2015-04-28 14:01:16 PDT
Performance results.
Environment: Linux gpgpu 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Build: gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 and FTL JIT support with LLVM 3.5

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, and JSRegress on gpgpu.

VMs tested:
"Conf#1" at /home/yusuke/dev/WebKit/WebKitBuild/master-now/Release/bin/jsc
"Conf#2" at /home/yusuke/dev/WebKit/WebKitBuild/hash/Release/bin/jsc

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

                                                          Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                           10.8254+-2.4659     ?     11.7123+-6.0484        ? might be 1.0819x slower
   3d-morph                                          19.5381+-5.4295           18.2028+-0.6494          might be 1.0734x faster
   3d-raytrace                                       10.3842+-3.5404            9.0161+-3.2748          might be 1.1517x faster
   access-binary-trees                                3.7852+-1.0418     ?      4.4332+-1.2862        ? might be 1.1712x slower
   access-fannkuch                                   13.1765+-5.3471     ?     13.7745+-2.6469        ? might be 1.0454x slower
   access-nbody                                       4.9164+-1.5810            3.8182+-2.4937          might be 1.2876x faster
   access-nsieve                                      4.2885+-1.1382     ?      4.4374+-0.3055        ? might be 1.0347x slower
   bitops-3bit-bits-in-byte                           2.4379+-1.0119     ?      2.7963+-0.0628        ? might be 1.1470x slower
   bitops-bits-in-byte                                6.0261+-1.0510            5.1448+-1.8487          might be 1.1713x faster
   bitops-bitwise-and                                 3.4565+-0.5784            2.9476+-0.6496          might be 1.1727x faster
   bitops-nsieve-bits                                 6.6641+-1.1693            6.3698+-2.6636          might be 1.0462x faster
   controlflow-recursive                              3.9388+-1.9022            3.6484+-1.8012          might be 1.0796x faster
   crypto-aes                                         6.3726+-2.9546            5.1721+-0.7736          might be 1.2321x faster
   crypto-md5                                         4.1027+-1.9984     ?      5.6243+-4.0062        ? might be 1.3709x slower
   crypto-sha1                                        5.6815+-1.3698            5.0410+-2.5660          might be 1.1271x faster
   date-format-tofte                                 12.3796+-1.9071     ?     12.4648+-0.8204        ?
   date-format-xparb                                  9.8073+-2.4388            9.3060+-2.3213          might be 1.0539x faster
   math-cordic                                        7.3904+-7.1849     ?      7.6371+-2.9978        ? might be 1.0334x slower
   math-partial-sums                                  9.5638+-0.5683            9.3669+-0.1506          might be 1.0210x faster
   math-spectral-norm                                 3.4571+-1.0800     ?      4.3911+-1.4788        ? might be 1.2702x slower
   regexp-dna                                         7.9608+-1.0212     ?      8.7021+-2.2133        ? might be 1.0931x slower
   string-base64                                      5.3263+-1.1631            5.3072+-1.0508        
   string-fasta                                      15.1943+-2.5712     ?     15.8781+-2.9955        ? might be 1.0450x slower
   string-tagcloud                                   12.7867+-1.6423     ?     13.2119+-1.9334        ? might be 1.0333x slower
   string-unpack-code                                22.1520+-2.1770     ?     25.6478+-3.6431        ? might be 1.1578x slower
   string-validate-input                              6.9492+-1.8775     ?      8.0026+-3.7680        ? might be 1.1516x slower

   <arithmetic>                                       8.4062+-0.5535     ?      8.5406+-0.1335        ? might be 1.0160x slower

                                                          Conf#1                    Conf#2                                      
LongSpider:
   3d-cube                                         1135.1188+-401.3362       1107.8880+-352.7064        might be 1.0246x faster
   3d-morph                                        2472.4249+-83.0941        2470.7923+-54.6012       
   3d-raytrace                                      902.2168+-12.3681         884.8100+-43.9159         might be 1.0197x faster
   access-binary-trees                             1226.2737+-39.5507    ?   1235.5732+-58.0490       ?
   access-fannkuch                                  337.5997+-19.7353    ?    339.2968+-19.7490       ?
   access-nbody                                     664.8257+-1.6835     ?    664.9699+-4.3456        ?
   access-nsieve                                    777.1040+-31.2766    ?    778.2971+-34.2985       ?
   bitops-3bit-bits-in-byte                          49.0257+-2.8563           47.7652+-2.5336          might be 1.0264x faster
   bitops-bits-in-byte                              106.0319+-7.5288          102.6042+-6.0766          might be 1.0334x faster
   bitops-nsieve-bits                               725.9573+-21.8123         714.1461+-4.2285          might be 1.0165x faster
   controlflow-recursive                            544.8796+-10.7156    ?    557.3976+-33.8284       ? might be 1.0230x slower
   crypto-aes                                       803.3660+-30.1519    ?    828.2032+-11.4441       ? might be 1.0309x slower
   crypto-md5                                       589.8820+-6.2368          580.9299+-15.3074         might be 1.0154x faster
   crypto-sha1                                      736.1122+-17.6236    ?    744.6405+-14.0336       ? might be 1.0116x slower
   date-format-tofte                                946.0867+-12.5303    ?    985.4258+-38.1655       ? might be 1.0416x slower
   date-format-xparb                                851.0077+-37.7924         827.9139+-41.8497         might be 1.0279x faster
   math-cordic                                      655.6744+-4.5034          653.9677+-6.5212        
   math-partial-sums                                965.1606+-12.0103         963.6317+-32.5221       
   math-spectral-norm                               904.1531+-8.6500     ?    915.5815+-44.4206       ? might be 1.0126x slower
   string-base64                                    418.0596+-25.7069         416.7816+-15.6232       
   string-fasta                                     562.4024+-7.8917     ?    592.7375+-46.4167       ? might be 1.0539x slower
   string-tagcloud                                  255.5815+-10.9282         249.7576+-9.1375          might be 1.0233x faster

   <geometric>                                      593.9756+-9.6961          593.8080+-11.4925         might be 1.0003x faster

                                                          Conf#1                    Conf#2                                      
V8Spider:
   crypto                                            72.4389+-11.1539    ?     75.9486+-13.2372       ? might be 1.0485x slower
   deltablue                                         90.9238+-7.2018     ?     93.6086+-6.8928        ? might be 1.0295x slower
   earley-boyer                                      53.5640+-13.9626    ?     56.8326+-15.5196       ? might be 1.0610x slower
   raytrace                                          59.6431+-3.2276     ?     60.1736+-3.7920        ?
   regexp                                            89.7052+-2.1700           88.6857+-3.1107          might be 1.0115x faster
   richards                                          79.8580+-3.8103     ?     83.8215+-6.9981        ? might be 1.0496x slower
   splay                                             47.2369+-8.6382           42.9767+-4.4559          might be 1.0991x faster

   <geometric>                                       68.4094+-4.5431     ?     69.2367+-2.5863        ? might be 1.0121x slower

                                                          Conf#1                    Conf#2                                      
Octane:
   encrypt                                           0.25787+-0.01092          0.25586+-0.01110       
   decrypt                                           4.52255+-0.12367          4.48942+-0.11230       
   deltablue                                x2       0.23771+-0.00525          0.23210+-0.00270         might be 1.0241x faster
   earley                                            0.67137+-0.01644          0.65911+-0.01883         might be 1.0186x faster
   boyer                                             7.89483+-0.04604          7.84774+-0.05381       
   navier-stokes                            x2       5.31151+-0.00627          5.30946+-0.00478       
   raytrace                                 x2       1.81972+-0.09440          1.73675+-0.12449         might be 1.0478x faster
   richards                                 x2       0.13252+-0.00400          0.13006+-0.00234         might be 1.0189x faster
   splay                                    x2       0.42781+-0.01105          0.42344+-0.01076         might be 1.0103x faster
   regexp                                   x2      35.39485+-0.44694         34.75065+-0.24096         might be 1.0185x faster
   pdfjs                                    x2      55.27059+-2.44426    ?    56.40297+-0.88683       ? might be 1.0205x slower
   mandreel                                 x2      58.37297+-3.94511         57.95012+-3.20927       
   gbemu                                    x2      49.64276+-1.97154         49.44999+-1.33233       
   closure                                           0.59846+-0.01450          0.58543+-0.01316         might be 1.0223x faster
   jquery                                            7.78636+-0.14673          7.71368+-0.13273       
   box2d                                    x2      14.82353+-0.30733         14.81106+-0.51163       
   zlib                                     x2     436.44700+-75.76121   ?   458.35118+-89.86162      ? might be 1.0502x slower
   typescript                               x2     909.95898+-21.22852   ?   917.50629+-36.64811      ?

   <geometric>                                       7.78066+-0.15418          7.73399+-0.09405         might be 1.0060x faster

                                                          Conf#1                    Conf#2                                      
JSRegress:
   string-get-by-val-big-char                        10.0123+-3.7814            9.6427+-3.0167          might be 1.0383x faster
   slow-convergence                                   3.7093+-0.1420            3.7072+-1.1409        
   int-or-other-abs-zero-then-get-by-val             24.4904+-2.6840           24.0676+-2.3320          might be 1.0176x faster
   switch-string-basic                               13.9622+-0.2095     ?     13.9918+-0.2317        ?
   integer-modulo                                     3.6038+-0.3082     ?      3.8670+-3.4551        ? might be 1.0730x slower
   fold-double-to-int                                14.8342+-0.4043           14.7422+-0.8157        
   adapt-to-double-divide                            16.6923+-0.9706           16.2102+-0.4806          might be 1.0297x faster
   tear-off-arguments                                 6.5182+-2.3143     ?      7.8701+-5.7687        ? might be 1.2074x slower
   polymorphic-get-by-id                              5.0021+-0.6458     ?      5.7903+-1.6108        ? might be 1.1576x slower
   inline-arguments-local-escape                      4.9738+-1.2502     ?      5.7253+-1.7504        ? might be 1.1511x slower
   int-or-other-sub                                   6.3460+-2.2901            6.0375+-0.8109          might be 1.0511x faster
   new-array-dead                                    17.9235+-3.1205           17.9098+-1.5450        
   rare-osr-exit-on-local                            16.9564+-1.6311     ?     18.9454+-3.3000        ? might be 1.1173x slower
   obvious-sink-pathology                           151.7368+-4.3178          148.1467+-9.3742          might be 1.0242x faster
   infer-one-time-closure                            11.6297+-0.4592     ?     11.6411+-0.4733        ?
   in-one-case-true                                  12.4252+-2.2857     ?     12.4998+-3.9137        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.9445+-1.8425           24.9326+-2.5256        
   infer-closure-const-then-reenter-no-inline   
                                                     68.4385+-4.4980     ?     69.2160+-4.1631        ? might be 1.0114x slower
   call-spread-apply                                 32.5504+-0.7748     ?     35.7793+-5.2815        ? might be 1.0992x slower
   destructuring-arguments                           22.1640+-2.9316           19.2153+-1.1314          might be 1.1535x faster
   string-concat-object                               3.0995+-0.7862     ?      3.2502+-0.4511        ? might be 1.0486x slower
   arguments-named-and-reflective                    12.0809+-0.4104     ?     12.8635+-0.4399        ? might be 1.0648x slower
   singleton-scope                                   77.2955+-5.8711           74.4305+-1.8040          might be 1.0385x faster
   sparse-conditional                                 1.8293+-0.4050     ?      2.6237+-2.8024        ? might be 1.4343x slower
   splice-to-remove                                  21.4016+-2.3671           21.3939+-3.6026        
   assign-custom-setter                               6.3152+-1.6664            5.5068+-0.2124          might be 1.1468x faster
   slow-array-profile-convergence                     3.9465+-0.5439     ?      4.1327+-0.4531        ? might be 1.0472x slower
   proto-getter-access                               11.2845+-1.7394           10.5978+-0.9654          might be 1.0648x faster
   direct-arguments-getbyval                          2.5747+-0.5217            2.3489+-0.5870          might be 1.0961x faster
   fold-put-by-id-to-multi-put-by-offset              8.1279+-2.4625     ?      8.5132+-0.6299        ? might be 1.0474x slower
   to-int32-boolean                                  17.2626+-1.0689     ?     17.2982+-0.7141        ?
   Float32Array-matrix-mult                           5.5943+-0.8494            5.4180+-0.9901          might be 1.0325x faster
   register-pressure-from-osr                        22.2907+-0.5530     ?     22.4512+-0.6168        ?
   new-array-buffer-dead                            127.7069+-11.9770    ?    129.6444+-12.8663       ? might be 1.0152x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     14.6177+-0.9171           14.4418+-0.4797          might be 1.0122x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     45.9841+-3.3449           45.2566+-4.4198          might be 1.0161x faster
   double-to-int32-typed-array-no-inline              3.6008+-2.0418     ?      3.7847+-1.4296        ? might be 1.0511x slower
   getter-richards                                  128.3786+-16.3229         124.1652+-21.6705         might be 1.0339x faster
   new-array-push                                     7.4025+-3.7787            5.3097+-0.5715          might be 1.3942x faster
   infer-closure-const-then-put-to-scope             24.7446+-2.4740           24.2595+-1.0390          might be 1.0200x faster
   array-splice-contiguous                           74.0030+-32.8948          62.2098+-0.8927          might be 1.1896x faster
   ftl-library-inlining-dataview                     66.1825+-4.2854     ?     66.7470+-3.6074        ?
   indexed-properties-in-objects                      4.1967+-0.3182     ?      4.7698+-1.5782        ? might be 1.1366x slower
   div-boolean-double                                 7.3907+-1.0028            7.2662+-1.8451          might be 1.0171x faster
   int-or-other-neg-then-get-by-val                   7.8069+-2.2947            6.5881+-1.0011          might be 1.1850x faster
   poly-stricteq                                     62.6867+-0.2339     ?     63.0148+-2.9960        ?
   polymorphic-put-by-id                             33.3424+-3.8955           31.6673+-2.8603          might be 1.0529x faster
   try-catch-get-by-val-cloned-arguments             14.8553+-0.3950           14.7628+-0.0984        
   polymorphic-array-call                             1.3763+-0.2177     ?      1.7275+-0.7293        ? might be 1.2552x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.8960+-1.0601     ?      8.9382+-2.7510        ? might be 1.1320x slower
   in-two-cases                                      13.7100+-2.9240           13.4868+-3.4188          might be 1.0165x faster
   array-access-polymorphic-structure                 7.1989+-0.6832     ?      7.2475+-1.7831        ?
   varargs-call                                      16.9420+-1.0768           16.2153+-0.2539          might be 1.0448x faster
   poly-chain-access                                  4.3790+-2.1945            4.3730+-2.7040        
   get_callee_polymorphic                             7.3053+-1.3018     ?      7.5381+-0.9473        ? might be 1.0319x slower
   cmpeq-obj-to-obj-other                            12.4767+-2.3487           11.4251+-1.8772          might be 1.0920x faster
   cast-int-to-double                                 8.0157+-1.5455            7.0244+-0.6700          might be 1.1411x faster
   polyvariant-monomorphic-get-by-id                  9.7142+-0.5725     ?     10.3907+-1.4516        ? might be 1.0696x slower
   global-var-const-infer-fire-from-opt               2.2181+-1.4123     ?      2.6036+-0.6439        ? might be 1.1738x slower
   array-prototype-some                              90.9825+-3.4103     ?     91.2317+-1.2344        ?
   basic-set                                         10.7706+-0.6678     ?     11.3080+-1.3281        ? might be 1.0499x slower
   switch-string-basic-var                           15.6143+-0.6143           15.4713+-0.2688        
   assign-custom-setter-polymorphic                   4.5345+-1.9925            3.6970+-0.8460          might be 1.2265x faster
   put-by-val-direct                                  0.5635+-0.2429     ?      0.8851+-1.0212        ? might be 1.5706x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     40.9539+-2.3770     ?     43.0403+-3.5131        ? might be 1.0509x slower
   simple-activation-demo                            28.4526+-1.6349           27.8602+-0.9053          might be 1.0213x faster
   string-concat-pair-simple                         13.6776+-0.5606           13.5467+-0.2463        
   get-by-val-out-of-bounds                           6.7729+-1.4565            6.0074+-0.7525          might be 1.1274x faster
   switch-string-length-tower-var                    16.8408+-0.3488     ?     17.4627+-2.8929        ? might be 1.0369x slower
   captured-assignments                               0.5568+-0.1245            0.5259+-0.1784          might be 1.0588x faster
   string-var-equality                               31.6436+-0.2274     ?     31.8691+-0.5291        ?
   int-or-other-mod-then-get-by-val                   6.7980+-0.4842            6.2583+-1.8937          might be 1.0862x faster
   Int32Array-alloc-large                            28.9376+-1.0102           28.1428+-0.5438          might be 1.0282x faster
   sin-boolean                                       13.8555+-1.1694     ?     14.4462+-1.4882        ? might be 1.0426x slower
   string-concat-simple                              14.3633+-0.8823     ?     14.8975+-1.3716        ? might be 1.0372x slower
   getter-no-activation                               7.6753+-1.8703            6.4285+-1.6041          might be 1.1940x faster
   try-catch-get-by-val-direct-arguments              7.2353+-1.0803     ?      7.6981+-1.3908        ? might be 1.0640x slower
   infer-constant-property                            3.9095+-0.8721     ?      4.8893+-1.2979        ? might be 1.2506x slower
   div-boolean                                       10.1885+-1.3937            9.4612+-2.0294          might be 1.0769x faster
   large-int                                         16.2263+-1.4226     ?     16.5551+-1.8795        ? might be 1.0203x slower
   external-arguments-putbyval                        4.4277+-0.2732            4.3462+-1.2668          might be 1.0188x faster
   max-boolean                                        5.2047+-3.8504            4.5876+-2.3421          might be 1.1345x faster
   get-by-id-proto-or-self                           19.1124+-3.4178           17.8025+-2.4161          might be 1.0736x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                     11.3619+-1.8833            8.9904+-2.4345          might be 1.2638x faster
   string-equality                                   20.6469+-2.0973           19.7565+-3.1377          might be 1.0451x faster
   getter                                             7.7668+-2.3166     ?      9.2479+-3.6220        ? might be 1.1907x slower
   Int32Array-Int8Array-view-alloc                    7.4377+-1.0148     ?      7.5755+-1.5060        ? might be 1.0185x slower
   substring-concat                                  55.2321+-2.9124           54.4064+-2.2026          might be 1.0152x faster
   integer-divide                                    12.9094+-0.3078           12.4515+-0.6884          might be 1.0368x faster
   object-closure-call                                8.8438+-2.3077     ?      8.8470+-1.8137        ?
   sinkable-new-object-dag                           69.9973+-0.8375     ?     71.1848+-3.4822        ? might be 1.0170x slower
   string-char-code-at                               19.8348+-5.0711           18.4845+-1.2935          might be 1.0731x faster
   double-to-uint32-typed-array-no-inline             4.1358+-1.8357            3.9308+-1.2514          might be 1.0522x faster
   Int16Array-bubble-sort                            23.0998+-1.0757     ?     23.7037+-1.7685        ? might be 1.0261x slower
   switch-char                                       10.7455+-7.9458            7.0715+-1.0359          might be 1.5195x faster
   switch-char-constant                               4.6046+-1.5127            4.4360+-1.9663          might be 1.0380x faster
   infer-one-time-closure-two-vars                   11.8833+-1.3076           11.4238+-0.3141          might be 1.0402x faster
   object-test                                        6.9047+-6.2158            5.6442+-1.8492          might be 1.2233x faster
   external-arguments-getbyval                        2.8580+-2.1614            2.2838+-0.7213          might be 1.2515x faster
   plus-boolean                                       4.4884+-1.2177            3.9750+-1.8892          might be 1.1292x faster
   Int16Array-alloc-long-lived                       62.6379+-2.5160           60.5887+-8.4117          might be 1.0338x faster
   fold-get-by-id-to-multi-get-by-offset              9.3251+-0.6918     ?      9.3511+-1.8012        ?
   infer-one-time-deep-closure                       20.6602+-1.0605     ?     20.7191+-0.9342        ?
   new-array-buffer-push                              8.4846+-1.1310            8.2607+-0.8373          might be 1.0271x faster
   aliased-arguments-getbyval                         2.4310+-0.8891            1.9408+-0.6884          might be 1.2526x faster
   by-val-generic                                    10.8367+-1.0192     ?     11.1973+-1.2578        ? might be 1.0333x slower
   ArrayBuffer-Int8Array-alloc-long-lived            14.7079+-0.5304           14.6252+-0.2368        
   exit-length-on-plain-object                       15.6395+-2.0439     ?     16.3470+-2.7545        ? might be 1.0452x slower
   Int32Array-alloc                                   4.2083+-0.3811     ?      4.4813+-0.5921        ? might be 1.0649x slower
   weird-inlining-const-prop                          4.0301+-2.1118            3.7125+-2.1264          might be 1.0856x faster
   DataView-custom-properties                        45.9855+-2.5033     ?     49.5925+-3.8299        ? might be 1.0784x slower
   HashMap-string-put-get-iterate                    30.4376+-0.9394           30.3632+-2.3884        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      4.9512+-2.3554            4.6965+-1.1820          might be 1.0542x faster
   temporal-structure                                18.4574+-3.6005           17.7675+-3.1942          might be 1.0388x faster
   for-of-iterate-array-values                        5.9404+-1.7748     ?      6.7994+-4.6250        ? might be 1.1446x slower
   varargs-construct                                 36.0406+-1.4078     ?     38.8675+-4.9395        ? might be 1.0784x slower
   double-to-uint32-typed-array                       3.2540+-0.6763     ?      4.2305+-4.0292        ? might be 1.3001x slower
   int-or-other-mul-then-get-by-val                   6.0574+-0.5337            5.7870+-0.2511          might be 1.0467x faster
   put-by-val-machine-int                             5.9641+-4.5318            5.5364+-3.4462          might be 1.0772x faster
   lots-of-fields                                    12.5917+-0.3084           12.4344+-0.0591          might be 1.0126x faster
   infer-closure-const-then-mov-no-inline             5.1382+-0.7911     ?      5.3090+-1.3969        ? might be 1.0332x slower
   arguments                                          9.7153+-0.9614            9.5689+-0.5486          might be 1.0153x faster
   negative-zero-divide                               0.5938+-0.6648            0.4821+-0.1527          might be 1.2315x faster
   big-int-mul                                        5.5357+-1.8041     ?      6.5490+-0.5117        ? might be 1.1830x slower
   try-catch-get-by-val-scoped-arguments              8.4387+-0.9878     ?      8.8387+-1.6541        ? might be 1.0474x slower
   setter                                             7.6743+-2.6421     ?      9.3262+-4.0106        ? might be 1.2153x slower
   neg-boolean                                        4.5881+-0.4779     ?      4.9849+-1.3680        ? might be 1.0865x slower
   poly-chain-access-simpler                          5.1297+-1.0921     ?      5.3068+-1.6460        ? might be 1.0345x slower
   put-by-id-slightly-polymorphic                     6.5063+-3.7205            4.3469+-1.4602          might be 1.4968x faster
   arguments-out-of-bounds                           15.1171+-1.5433           14.9788+-0.7357        
   sink-function                                     12.8705+-2.4462           12.0745+-2.0333          might be 1.0659x faster
   marsaglia-larger-ints                             44.9684+-1.3322     ?     46.1418+-1.3261        ? might be 1.0261x slower
   undefined-test                                     4.7915+-1.3908            4.7082+-1.1911          might be 1.0177x faster
   imul-mixed                                         8.1483+-1.6819            7.9866+-1.5817          might be 1.0203x faster
   global-var-const-infer                             0.8057+-0.1995     ?      1.3306+-0.9800        ? might be 1.6515x slower
   asmjs_bool_bug                                     8.5132+-0.7886     ?      8.9942+-0.9872        ? might be 1.0565x slower
   double-pollution-putbyoffset                       7.0374+-0.4933     ?      7.4243+-2.7788        ? might be 1.0550x slower
   cell-argument                                      9.2683+-0.8296            8.7949+-1.5998          might be 1.0538x faster
   int-or-other-add                                   6.8010+-1.4318     ?      7.4355+-2.2094        ? might be 1.0933x slower
   plus-boolean-arith                                 3.9899+-1.9426     ?      4.5690+-1.8277        ? might be 1.1451x slower
   ArrayBuffer-Int32Array-byteOffset                  5.8780+-0.6054            5.4756+-1.2875          might be 1.0735x faster
   mod-boolean                                       12.3259+-6.2556            9.7635+-1.9284          might be 1.2624x faster
   infer-closure-const-then-mov                      19.2447+-5.2516     ?     19.6704+-5.3264        ? might be 1.0221x slower
   large-int-neg                                     17.6886+-1.7269           16.7061+-0.2372          might be 1.0588x faster
   fround                                            17.5280+-2.7648           16.7369+-0.6335          might be 1.0473x faster
   elidable-new-object-dag                           50.1734+-7.4707     ?     55.3383+-5.8410        ? might be 1.1029x slower
   make-indexed-storage                               6.0365+-4.0247            4.3123+-0.4602          might be 1.3998x faster
   int-or-other-add-then-get-by-val                   7.5745+-1.9843     ?      8.4175+-1.0473        ? might be 1.1113x slower
   string-cons-repeat                                 9.1346+-1.5808            8.2079+-0.2123          might be 1.1129x faster
   logical-not                                        6.9614+-2.3194     ?      7.4252+-1.3600        ? might be 1.0666x slower
   poly-chain-access-different-prototypes-simple   
                                                      5.3312+-2.7026     ?      6.2233+-2.1075        ? might be 1.1673x slower
   fixed-typed-array-storage-var-index                2.1017+-1.1476     ?      2.9379+-2.0830        ? might be 1.3979x slower
   function-test                                      5.3963+-1.8130            4.4707+-1.0032          might be 1.2070x faster
   string-cons-tower                                  8.5107+-1.0531            8.2832+-0.2444          might be 1.0275x faster
   destructuring-swap                                 6.5430+-1.4484     ?      6.6147+-1.8739        ? might be 1.0110x slower
   int-or-other-max-then-get-by-val                   6.4363+-0.6199            6.2063+-0.3464          might be 1.0371x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.9392+-3.7853     ?      8.5166+-2.9534        ? might be 1.0727x slower
   method-on-number                                  20.8337+-3.4054     ?     22.4959+-3.6730        ? might be 1.0798x slower
   put-by-id-replace-and-transition                  11.1171+-1.7106     ?     11.6479+-1.5414        ? might be 1.0478x slower
   int-or-other-neg-zero-then-get-by-val             23.6283+-1.1209     ?     24.0034+-2.8532        ? might be 1.0159x slower
   varargs-strict-mode                               12.7725+-1.1396           11.8465+-0.4277          might be 1.0782x faster
   string-get-by-val-out-of-bounds-insane             4.6440+-1.3219     ?      4.7902+-0.7886        ? might be 1.0315x slower
   imul-double-only                                   9.8470+-2.4977            9.1516+-1.4020          might be 1.0760x faster
   for-of-iterate-array-keys                          5.9719+-2.2761            5.6260+-0.2559          might be 1.0615x faster
   string-get-by-val                                  6.1011+-1.2349            5.1964+-0.6968          might be 1.1741x faster
   nested-function-parsing                           44.6728+-3.3878     ?     50.3232+-3.1720        ? might be 1.1265x slower
   string-repeat-arith                               31.5717+-0.5701     ?     33.5820+-2.6358        ? might be 1.0637x slower
   inline-arguments-aliased-access                    6.2242+-0.5172     ?      8.0341+-3.4785        ? might be 1.2908x slower
   allocate-big-object                                4.3032+-0.6090     ?      4.9307+-1.9067        ? might be 1.1458x slower
   elidable-new-object-tree                          50.5819+-3.9231     ?     53.2800+-2.3548        ? might be 1.0533x slower
   ArrayBuffer-Int8Array-alloc                       11.7694+-0.1373     ?     12.2140+-0.8003        ? might be 1.0378x slower
   int52-spill                                        9.7298+-0.9946            9.3302+-1.3363          might be 1.0428x faster
   no-inline-constructor                            149.6614+-3.8170     ?    153.0510+-10.5393       ? might be 1.0226x slower
   hoist-make-rope                                   10.7197+-1.5959     ?     11.2526+-2.0936        ? might be 1.0497x slower
   arguments-strict-mode                             10.8834+-0.3227     ?     14.2999+-5.6850        ? might be 1.3139x slower
   function-with-eval                               113.9555+-6.5504     ?    118.9270+-9.7702        ? might be 1.0436x slower
   ArrayBuffer-DataView-alloc-long-lived             16.9897+-0.7938     ?     17.4376+-1.6771        ? might be 1.0264x slower
   simple-poly-call-nested                            9.3088+-3.0608            9.2750+-2.7964        
   switch-string-big-length-tower-var                20.8284+-0.4456           20.7349+-0.3844        
   number-test                                        4.9267+-1.5872     ?      5.1355+-1.3184        ? might be 1.0424x slower
   Int16Array-load-int-mul                            2.6963+-0.4483            2.6203+-0.7202          might be 1.0290x faster
   put-by-id                                         15.1529+-1.7855     ?     15.4235+-2.5528        ? might be 1.0179x slower
   imul-int-only                                      9.6795+-0.6247     ?      9.7985+-0.8537        ? might be 1.0123x slower
   gcse                                               6.6402+-1.3570     ?      7.3182+-3.0237        ? might be 1.1021x slower
   create-lots-of-functions                          14.4025+-3.0303           13.7491+-1.5674          might be 1.0475x faster
   in-four-cases                                     23.1517+-3.0672     ?     23.5092+-2.5362        ? might be 1.0154x slower
   elidable-new-object-then-call                     47.0732+-3.5077           40.8645+-5.9963          might be 1.1519x faster
   int-or-other-sub-then-get-by-val                   8.7486+-1.0837            7.3516+-1.2915          might be 1.1900x faster
   mul-boolean-double                                 5.6190+-1.4815     ?      5.6877+-4.0285        ? might be 1.0122x slower
   mod-boolean-double                                12.0322+-3.3507           10.6061+-1.5174          might be 1.1345x faster
   inline-arguments-access                            6.3955+-0.4496            5.8270+-1.1719          might be 1.0976x faster
   substring-concat-weird                            50.9726+-3.4413           50.9293+-3.5669        
   varargs-construct-inline                          26.5798+-4.8415           25.2235+-1.3243          might be 1.0538x faster
   HashMap-put-get-iterate                           32.7576+-4.8100     ?     36.3287+-1.2976        ? might be 1.1090x slower
   string-long-ident-equality                        16.5391+-0.7418     ?     17.2210+-2.6414        ? might be 1.0412x slower
   mul-boolean                                        4.5186+-1.8134            4.2343+-1.8762          might be 1.0671x faster
   get-by-id-check-structure-elimination              7.3992+-2.2856     ?      7.6732+-0.4040        ? might be 1.0370x slower
   marsaglia-osr-entry                               24.1359+-0.6297     ^     23.0612+-0.2169        ^ definitely 1.0466x faster
   Float64Array-alloc-long-lived                     85.8370+-7.0135           82.5596+-10.5924         might be 1.0397x faster
   misc-strict-eq                                    40.0953+-6.6067           37.4893+-3.5566          might be 1.0695x faster
   make-rope-cse                                      5.1887+-0.7294            5.1190+-1.1839          might be 1.0136x faster
   array-with-double-sum                              4.9920+-1.4617     ?      5.4297+-2.1966        ? might be 1.0877x slower
   substring                                         64.3974+-3.4383           63.1106+-4.1937          might be 1.0204x faster
   array-with-double-increment                        5.0521+-0.9733     ?      5.4753+-1.2328        ? might be 1.0838x slower
   for-of-iterate-array-entries                       6.4282+-2.0561     ?      7.0788+-2.5836        ? might be 1.1012x slower
   array-nonarray-polymorhpic-access                 40.6392+-2.5936     ?     41.0966+-3.6198        ? might be 1.0113x slower
   varargs                                           12.6362+-1.2153           12.4716+-1.6134          might be 1.0132x faster
   string-out-of-bounds                              15.0640+-1.1645     ?     15.4049+-1.4120        ? might be 1.0226x slower
   inlined-put-by-id-transition                      12.3654+-2.2519     ?     14.0073+-1.2688        ? might be 1.1328x slower
   minus-boolean-double                               4.3947+-1.2886     ?      5.1422+-4.6183        ? might be 1.1701x slower
   delay-tear-off-arguments-strictmode               16.0214+-3.1719           14.8770+-1.7824          might be 1.0769x faster
   array-prototype-every                             90.0176+-2.4441     ?     92.2332+-2.6183        ? might be 1.0246x slower
   chain-getter-access                               11.3752+-1.3613     ?     11.5732+-2.1912        ? might be 1.0174x slower
   int-or-other-min-then-get-by-val                   6.3177+-1.6076     ?      6.3389+-1.6239        ?
   HashMap-put-get-iterate-keys                      32.2938+-5.4710     ?     32.3086+-3.5108        ?
   double-pollution-getbyval                         10.6863+-2.0688           10.4269+-2.0280          might be 1.0249x faster
   structure-hoist-over-transitions                   4.0671+-1.9228            4.0010+-0.7333          might be 1.0165x faster
   polymorphic-structure                             20.9915+-0.8800     ?     21.0001+-1.0054        ?
   sorting-benchmark                                 25.2408+-0.8813     ?     26.4547+-2.0061        ? might be 1.0481x slower
   fixed-typed-array-storage                          2.2255+-1.8625            1.4113+-0.3476          might be 1.5769x faster
   switch-string-length-tower                        13.6861+-0.2405     ?     13.7854+-0.3978        ?
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.9995+-3.9015            7.9950+-1.3202          might be 1.2507x faster
   Int8Array-load-with-byteLength                     4.9118+-1.5988     ?      6.1862+-1.7106        ? might be 1.2595x slower
   Float64Array-to-Int16Array-set                    70.3493+-0.4995     !    104.0988+-8.5596        ! definitely 1.4797x slower
   infer-constant-global-property                   338.9415+-7.7086          333.0898+-0.3534          might be 1.0176x faster
   int-overflow-local                                 7.4562+-1.4418            6.7472+-1.5534          might be 1.1051x faster
   min-boolean                                        6.6184+-3.3520            4.0517+-1.2713          might be 1.6335x faster
   simple-getter-access                              14.4658+-0.9779           13.7530+-1.0260          might be 1.0518x faster
   string-hash                                        3.2152+-0.5412     ?      3.2823+-2.0353        ? might be 1.0209x slower
   arity-mismatch-inlining                            1.3476+-0.3602     ?      1.7125+-1.2836        ? might be 1.2708x slower
   obviously-elidable-new-object                     35.7537+-1.5504     ?     36.7382+-2.3518        ? might be 1.0275x slower
   deltablue-varargs                                243.3849+-12.0172    ?    244.6398+-1.9842        ?
   gcse-poly-get                                     22.7860+-2.6469           22.7742+-2.3481        
   hoist-poly-check-structure-effectful-loop   
                                                      8.3637+-3.1962     ?      9.2519+-6.2182        ? might be 1.1062x slower
   minus-boolean                                      4.6013+-1.0631     ?      4.6373+-1.6336        ?
   gcse-poly-get-less-obvious                        20.9051+-3.6299     ?     21.2070+-5.2685        ? might be 1.0144x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     11.4576+-3.5214            9.8910+-1.7512          might be 1.1584x faster
   branch-fold                                        6.1078+-1.9361            6.0059+-1.4317          might be 1.0170x faster
   double-to-int32-typed-array                        2.4445+-0.8092     ?      2.6142+-0.7672        ? might be 1.0694x slower
   plus-boolean-double                                4.3127+-1.5588            4.0637+-0.8840          might be 1.0613x faster
   hoist-poly-check-structure                         5.7048+-1.0193     ?      5.9742+-2.2328        ? might be 1.0472x slower
   infer-one-time-closure-ten-vars                   11.9275+-0.3765     ?     12.3837+-1.3476        ? might be 1.0383x slower
   array-with-double-mul-add                          8.8322+-4.0819            7.6713+-2.0460          might be 1.1513x faster
   array-prototype-map                              104.0285+-4.8958          100.9335+-3.4742          might be 1.0307x faster
   varargs-inline                                    12.4515+-0.6287           12.1749+-0.1203          might be 1.0227x faster
   undefined-property-access                        363.1834+-2.0904          362.1338+-4.0639        
   array-with-int32-add-sub                           8.9216+-1.1253     ?      9.5959+-3.3048        ? might be 1.0756x slower
   function-dot-apply                                10.3087+-1.8999            9.4343+-1.9771          might be 1.0927x faster
   string-sub                                        62.4992+-1.5314     ?     64.4086+-1.7946        ? might be 1.0306x slower
   boolean-test                                       4.9586+-0.9642     ?      6.9583+-7.0363        ? might be 1.4033x slower
   emscripten-cube2hash                              37.2515+-1.5980     ?     37.3467+-2.9091        ?
   Int32Array-alloc-long-lived                       67.0919+-3.2617     ?     68.7625+-6.2358        ? might be 1.0249x slower
   get-by-id-self-or-proto                           20.1538+-2.2482           18.7598+-4.5119          might be 1.0743x faster
   sinkable-new-object                               44.0632+-7.0367           41.8134+-8.3676          might be 1.0538x faster
   put-by-val-large-index-blank-indexing-type   
                                                      7.2588+-1.3050     ?      8.3561+-0.9167        ? might be 1.1512x slower
   Int8Array-load                                     5.0709+-1.4050            4.9445+-1.1216          might be 1.0256x faster
   int-or-other-abs-then-get-by-val                   7.6223+-1.0945            7.5062+-2.6854          might be 1.0155x faster
   abs-boolean                                        4.6014+-2.4821     ?      4.9705+-1.9298        ? might be 1.0802x slower
   call-spread-call                                  26.3105+-5.4936           25.3471+-1.3484          might be 1.0380x faster
   unprofiled-licm                                   23.2145+-4.5398           22.1848+-0.9995          might be 1.0464x faster
   constant-test                                      6.9087+-0.4641            6.0225+-1.1009          might be 1.1471x faster
   cfg-simplify                                       4.3336+-1.1799     ?      4.7687+-0.4915        ? might be 1.1004x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.4875+-1.9179     ?      6.6290+-1.7456        ? might be 1.4772x slower
   fold-put-structure                                 6.3720+-1.3338     ?      7.4452+-2.6192        ? might be 1.1684x slower
   get-by-id-chain-from-try-block                     9.2595+-0.6842            7.9350+-1.6277          might be 1.1669x faster
   poly-chain-access-different-prototypes             3.9094+-1.2119            3.0827+-0.1703          might be 1.2682x faster
   get_callee_monomorphic                             3.4810+-0.7753     ?      3.6751+-0.5866        ? might be 1.0558x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.6519+-0.1479            0.6009+-0.2693          might be 1.0849x faster
   empty-string-plus-int                              6.6179+-1.5913     ?      6.6624+-2.2495        ?
   Float32Array-to-Float64Array-set                  60.7141+-1.3998     !     69.9803+-2.7659        ! definitely 1.1526x slower
   switch-string-short                               13.7476+-0.2974           13.6503+-0.0871        
   switch-string-basic-big                           14.7054+-0.1172     ?     15.4500+-2.7475        ? might be 1.0506x slower
   double-get-by-val-out-of-bounds                    6.8395+-0.5611     ?      7.7285+-1.0685        ? might be 1.1300x slower
   large-int-captured                                 6.1796+-1.5268     ?      7.1764+-1.5010        ? might be 1.1613x slower
   elidable-new-object-roflcopter                    59.3333+-1.9719           58.2463+-7.0083          might be 1.0187x faster
   string-get-by-val-out-of-bounds                    8.8820+-0.7267            8.7066+-2.9662          might be 1.0201x faster
   array-with-double-add                              6.2633+-3.2255     ?      7.0192+-1.6313        ? might be 1.1207x slower
   string-test                                        4.5157+-1.4929     ?      5.4550+-0.9281        ? might be 1.2080x slower
   switch                                            16.2685+-2.5502           15.5795+-1.1626          might be 1.0442x faster
   inline-get-scoped-var                              6.7767+-0.3181     ?      7.1716+-2.5623        ? might be 1.0583x slower
   tear-off-arguments-simple                          5.0302+-1.5024     ?      5.1190+-1.8831        ? might be 1.0177x slower
   negative-zero-modulo                               0.3983+-0.1312     ?      0.7014+-0.6891        ? might be 1.7611x slower
   infer-closure-const-then-reenter                  25.0524+-1.2805     ?     25.7565+-0.2200        ? might be 1.0281x slower
   array-prototype-forEach                           90.0042+-6.3455     ?     90.8583+-7.3649        ?
   switch-constant                                   11.1938+-1.7804           11.1542+-1.4789        
   negative-zero-negate                               0.3277+-0.0675     ?      0.4141+-0.0454        ? might be 1.2637x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.9775+-1.2876     ?     10.8633+-3.8159        ? might be 1.0888x slower
   in-one-case-false                                 15.1734+-3.6603           13.7930+-2.8747          might be 1.1001x faster
   int-or-other-div-then-get-by-val                   6.6055+-0.4476     ?      6.9066+-2.3766        ? might be 1.0456x slower
   typed-array-get-set-by-val-profiling              33.2963+-1.2778           33.1710+-1.1811        
   Int8Array-alloc-long-lived                        56.9606+-7.8662           52.7166+-7.9180          might be 1.0805x faster
   simple-poly-call                                   3.4092+-2.7463            2.1022+-0.5968          might be 1.6217x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      9.3755+-4.6761            8.1630+-1.8299          might be 1.1485x faster
   switch-string-basic-big-var                       15.8030+-0.8791     ?     17.3145+-3.2326        ? might be 1.0956x slower
   Int16Array-to-Int32Array-set                      59.7289+-1.3605     !     66.5735+-2.7299        ! definitely 1.1146x slower
   sinkable-new-object-taken                         55.2031+-2.3206     ?     56.0368+-4.0883        ? might be 1.0151x slower
   string-concat-pair-object                          3.3881+-0.8576            3.1672+-0.7651          might be 1.0697x faster
   obvious-sink-pathology-taken                     156.9066+-9.5909     ?    168.9357+-21.4432       ? might be 1.0767x slower
   ftl-library-inlining                              86.5171+-0.5927           85.7233+-2.5588        
   array-with-int32-or-double-sum                     5.2022+-2.2573     ?      5.2334+-1.4062        ?
   Int16Array-bubble-sort-with-byteLength            23.2363+-0.9664     !     25.5555+-1.2653        ! definitely 1.0998x slower

   <geometric>                                       11.3499+-0.1134     ?     11.3948+-0.2032        ? might be 1.0040x slower

                                                          Conf#1                    Conf#2                                      
Geomean of preferred means:
   <scaled-result>                                   49.6362+-0.8856     ?     49.8990+-0.5608        ? might be 1.0053x slower
Comment 7 Yusuke Suzuki 2015-04-29 08:49:05 PDT
I'll update the patch.

1. private symbols hold the actual string to provide the distributed hash values
2. just use existingHash() in IdentifierRepHash!
Comment 8 Yusuke Suzuki 2015-04-29 08:57:26 PDT
Ah, but, I found the problem. The user may create a public symbol with `Symbol()` form. In this case, the string folded in `Symbol()` becomes an empty string and its hash value is the same to the other public symbols created with `Symbol()`.

So I'm now planning to allocate special space in symbolized StringImpl. (like BufferSubstring implementation).
And we'll store the hash value here for symbols.
Comment 9 Yusuke Suzuki 2015-04-29 18:13:41 PDT
Created attachment 252018 [details]
Patch
Comment 10 Yusuke Suzuki 2015-04-29 18:18:31 PDT
Now running run-jsc-benchmarks...
Comment 11 Yusuke Suzuki 2015-04-29 19:32:06 PDT
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, and JSRegress on gpgpu.

VMs tested:
"Conf#1" at /home/yusuke/dev/WebKit/WebKitBuild/Release/bin/jsc
"Conf#2" at /home/yusuke/dev/WebKit/WebKitBuild/hash/Release/bin/jsc

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

                                                          Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                            8.9677+-3.1485     ?     10.4145+-5.7581        ? might be 1.1613x slower
   3d-morph                                          17.9666+-5.1604           16.6663+-1.2036          might be 1.0780x faster
   3d-raytrace                                       11.2003+-5.3851            9.9532+-3.0372          might be 1.1253x faster
   access-binary-trees                                3.6420+-1.2004            3.6218+-0.9734        
   access-fannkuch                                   10.2523+-5.2858     ?     12.6508+-3.1409        ? might be 1.2340x slower
   access-nbody                                       4.5532+-0.8001            4.4649+-1.1597          might be 1.0198x faster
   access-nsieve                                      4.5020+-0.7292     ?      4.6602+-2.3380        ? might be 1.0351x slower
   bitops-3bit-bits-in-byte                           2.9702+-0.3129            2.6575+-0.8041          might be 1.1177x faster
   bitops-bits-in-byte                                4.8557+-1.4841     ?      7.1542+-5.1247        ? might be 1.4734x slower
   bitops-bitwise-and                                 3.1676+-0.9682            3.0228+-1.0221          might be 1.0479x faster
   bitops-nsieve-bits                                 7.5537+-2.7678            6.0782+-1.2656          might be 1.2427x faster
   controlflow-recursive                              3.4572+-0.3453     ?      3.6279+-1.4073        ? might be 1.0494x slower
   crypto-aes                                         5.7213+-1.1372            5.3464+-1.0771          might be 1.0701x faster
   crypto-md5                                         5.0073+-2.2967            4.9437+-2.2338          might be 1.0129x faster
   crypto-sha1                                        7.0037+-4.2785            6.4028+-2.0384          might be 1.0939x faster
   date-format-tofte                                 11.1135+-0.7490     ?     11.7110+-1.8807        ? might be 1.0538x slower
   date-format-xparb                                 10.2738+-1.6849     ?     11.7762+-4.7531        ? might be 1.1462x slower
   math-cordic                                        4.7743+-0.7012     ?      7.0256+-3.4351        ? might be 1.4715x slower
   math-partial-sums                                  9.4897+-0.4679            9.4492+-0.3669        
   math-spectral-norm                                 3.6110+-1.1128            3.5107+-1.4513          might be 1.0286x faster
   regexp-dna                                         7.6502+-0.2610     ?      8.1400+-1.8980        ? might be 1.0640x slower
   string-base64                                      5.8198+-0.1589            5.6320+-1.3506          might be 1.0333x faster
   string-fasta                                      14.2908+-4.6230           13.9872+-4.6230          might be 1.0217x faster
   string-tagcloud                                   10.2194+-0.2074           10.0319+-0.1642          might be 1.0187x faster
   string-unpack-code                                22.4788+-1.1038           21.8772+-1.1224          might be 1.0275x faster
   string-validate-input                              6.5307+-2.4054            6.3375+-0.3419          might be 1.0305x faster

   <arithmetic>                                       7.9643+-0.5707     ?      8.1209+-0.2997        ? might be 1.0197x slower

                                                          Conf#1                    Conf#2                                      
LongSpider:
   3d-cube                                          969.4630+-76.2120    ?   1069.8500+-333.4902      ? might be 1.1035x slower
   3d-morph                                        2476.0489+-48.6642        2447.2212+-8.8370          might be 1.0118x faster
   3d-raytrace                                      888.6068+-26.2417    ?    892.3326+-23.2438       ?
   access-binary-trees                             1215.3043+-31.7079    ?   1219.3437+-53.1715       ?
   access-fannkuch                                  346.9197+-17.5778         340.2100+-21.3518         might be 1.0197x faster
   access-nbody                                     667.9697+-4.2716          667.8404+-9.5461        
   access-nsieve                                    790.7558+-53.9930         790.2138+-46.0267       
   bitops-3bit-bits-in-byte                          48.6279+-1.6360           47.7199+-3.2282          might be 1.0190x faster
   bitops-bits-in-byte                              106.3665+-3.1344          103.8648+-3.0160          might be 1.0241x faster
   bitops-nsieve-bits                               738.6161+-46.9003         714.5553+-2.3523          might be 1.0337x faster
   controlflow-recursive                            556.1403+-31.9216         543.9205+-23.6556         might be 1.0225x faster
   crypto-aes                                       794.7075+-23.8701         794.1555+-38.8184       
   crypto-md5                                       587.6483+-10.0066    ?    594.9119+-26.3075       ? might be 1.0124x slower
   crypto-sha1                                      741.7661+-18.5727    ?    798.7419+-112.6537      ? might be 1.0768x slower
   date-format-tofte                                931.9475+-30.1020    ?    966.1580+-39.3349       ? might be 1.0367x slower
   date-format-xparb                                822.6035+-30.9320    ?    824.9117+-53.1224       ?
   math-cordic                                      655.9008+-5.1191          653.1638+-1.3604        
   math-partial-sums                                955.8593+-17.4539         955.7239+-15.5162       
   math-spectral-norm                               902.7931+-8.0550     ?    903.6295+-12.3822       ?
   string-base64                                    421.7798+-16.3712    ?    426.2128+-20.1173       ? might be 1.0105x slower
   string-fasta                                     590.3682+-48.0466         574.7104+-13.9448         might be 1.0272x faster
   string-tagcloud                                  225.9772+-12.9659    ?    227.1317+-7.6137        ?

   <geometric>                                      588.1507+-4.7827     ?    590.0794+-10.7592       ? might be 1.0033x slower

                                                          Conf#1                    Conf#2                                      
V8Spider:
   crypto                                            68.2330+-12.9017          67.0380+-11.6273         might be 1.0178x faster
   deltablue                                         92.1436+-6.2462     ?     97.7270+-5.6248        ? might be 1.0606x slower
   earley-boyer                                      49.9476+-3.1359     ?     51.2065+-1.6833        ? might be 1.0252x slower
   raytrace                                          44.7066+-4.5542     ?     46.3378+-5.8332        ? might be 1.0365x slower
   regexp                                            89.7034+-3.3722           88.7458+-2.9963          might be 1.0108x faster
   richards                                          77.6140+-1.7803     ?     81.4656+-7.2937        ? might be 1.0496x slower
   splay                                             46.0871+-9.9795     ?     46.4767+-7.6764        ?

   <geometric>                                       64.0975+-2.9862     ?     65.4767+-1.7120        ? might be 1.0215x slower

                                                          Conf#1                    Conf#2                                      
Octane:
   encrypt                                           0.25120+-0.00611    ?     0.25181+-0.00442       ?
   decrypt                                           4.36602+-0.03576    ?     4.41787+-0.19994       ? might be 1.0119x slower
   deltablue                                x2       0.23569+-0.00446          0.23383+-0.00467       
   earley                                            0.67040+-0.02261          0.65014+-0.06905         might be 1.0312x faster
   boyer                                             7.85753+-0.08209          7.85051+-0.06493       
   navier-stokes                            x2       5.31279+-0.00787          5.31216+-0.01242       
   raytrace                                 x2       1.54644+-0.13022    ?     1.57536+-0.11561       ? might be 1.0187x slower
   richards                                 x2       0.13124+-0.00336          0.12981+-0.00079         might be 1.0110x faster
   splay                                    x2       0.42696+-0.01493          0.42449+-0.01003       
   regexp                                   x2      36.27501+-1.05795         35.01571+-0.35192         might be 1.0360x faster
   pdfjs                                    x2      55.14506+-1.91493         53.95156+-0.67311         might be 1.0221x faster
   mandreel                                 x2      59.12777+-2.55690    ?    60.84531+-4.98784       ? might be 1.0290x slower
   gbemu                                    x2      49.19690+-4.84852    ?    49.92647+-1.78625       ? might be 1.0148x slower
   closure                                           0.59039+-0.00929          0.57735+-0.00999         might be 1.0226x faster
   jquery                                            7.73867+-0.16580          7.73203+-0.18934       
   box2d                                    x2      15.37172+-0.11180         14.76054+-0.53701         might be 1.0414x faster
   zlib                                     x2     475.36125+-14.47096       472.31866+-11.17259      
   typescript                               x2     899.66193+-25.79914   ?   910.04938+-31.92957      ? might be 1.0115x slower

   <geometric>                                       7.73537+-0.03382          7.69641+-0.04822         might be 1.0051x faster

                                                          Conf#1                    Conf#2                                      
JSRegress:
   string-get-by-val-big-char                         8.9373+-1.2060            8.4783+-0.3499          might be 1.0541x faster
   slow-convergence                                   3.5857+-0.8415     ?      3.6480+-0.9805        ? might be 1.0174x slower
   int-or-other-abs-zero-then-get-by-val             24.0950+-2.0918           23.5303+-1.3538          might be 1.0240x faster
   switch-string-basic                               14.9205+-0.2205     ?     16.4517+-3.5768        ? might be 1.1026x slower
   integer-modulo                                     3.1273+-0.8505            2.9283+-0.8646          might be 1.0679x faster
   fold-double-to-int                                15.1859+-0.4568           14.5451+-0.3231          might be 1.0441x faster
   adapt-to-double-divide                            15.9284+-0.0833     ?     16.3713+-0.8116        ? might be 1.0278x slower
   tear-off-arguments                                 7.2493+-2.1715            6.9050+-2.1290          might be 1.0499x faster
   polymorphic-get-by-id                              5.2778+-1.2554            4.7910+-0.3185          might be 1.1016x faster
   inline-arguments-local-escape                      5.8268+-0.7467     ?      5.9285+-1.0937        ? might be 1.0175x slower
   int-or-other-sub                                   6.1027+-1.7119            5.0206+-1.2117          might be 1.2155x faster
   new-array-dead                                    18.2209+-2.7395     ?     19.0940+-1.5168        ? might be 1.0479x slower
   rare-osr-exit-on-local                            16.7112+-2.2869     ?     17.4147+-2.3280        ? might be 1.0421x slower
   obvious-sink-pathology                           155.1809+-7.9807          148.6976+-6.1059          might be 1.0436x faster
   infer-one-time-closure                            11.4713+-0.9828     ?     12.0707+-0.4828        ? might be 1.0523x slower
   in-one-case-true                                  13.5785+-2.6531           13.4970+-4.6100        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     26.0598+-4.9112           24.4288+-1.1326          might be 1.0668x faster
   infer-closure-const-then-reenter-no-inline   
                                                     65.1309+-3.1563           64.1627+-3.1784          might be 1.0151x faster
   call-spread-apply                                 34.4287+-4.2642     ?     38.9209+-1.5437        ? might be 1.1305x slower
   destructuring-arguments                           20.0498+-3.0505           19.3912+-2.8184          might be 1.0340x faster
   string-concat-object                               3.3309+-0.9553     ?      3.3936+-0.3485        ? might be 1.0188x slower
   arguments-named-and-reflective                    13.0629+-2.3926           11.9352+-0.6387          might be 1.0945x faster
   singleton-scope                                   74.7615+-4.2366     ?     75.6252+-4.5081        ? might be 1.0116x slower
   sparse-conditional                                 1.7322+-0.6375     ?      1.8000+-0.4255        ? might be 1.0391x slower
   splice-to-remove                                  20.2902+-1.1298           20.2404+-2.1614        
   assign-custom-setter                               5.3666+-0.6934            5.0836+-0.9943          might be 1.0557x faster
   slow-array-profile-convergence                     3.6525+-1.0810            3.5742+-1.2689          might be 1.0219x faster
   proto-getter-access                               10.5790+-1.1436           10.4390+-1.1042          might be 1.0134x faster
   direct-arguments-getbyval                          3.6682+-1.8240            1.9825+-0.2773          might be 1.8503x faster
   fold-put-by-id-to-multi-put-by-offset              7.2421+-0.7083     ?      8.9910+-4.5345        ? might be 1.2415x slower
   to-int32-boolean                                  16.8513+-0.8183     ?     17.0192+-0.5782        ?
   Float32Array-matrix-mult                           6.0723+-1.2100     ?      6.4108+-1.3435        ? might be 1.0558x slower
   register-pressure-from-osr                        25.5303+-4.1199           22.7883+-0.6974          might be 1.1203x faster
   new-array-buffer-dead                            135.6559+-6.0150          134.7866+-9.1998        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     13.9570+-0.6460     ?     14.0548+-0.6663        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     44.9768+-7.7693     ?     45.1393+-8.7474        ?
   double-to-int32-typed-array-no-inline              4.6476+-4.4919            4.1832+-1.5607          might be 1.1110x faster
   getter-richards                                  117.7622+-5.2575     ?    123.6711+-6.4574        ? might be 1.0502x slower
   new-array-push                                     6.5843+-2.9952            5.8611+-1.2425          might be 1.1234x faster
   infer-closure-const-then-put-to-scope             24.7612+-1.5591     ?     24.9580+-0.9968        ?
   array-splice-contiguous                           69.7930+-22.7799          60.8592+-1.5002          might be 1.1468x faster
   ftl-library-inlining-dataview                     66.3914+-3.9268           66.0367+-4.1502        
   indexed-properties-in-objects                      5.1454+-0.6135     ?      6.2548+-4.2560        ? might be 1.2156x slower
   div-boolean-double                                 7.1807+-1.6510     ?      7.8810+-4.5713        ? might be 1.0975x slower
   int-or-other-neg-then-get-by-val                   7.2638+-2.2347            6.7133+-1.8664          might be 1.0820x faster
   poly-stricteq                                     66.4394+-0.3194     ?     67.7797+-2.7782        ? might be 1.0202x slower
   polymorphic-put-by-id                             30.8536+-1.7832     ?     31.2363+-2.0482        ? might be 1.0124x slower
   try-catch-get-by-val-cloned-arguments             15.9330+-2.5283           14.9320+-0.2389          might be 1.0670x faster
   polymorphic-array-call                             1.6138+-0.2610            1.4957+-0.2162          might be 1.0790x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.6082+-1.1934     ?      8.8492+-1.2098        ? might be 1.1631x slower
   in-two-cases                                      13.2929+-4.2762     ?     14.3522+-3.8678        ? might be 1.0797x slower
   array-access-polymorphic-structure                 7.5822+-1.3461            7.5508+-1.4049        
   varargs-call                                      17.5922+-0.3792           17.5306+-1.4027        
   poly-chain-access                                  4.5872+-1.8982     ?      4.7501+-1.3409        ? might be 1.0355x slower
   get_callee_polymorphic                             4.1429+-0.7975     ?      4.7128+-0.8155        ? might be 1.1375x slower
   cmpeq-obj-to-obj-other                            11.4147+-1.3372     ?     12.5822+-0.2200        ? might be 1.1023x slower
   cast-int-to-double                                 7.7395+-1.8482            7.1093+-2.1376          might be 1.0886x faster
   polyvariant-monomorphic-get-by-id                  9.9180+-1.0621     ?     10.7068+-2.2281        ? might be 1.0795x slower
   global-var-const-infer-fire-from-opt               2.7057+-0.6431            2.3571+-0.9572          might be 1.1479x faster
   array-prototype-some                              90.8228+-2.7864           89.6733+-2.8048          might be 1.0128x faster
   basic-set                                         10.4547+-2.0367     ?     11.9348+-2.9121        ? might be 1.1416x slower
   switch-string-basic-var                           16.1942+-0.4521     ?     17.1710+-1.8773        ? might be 1.0603x slower
   assign-custom-setter-polymorphic                   3.7930+-0.7131     ?      4.0962+-0.5497        ? might be 1.0799x slower
   put-by-val-direct                                  0.6442+-0.3338            0.5899+-0.2197          might be 1.0921x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     38.6839+-3.1450     ?     40.8743+-3.5966        ? might be 1.0566x slower
   simple-activation-demo                            26.9043+-1.8089     ?     27.7692+-1.0835        ? might be 1.0321x slower
   string-concat-pair-simple                         13.8857+-1.1851           13.4443+-1.1085          might be 1.0328x faster
   get-by-val-out-of-bounds                           6.8398+-1.8257     ?      9.1345+-10.0386       ? might be 1.3355x slower
   switch-string-length-tower-var                    17.2370+-1.5626     ?     17.8713+-2.3242        ? might be 1.0368x slower
   captured-assignments                               0.5833+-0.1430     ?      0.6434+-0.3894        ? might be 1.1030x slower
   string-var-equality                               31.8922+-0.6568     ?     33.0188+-2.6479        ? might be 1.0353x slower
   int-or-other-mod-then-get-by-val                   5.4759+-0.8080     ?      6.7800+-2.6942        ? might be 1.2381x slower
   Int32Array-alloc-large                            27.3398+-2.5781     ?     28.9033+-2.1371        ? might be 1.0572x slower
   sin-boolean                                       14.4808+-1.9120           13.5745+-1.3190          might be 1.0668x faster
   string-concat-simple                              14.4791+-1.6670     ?     15.2227+-0.9227        ? might be 1.0514x slower
   getter-no-activation                               7.9728+-1.4034            6.3340+-1.0575          might be 1.2587x faster
   try-catch-get-by-val-direct-arguments              7.7863+-1.8898            6.8552+-0.4346          might be 1.1358x faster
   infer-constant-property                            4.7030+-1.3135            4.2955+-1.8310          might be 1.0949x faster
   div-boolean                                       10.0912+-1.3566     ?     10.8278+-4.8555        ? might be 1.0730x slower
   large-int                                         16.6567+-0.6864           16.2600+-1.7192          might be 1.0244x faster
   external-arguments-putbyval                        5.1277+-3.0161            4.2747+-0.8691          might be 1.1996x faster
   max-boolean                                        4.2092+-2.0684     ?      4.4493+-1.9920        ? might be 1.0570x slower
   get-by-id-proto-or-self                           17.3015+-1.3910     ?     18.4445+-0.5896        ? might be 1.0661x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.5943+-2.1697     ?     10.2212+-0.8405        ? might be 1.0653x slower
   string-equality                                   18.9870+-0.5900     ?     19.0445+-0.8089        ?
   getter                                             8.6461+-3.6118            6.6000+-1.4289          might be 1.3100x faster
   Int32Array-Int8Array-view-alloc                    8.1345+-1.4050            7.5721+-0.6020          might be 1.0743x faster
   substring-concat                                  53.1930+-2.7974     ?     55.9993+-1.9974        ? might be 1.0528x slower
   integer-divide                                    12.7050+-0.4228     ?     12.7329+-0.8718        ?
   object-closure-call                                7.4688+-1.8183     ?      8.2328+-3.3262        ? might be 1.1023x slower
   sinkable-new-object-dag                           71.4318+-2.6033     ?     72.1090+-1.3057        ?
   string-char-code-at                               19.1411+-2.5652           17.9548+-0.5696          might be 1.0661x faster
   double-to-uint32-typed-array-no-inline             4.7690+-2.2207            4.6349+-1.2212          might be 1.0289x faster
   Int16Array-bubble-sort                            23.6875+-1.2282     ?     25.1995+-4.5823        ? might be 1.0638x slower
   switch-char                                        8.1601+-2.2176     ?     10.0454+-4.7773        ? might be 1.2310x slower
   switch-char-constant                               4.6063+-0.8993     ?      4.7957+-1.5436        ? might be 1.0411x slower
   infer-one-time-closure-two-vars                   11.7620+-0.4034     ?     11.8085+-0.9010        ?
   object-test                                        5.4140+-3.7717     ?      5.8748+-0.6875        ? might be 1.0851x slower
   external-arguments-getbyval                        2.7710+-1.7577            2.6868+-3.1103          might be 1.0313x faster
   plus-boolean                                       3.8138+-1.7386     ?      4.1951+-1.7136        ? might be 1.1000x slower
   Int16Array-alloc-long-lived                       60.0598+-8.4234     ?     62.6543+-9.4121        ? might be 1.0432x slower
   fold-get-by-id-to-multi-get-by-offset             10.1360+-1.2825            9.2245+-1.6307          might be 1.0988x faster
   infer-one-time-deep-closure                       20.7645+-0.4126           20.4857+-0.8142          might be 1.0136x faster
   new-array-buffer-push                              7.6894+-1.0176            7.3466+-1.2016          might be 1.0467x faster
   aliased-arguments-getbyval                         2.5970+-1.8460     ?      3.0679+-2.0373        ? might be 1.1813x slower
   by-val-generic                                    11.4345+-1.0545     ?     11.5435+-1.1881        ?
   ArrayBuffer-Int8Array-alloc-long-lived            15.5457+-2.7362           14.8452+-0.6001          might be 1.0472x faster
   exit-length-on-plain-object                       17.9571+-1.0768           14.9766+-2.1958          might be 1.1990x faster
   Int32Array-alloc                                   6.3258+-6.0443            4.1541+-0.5230          might be 1.5228x faster
   weird-inlining-const-prop                          5.9707+-4.0407            4.2590+-2.4518          might be 1.4019x faster
   DataView-custom-properties                        48.7978+-5.2105           46.8983+-4.6020          might be 1.0405x faster
   HashMap-string-put-get-iterate                    32.3616+-3.6637           30.5963+-6.1118          might be 1.0577x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      4.5010+-2.2632     ?      5.8885+-3.1731        ? might be 1.3083x slower
   temporal-structure                                20.1317+-8.8416           17.2786+-4.1558          might be 1.1651x faster
   for-of-iterate-array-values                        5.1403+-1.4494     ?      6.5842+-1.7919        ? might be 1.2809x slower
   varargs-construct                                 35.9721+-2.3162           35.5865+-0.5458          might be 1.0108x faster
   double-to-uint32-typed-array                       3.8569+-1.3585            3.4467+-0.8113          might be 1.1190x faster
   int-or-other-mul-then-get-by-val                   6.6797+-1.9618            6.4810+-0.8637          might be 1.0307x faster
   put-by-val-machine-int                             4.5885+-1.8582     ?      5.2481+-1.5488        ? might be 1.1438x slower
   lots-of-fields                                    12.3842+-0.3721     ?     12.3878+-0.3099        ?
   infer-closure-const-then-mov-no-inline             5.9599+-1.4362            5.7702+-2.1262          might be 1.0329x faster
   arguments                                         10.4232+-0.4201           10.1344+-0.8301          might be 1.0285x faster
   negative-zero-divide                               0.4600+-0.1786     ?      0.4815+-0.0700        ? might be 1.0467x slower
   big-int-mul                                        7.5687+-1.2104            5.5603+-1.9135          might be 1.3612x faster
   try-catch-get-by-val-scoped-arguments              8.2580+-0.7252     ?      8.7881+-1.7421        ? might be 1.0642x slower
   setter                                             7.1437+-1.3860     ?      7.3455+-1.7963        ? might be 1.0282x slower
   neg-boolean                                        5.1138+-0.8665            4.9912+-3.0078          might be 1.0246x faster
   poly-chain-access-simpler                          4.5940+-1.5519     ?      5.2557+-2.0934        ? might be 1.1440x slower
   put-by-id-slightly-polymorphic                     5.8931+-4.2441            5.0129+-2.0393          might be 1.1756x faster
   arguments-out-of-bounds                           14.9481+-1.1780     ?     15.2169+-0.9053        ? might be 1.0180x slower
   sink-function                                     11.5102+-1.1942     ?     12.4298+-3.0871        ? might be 1.0799x slower
   marsaglia-larger-ints                             46.1697+-3.6631           45.3900+-2.2033          might be 1.0172x faster
   undefined-test                                     4.9902+-2.4547            4.6707+-1.2973          might be 1.0684x faster
   imul-mixed                                         7.1968+-0.8845     ?      8.5932+-2.0363        ? might be 1.1940x slower
   global-var-const-infer                             1.1040+-1.1704            0.8358+-0.3005          might be 1.3210x faster
   asmjs_bool_bug                                     9.1582+-2.1817            9.1404+-1.9054        
   double-pollution-putbyoffset                       6.6136+-0.8858     ?      8.2978+-2.4447        ? might be 1.2547x slower
   cell-argument                                      8.6685+-1.7547     ?      9.9395+-1.5812        ? might be 1.1466x slower
   int-or-other-add                                   7.8536+-1.0458     ?      8.1957+-1.4069        ? might be 1.0436x slower
   plus-boolean-arith                                 4.3368+-0.9005     ?      4.9485+-1.1730        ? might be 1.1410x slower
   ArrayBuffer-Int32Array-byteOffset                  5.5055+-1.6246            5.4635+-0.9832        
   mod-boolean                                       10.2205+-2.7163     ?     10.3340+-1.0365        ? might be 1.0111x slower
   infer-closure-const-then-mov                      17.7810+-1.0880     ?     17.9255+-2.1189        ?
   large-int-neg                                     17.4709+-2.2382           16.9166+-1.0467          might be 1.0328x faster
   fround                                            18.8022+-1.2833           18.5037+-1.1175          might be 1.0161x faster
   elidable-new-object-dag                           51.9355+-3.0425           50.5690+-1.2433          might be 1.0270x faster
   make-indexed-storage                               4.2975+-0.4620            4.2097+-1.3492          might be 1.0209x faster
   int-or-other-add-then-get-by-val                   7.5374+-2.6284            7.4824+-2.2060        
   string-cons-repeat                                 8.3494+-0.7776     !      9.6598+-0.5283        ! definitely 1.1569x slower
   logical-not                                        6.5190+-2.0072     ?      7.1760+-1.0824        ? might be 1.1008x slower
   poly-chain-access-different-prototypes-simple   
                                                      4.4944+-2.7871     ?      5.9269+-2.5868        ? might be 1.3187x slower
   fixed-typed-array-storage-var-index                2.5918+-1.4240            1.8428+-0.5756          might be 1.4065x faster
   function-test                                      5.3675+-1.3043     ?      6.1822+-0.9904        ? might be 1.1518x slower
   string-cons-tower                                  8.2691+-0.1447     ?      8.3063+-0.5456        ?
   destructuring-swap                                 6.4322+-1.3168     ?      7.2871+-1.0356        ? might be 1.1329x slower
   int-or-other-max-then-get-by-val                   6.3898+-1.9250     ?      6.5062+-0.6644        ? might be 1.0182x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.2225+-1.1033     ?      9.2353+-2.1578        ?
   method-on-number                                  21.4424+-5.7631     ?     22.6152+-4.0603        ? might be 1.0547x slower
   put-by-id-replace-and-transition                  10.0871+-1.5562     ?     10.1518+-0.6947        ?
   int-or-other-neg-zero-then-get-by-val             24.1590+-1.3133     ?     25.6522+-3.3319        ? might be 1.0618x slower
   varargs-strict-mode                               11.0093+-0.1764     ?     11.7490+-2.2456        ? might be 1.0672x slower
   string-get-by-val-out-of-bounds-insane             5.2690+-0.7449     ?      6.7994+-6.1918        ? might be 1.2905x slower
   imul-double-only                                   8.7515+-1.5499            8.6330+-1.4055          might be 1.0137x faster
   for-of-iterate-array-keys                          6.2572+-2.8892            4.9329+-1.1803          might be 1.2685x faster
   string-get-by-val                                  6.1516+-1.4930     ?      6.3129+-2.8066        ? might be 1.0262x slower
   nested-function-parsing                           45.9070+-3.2781           43.6746+-0.8794          might be 1.0511x faster
   string-repeat-arith                               31.9633+-0.1214           31.7034+-0.6910        
   inline-arguments-aliased-access                    7.6375+-2.1038            6.3190+-1.0332          might be 1.2087x faster
   allocate-big-object                                3.5055+-1.2323     ?      4.2943+-0.8634        ? might be 1.2250x slower
   elidable-new-object-tree                          54.1660+-3.2454           53.7932+-5.1313        
   ArrayBuffer-Int8Array-alloc                       11.9550+-0.3157     ?     14.8107+-5.0442        ? might be 1.2389x slower
   int52-spill                                        9.6614+-1.1896            9.5397+-1.9768          might be 1.0128x faster
   no-inline-constructor                            146.1468+-3.2178     ?    150.9344+-9.7182        ? might be 1.0328x slower
   hoist-make-rope                                   10.5746+-1.8419           10.5262+-1.0843        
   arguments-strict-mode                             11.9515+-1.5245           10.9809+-0.6639          might be 1.0884x faster
   function-with-eval                               111.2984+-2.4989     ?    116.9548+-9.0329        ? might be 1.0508x slower
   ArrayBuffer-DataView-alloc-long-lived             16.9072+-0.2701     ?     16.9410+-0.2426        ?
   simple-poly-call-nested                           10.7042+-5.7484            9.4275+-2.4668          might be 1.1354x faster
   switch-string-big-length-tower-var                21.5795+-2.8891           21.2479+-0.8913          might be 1.0156x faster
   number-test                                        6.1398+-2.4684            4.7821+-1.6545          might be 1.2839x faster
   Int16Array-load-int-mul                            3.1775+-2.7633            2.2947+-0.7465          might be 1.3847x faster
   put-by-id                                         14.2815+-0.6308     ?     15.5510+-1.0359        ? might be 1.0889x slower
   imul-int-only                                     10.4581+-2.7021           10.4308+-1.3605        
   gcse                                               8.9129+-3.6712            8.2250+-1.8650          might be 1.0836x faster
   create-lots-of-functions                          13.6030+-1.7127     ?     15.7971+-4.9637        ? might be 1.1613x slower
   in-four-cases                                     21.8394+-0.2488     ?     22.2395+-1.4229        ? might be 1.0183x slower
   elidable-new-object-then-call                     39.7768+-7.0215     ?     45.7014+-5.7638        ? might be 1.1489x slower
   int-or-other-sub-then-get-by-val                  11.1523+-5.3065            7.7927+-2.7496          might be 1.4311x faster
   mul-boolean-double                                 5.4703+-1.6402            4.5679+-0.9432          might be 1.1975x faster
   mod-boolean-double                                10.1464+-0.9848     ?     10.7502+-3.5533        ? might be 1.0595x slower
   inline-arguments-access                            6.7612+-1.1043            6.0251+-1.2916          might be 1.1222x faster
   substring-concat-weird                            49.3519+-1.3222     ?     49.5165+-1.5230        ?
   varargs-construct-inline                          26.7885+-4.3566           26.2867+-2.8786          might be 1.0191x faster
   HashMap-put-get-iterate                           34.8625+-6.4091           32.9703+-5.2669          might be 1.0574x faster
   string-long-ident-equality                        17.5038+-1.8417           16.7253+-1.8597          might be 1.0466x faster
   mul-boolean                                        4.7805+-1.7849     ?      5.8307+-3.2808        ? might be 1.2197x slower
   get-by-id-check-structure-elimination             10.7905+-5.1341            8.2825+-1.3364          might be 1.3028x faster
   marsaglia-osr-entry                               23.5854+-0.8285     ?     24.7144+-1.2663        ? might be 1.0479x slower
   Float64Array-alloc-long-lived                     85.3203+-11.7617          84.1420+-8.1645          might be 1.0140x faster
   misc-strict-eq                                    36.3978+-5.0293           34.4390+-2.1235          might be 1.0569x faster
   make-rope-cse                                      5.5098+-0.7058            5.0624+-0.7764          might be 1.0884x faster
   array-with-double-sum                              7.5555+-5.2349            4.3312+-0.8225          might be 1.7444x faster
   substring                                         64.9260+-1.1708           64.4459+-4.1136        
   array-with-double-increment                        5.6694+-0.8375            5.4617+-3.0154          might be 1.0380x faster
   for-of-iterate-array-entries                       8.4814+-1.0369            7.0153+-2.4036          might be 1.2090x faster
   array-nonarray-polymorhpic-access                 40.6588+-2.6710           40.4387+-2.0583        
   varargs                                           11.2692+-0.3092     ?     11.3948+-1.0154        ? might be 1.0111x slower
   string-out-of-bounds                              15.6551+-1.3154           15.5519+-3.0051        
   inlined-put-by-id-transition                      12.3029+-1.9287     ?     12.6866+-1.1293        ? might be 1.0312x slower
   minus-boolean-double                               5.8055+-3.7925            4.8620+-1.2909          might be 1.1941x faster
   delay-tear-off-arguments-strictmode               14.6583+-1.5575           14.1934+-1.7228          might be 1.0328x faster
   array-prototype-every                             92.1415+-5.5296           91.3357+-1.4389        
   chain-getter-access                               11.8544+-1.3131           11.3326+-1.8084          might be 1.0460x faster
   int-or-other-min-then-get-by-val                   6.4427+-0.7135     ?      7.1292+-2.9463        ? might be 1.1065x slower
   HashMap-put-get-iterate-keys                      30.4596+-4.2461     ?     33.0388+-5.0436        ? might be 1.0847x slower
   double-pollution-getbyval                         10.7865+-1.8433           10.3257+-1.5389          might be 1.0446x faster
   structure-hoist-over-transitions                   4.3965+-2.1640            4.3428+-0.8812          might be 1.0124x faster
   polymorphic-structure                             21.2426+-0.8489     ?     21.3052+-0.9911        ?
   sorting-benchmark                                 24.4138+-3.1627     ?     25.5563+-3.9109        ? might be 1.0468x slower
   fixed-typed-array-storage                          1.9752+-1.1536            1.6143+-1.3898          might be 1.2235x faster
   switch-string-length-tower                        14.1494+-0.6002     ?     15.4980+-3.3684        ? might be 1.0953x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     10.6769+-3.8366            8.1790+-2.7649          might be 1.3054x faster
   Int8Array-load-with-byteLength                     5.9915+-1.2222            5.0817+-1.3091          might be 1.1790x faster
   Float64Array-to-Int16Array-set                    72.5530+-1.4702     ?     72.7690+-4.3834        ?
   infer-constant-global-property                   338.4802+-7.7815          336.8730+-10.2182       
   int-overflow-local                                 7.5056+-1.8890            5.9991+-1.8848          might be 1.2511x faster
   min-boolean                                        4.4395+-1.0269     ?      4.8566+-1.3560        ? might be 1.0939x slower
   simple-getter-access                              14.4204+-1.3349     ?     14.4515+-1.0717        ?
   string-hash                                        5.1251+-4.2272     ?      5.1987+-4.3318        ? might be 1.0144x slower
   arity-mismatch-inlining                            1.6644+-1.9624            1.3419+-0.3575          might be 1.2403x faster
   obviously-elidable-new-object                     37.6332+-4.1281           36.1123+-6.7085          might be 1.0421x faster
   deltablue-varargs                                257.2297+-12.1139         242.0876+-25.7328         might be 1.0625x faster
   gcse-poly-get                                     23.5024+-3.6260     ?     23.8622+-2.0960        ? might be 1.0153x slower
   hoist-poly-check-structure-effectful-loop   
                                                      8.3224+-3.2381            7.4072+-0.4646          might be 1.1236x faster
   minus-boolean                                      3.5630+-0.7783     ?      3.9697+-1.6131        ? might be 1.1141x slower
   gcse-poly-get-less-obvious                        19.4833+-0.9247     ?     19.8281+-0.6785        ? might be 1.0177x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     12.1473+-2.5731           11.0291+-2.1810          might be 1.1014x faster
   branch-fold                                        6.4734+-0.8646            5.2115+-1.2845          might be 1.2422x faster
   double-to-int32-typed-array                        3.5834+-2.0079     ?      3.7970+-2.1232        ? might be 1.0596x slower
   plus-boolean-double                                4.1123+-1.7148     ?      5.1945+-4.5664        ? might be 1.2632x slower
   hoist-poly-check-structure                         6.1690+-3.4944            4.9611+-1.5022          might be 1.2435x faster
   infer-one-time-closure-ten-vars                   12.4865+-1.9628           12.4150+-1.7240        
   array-with-double-mul-add                          6.7922+-2.7176     ?      9.5287+-2.8141        ? might be 1.4029x slower
   array-prototype-map                              104.5956+-7.0641          101.9586+-9.0696          might be 1.0259x faster
   varargs-inline                                    10.4749+-1.3502            9.7480+-0.8279          might be 1.0746x faster
   undefined-property-access                        362.1477+-2.6067     ?    366.8416+-10.8808       ? might be 1.0130x slower
   array-with-int32-add-sub                           8.9811+-1.7023            8.7044+-1.4788          might be 1.0318x faster
   function-dot-apply                                 4.1769+-2.4070     ?      5.5134+-5.8673        ? might be 1.3200x slower
   string-sub                                        66.1416+-1.1622           64.8066+-3.6355          might be 1.0206x faster
   boolean-test                                       7.4142+-7.8216            6.0088+-2.4490          might be 1.2339x faster
   emscripten-cube2hash                              39.5045+-11.6122          36.4301+-2.6303          might be 1.0844x faster
   Int32Array-alloc-long-lived                       63.8124+-6.9419     ?     64.4120+-9.1251        ?
   get-by-id-self-or-proto                           18.9986+-4.1295           18.3290+-1.5619          might be 1.0365x faster
   sinkable-new-object                               44.1613+-5.8388           42.5882+-3.2596          might be 1.0369x faster
   put-by-val-large-index-blank-indexing-type   
                                                      8.0353+-1.1086            7.3174+-1.3624          might be 1.0981x faster
   Int8Array-load                                     5.9863+-1.4052            4.4827+-0.9795          might be 1.3354x faster
   int-or-other-abs-then-get-by-val                   7.1273+-0.9408            6.6292+-0.6102          might be 1.0751x faster
   abs-boolean                                        5.0075+-1.9338     ?      6.0146+-2.1906        ? might be 1.2011x slower
   call-spread-call                                  25.1961+-1.9376     ?     26.5083+-4.1576        ? might be 1.0521x slower
   unprofiled-licm                                   21.7029+-0.2085     ?     22.9080+-2.3943        ? might be 1.0555x slower
   constant-test                                      6.4368+-1.9161     ?      6.5986+-1.5042        ? might be 1.0251x slower
   cfg-simplify                                       4.1110+-0.4145            3.8821+-1.1359          might be 1.0589x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      5.7263+-2.0998     ?      5.9008+-3.2253        ? might be 1.0305x slower
   fold-put-structure                                 8.6528+-5.2232            7.3922+-3.7477          might be 1.1705x faster
   get-by-id-chain-from-try-block                     8.3442+-1.7033            7.9191+-1.1212          might be 1.0537x faster
   poly-chain-access-different-prototypes             3.9505+-1.6342     ?      4.3611+-1.5995        ? might be 1.1039x slower
   get_callee_monomorphic                             3.5169+-0.8882     ?      3.5261+-0.7093        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.6546+-0.2982     ?      0.8624+-0.7733        ? might be 1.3175x slower
   empty-string-plus-int                              6.9362+-1.4408     ?      7.0975+-0.9078        ? might be 1.0233x slower
   Float32Array-to-Float64Array-set                  61.1100+-0.2366     !     77.4109+-5.0343        ! definitely 1.2667x slower
   switch-string-short                               15.0240+-1.7534     ?     15.0978+-1.3089        ?
   switch-string-basic-big                           21.7041+-4.6257           20.6918+-4.6388          might be 1.0489x faster
   double-get-by-val-out-of-bounds                    6.6616+-1.0869     ?      6.7173+-1.9362        ?
   large-int-captured                                 6.7657+-0.3922     ?      7.2672+-1.3648        ? might be 1.0741x slower
   elidable-new-object-roflcopter                    56.4852+-2.3496     ?     59.8578+-1.6914        ? might be 1.0597x slower
   string-get-by-val-out-of-bounds                    9.0815+-5.2400            6.8718+-1.7862          might be 1.3216x faster
   array-with-double-add                              6.6412+-2.9816     ?      6.8474+-2.6017        ? might be 1.0310x slower
   string-test                                        4.5577+-0.5621     ?      5.0903+-1.5108        ? might be 1.1169x slower
   switch                                            16.4243+-0.9217           16.2262+-0.9828          might be 1.0122x faster
   inline-get-scoped-var                              6.7468+-0.8603     ?      8.6081+-5.0086        ? might be 1.2759x slower
   tear-off-arguments-simple                          4.8092+-1.0861     ?      5.1522+-1.4321        ? might be 1.0713x slower
   negative-zero-modulo                               0.7843+-0.5645            0.6077+-0.7577          might be 1.2907x faster
   infer-closure-const-then-reenter                  25.3303+-1.2399           24.3925+-0.7086          might be 1.0384x faster
   array-prototype-forEach                           89.0289+-4.2164           86.4977+-0.7775          might be 1.0293x faster
   switch-constant                                   10.4992+-1.5769     ?     11.4468+-1.9705        ? might be 1.0903x slower
   negative-zero-negate                               0.5182+-0.4963            0.4841+-0.2646          might be 1.0706x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.0860+-0.4097     ?     10.3482+-2.2326        ? might be 1.0260x slower
   in-one-case-false                                 12.5378+-1.3048     ?     13.0298+-4.9286        ? might be 1.0392x slower
   int-or-other-div-then-get-by-val                   6.4880+-1.3135            6.1251+-0.1801          might be 1.0593x faster
   typed-array-get-set-by-val-profiling              33.0021+-0.3917           32.8954+-1.0862        
   Int8Array-alloc-long-lived                        55.2307+-7.5368     ?     55.8254+-9.9898        ? might be 1.0108x slower
   simple-poly-call                                   2.0049+-0.6662     ?      2.1122+-1.1366        ? might be 1.0535x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.0346+-2.5680     ?      9.2097+-5.2305        ? might be 1.1463x slower
   switch-string-basic-big-var                       23.8124+-3.1303           22.6641+-1.7056          might be 1.0507x faster
   Int16Array-to-Int32Array-set                      60.1464+-1.0926           59.3321+-1.6132          might be 1.0137x faster
   sinkable-new-object-taken                         56.2842+-2.5595     ?     58.4227+-6.3010        ? might be 1.0380x slower
   string-concat-pair-object                          3.0779+-0.7238     ?      3.1323+-1.0859        ? might be 1.0176x slower
   branch-on-string-as-boolean                       17.3308+-1.6325           16.4380+-0.0823          might be 1.0543x faster
   obvious-sink-pathology-taken                     157.9880+-2.4916     ?    158.6019+-8.3909        ?
   ftl-library-inlining                              74.4737+-3.4686           72.9978+-4.1927          might be 1.0202x faster
   array-with-int32-or-double-sum                     4.7980+-0.7537            4.7949+-1.4856        
   Int16Array-bubble-sort-with-byteLength            23.6345+-2.9763           23.3904+-1.8374          might be 1.0104x faster

   <geometric>                                       11.4648+-0.1869           11.3708+-0.0923          might be 1.0083x faster

                                                          Conf#1                    Conf#2                                      
Geomean of preferred means:
   <scaled-result>                                   48.4169+-1.0673     ?     48.7213+-0.7219        ? might be 1.0063x slower
Comment 12 Darin Adler 2015-04-29 19:32:15 PDT
Comment on attachment 252018 [details]
Patch

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

> Source/JavaScriptCore/runtime/Identifier.h:290
> -    static unsigned hash(const RefPtr<StringImpl>& key) { return key->existingHash(); }
> -    static unsigned hash(StringImpl* key) { return key->existingHash(); }
> +    static unsigned hash(const RefPtr<StringImpl>& key)
> +    {
> +        return key->existingSymbolAwareHash();
> +    }
> +    static unsigned hash(StringImpl* key)
> +    {
> +        return key->existingSymbolAwareHash();
> +    }

I think you could have left these as single line.

> Source/WTF/wtf/text/StringImpl.h:799
> +    unsigned const& hashForSymbol() const

We normally write const unsigned& despite the fact that unsigned const& makes more sense.

I suggest implementing one of these two functions in terms of the other with a const_cast, so we don’t have to repeat the tailPointer trickery twice.

> Source/WTF/wtf/text/StringStatics.cpp:56
> +unsigned StringImpl::computeHashForSymbol()

I think “compute” is not a great name for a function that has side effects. Maybe nextHashForSymbol() would be the right name for this.
Comment 13 Yusuke Suzuki 2015-04-30 01:11:20 PDT
Comment on attachment 252018 [details]
Patch

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

Thank you for your review!

>> Source/JavaScriptCore/runtime/Identifier.h:290
>> +    }
> 
> I think you could have left these as single line.

Right. Fixed.

>> Source/WTF/wtf/text/StringImpl.h:799
>> +    unsigned const& hashForSymbol() const
> 
> We normally write const unsigned& despite the fact that unsigned const& makes more sense.
> 
> I suggest implementing one of these two functions in terms of the other with a const_cast, so we don’t have to repeat the tailPointer trickery twice.

I see. Using const_cast and don't repeat the (almost) same implementations twice is nice.

>> Source/WTF/wtf/text/StringStatics.cpp:56
>> +unsigned StringImpl::computeHashForSymbol()
> 
> I think “compute” is not a great name for a function that has side effects. Maybe nextHashForSymbol() would be the right name for this.

Ah thanks! I've fixed.
Comment 14 Yusuke Suzuki 2015-04-30 01:32:41 PDT
Created attachment 252046 [details]
Patch
Comment 15 Yusuke Suzuki 2015-04-30 01:33:25 PDT
Ah, oops. Accidentally, I've uploaded the patch and drop r+...
I'll land it manually.
Comment 16 Yusuke Suzuki 2015-04-30 01:39:09 PDT
Committed r183624: <http://trac.webkit.org/changeset/183624>