Bug 138441 - PutById inline caches should have a store barrier when it triggers a structure transition
Summary: PutById inline caches should have a store barrier when it triggers a structur...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Mark Lam
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2014-11-05 14:45 PST by Mark Lam
Modified: 2014-11-05 17:54 PST (History)
10 users (show)

See Also:


Attachments
the patch. (5.22 KB, patch)
2014-11-05 15:23 PST, Mark Lam
ggaren: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Mark Lam 2014-11-05 14:45:08 PST
After r174025, we no longer insert DFG store barriers when the payload of a PutById is not a cell.  However, this can lead to a crash when we have PutById inline cache code transitioning the structure and re-allocating the butterfly of an old gen object.  The lack of a store barrier in that inline cache results in the old gen object not being noticed during an eden GC scan.  As a result, its newly allocated butterfly will not be kept alive.  The result is a stale butterfly pointer, and a crash.

It is also possible that the new structure can be collected by the eden GC if (at GC time):
1. It is in the eden gen.
2. The inline cache that installed it has been evicted.
3. There are no live young objects referring to it.

The chances of this should be more rare than the butterfly re-allocation, but it still possible.  Hence, the fix is to always add a store barrier if the inline caches performs a structure transition.

<rdar://problem/18801123>
Comment 1 Mark Lam 2014-11-05 15:23:17 PST
Created attachment 241063 [details]
the patch.

Ready for review.  Still running benchmarks and tests.
Comment 2 Geoffrey Garen 2014-11-05 17:37:58 PST
Comment on attachment 241063 [details]
the patch.

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

r=me

> Source/JavaScriptCore/jit/Repatch.cpp:1141
> +        callSlowWriteBarrier = stubJit.call();

Let's call this "callFlushWriteBarrierBuffer" to match the callee.
Comment 3 Mark Lam 2014-11-05 17:43:05 PST
JSC tests are happy.
The layout tests (with a debug build) shows no new failures.

The benchmarks are happy.  There is one "definitely slower" in dilatable in v8-spider.  Re-running v8-spider shows that it's within noise.  The raw data is below:

=== Start of Run 2 (re-running v8-spider) ===
                           base                      new                                        

crypto               82.9814+-1.1706     ?     82.9865+-1.9617        ?
deltablue           127.8655+-1.2272          127.3657+-2.7327        
earley-boyer         70.5808+-0.8139           70.3942+-1.4073        
raytrace             46.7735+-1.6568     ?     47.0367+-0.9740        ?
regexp              108.3636+-0.9357          108.1378+-0.5088        
richards            130.0345+-5.6110     ?    132.4417+-5.4411        ? might be 1.0185x slower
splay                48.7175+-1.1901           48.3646+-1.2289        

<arithmetic>         87.9024+-0.9051     ?     88.1039+-1.0148        ? might be 1.0023x slower
<geometric> *        81.5724+-0.6382     ?     81.6678+-0.9624        ? might be 1.0012x slower
<harmonic>           75.3657+-0.5478     ?     75.3885+-0.9423        ? might be 1.0003x slower
=== End of Run 2 (re-running v8-spider) ===


=== Start of Run 1 ===
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on albion (MacPro5,1).

VMs tested:
"base" at /Volumes/Data/ws6/OpenSource/WebKitBuild/Release/jsc (r175632)
"new" at /Volumes/Data/ws6/OpenSource/WebKitBuild/Release/jsc (r175632)

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.

                                                           base                      new                                        
SunSpider:
   3d-cube                                            7.7108+-0.1829            7.5006+-0.1659          might be 1.0280x faster
   3d-morph                                           9.5581+-0.1406     ?      9.6665+-0.1937        ? might be 1.0113x slower
   3d-raytrace                                        9.7131+-0.1978            9.6351+-0.4369        
   access-binary-trees                                3.0621+-0.1240            3.0015+-0.3039          might be 1.0202x faster
   access-fannkuch                                    9.4900+-0.1609            9.4758+-0.0681        
   access-nbody                                       4.6472+-0.3154            4.6429+-0.2522        
   access-nsieve                                      5.9235+-0.1050     ?      5.9310+-0.1517        ?
   bitops-3bit-bits-in-byte                           2.0347+-0.0711            2.0317+-0.1609        
   bitops-bits-in-byte                                6.4235+-0.2354     ?      6.4437+-0.2159        ?
   bitops-bitwise-and                                 3.3364+-0.1918     ?      3.3737+-0.0470        ? might be 1.0112x slower
   bitops-nsieve-bits                                 5.9090+-0.3244            5.8727+-0.2070        
   controlflow-recursive                              3.1896+-0.1701     ?      3.2841+-0.1725        ? might be 1.0296x slower
   crypto-aes                                         6.1117+-0.1570     ?      6.3442+-0.3134        ? might be 1.0380x slower
   crypto-md5                                         3.6940+-0.0940     ?      3.8061+-0.0614        ? might be 1.0303x slower
   crypto-sha1                                        3.7019+-0.0604     ?      3.7733+-0.1457        ? might be 1.0193x slower
   date-format-tofte                                 13.2891+-0.7913           13.2830+-0.5808        
   date-format-xparb                                  7.8760+-0.2403            7.8245+-0.3473        
   math-cordic                                        4.7478+-0.1088     ?      4.8157+-0.1486        ? might be 1.0143x slower
   math-partial-sums                                 10.3230+-0.2227           10.0965+-0.2670          might be 1.0224x faster
   math-spectral-norm                                 3.1989+-0.1462     ?      3.2260+-0.1810        ?
   regexp-dna                                        11.2968+-0.2096           11.2368+-0.0572        
   string-base64                                      6.6453+-0.3552            6.4608+-0.1264          might be 1.0286x faster
   string-fasta                                       9.9590+-0.2252     ?     10.0327+-0.1735        ?
   string-tagcloud                                   15.8279+-0.3010           15.3745+-0.5085          might be 1.0295x faster
   string-unpack-code                                31.2228+-0.4660     ?     31.6108+-0.3905        ? might be 1.0124x slower
   string-validate-input                              7.2657+-0.2663            7.1518+-0.1342          might be 1.0159x faster

   <arithmetic> *                                     7.9291+-0.0535            7.9191+-0.0777          might be 1.0013x faster
   <geometric>                                        6.5583+-0.0473     ?      6.5609+-0.0828        ? might be 1.0004x slower
   <harmonic>                                         5.5509+-0.0481     ?      5.5674+-0.0887        ? might be 1.0030x slower

                                                           base                      new                                        
LongSpider:
   3d-cube                                         1333.1201+-16.2128        1327.6330+-16.2675       
   3d-morph                                        2145.1569+-3.5508         2145.0031+-1.9527        
   3d-raytrace                                     1226.9623+-19.1280    ?   1228.5384+-14.4676       ?
   access-binary-trees                             1546.0508+-7.3893     ?   1548.2012+-12.7128       ?
   access-fannkuch                                  513.0499+-26.7984         507.5983+-22.6308         might be 1.0107x faster
   access-nbody                                    1154.4113+-3.4854         1153.5932+-1.1335        
   access-nsieve                                   1480.6443+-16.6350        1472.9544+-10.1167       
   bitops-3bit-bits-in-byte                          57.1558+-0.7462     ?     57.3834+-0.5120        ?
   bitops-bits-in-byte                              365.1354+-13.2954    ?    367.3586+-11.8971       ?
   bitops-nsieve-bits                              1118.6241+-4.1163     ?   1121.8655+-5.2633        ?
   controlflow-recursive                            825.5416+-2.1905     ?    826.1882+-1.4969        ?
   crypto-aes                                      1040.0266+-6.4344         1037.3589+-8.1221        
   crypto-md5                                       952.9652+-3.1638     ?    953.8689+-3.2149        ?
   crypto-sha1                                     1121.0267+-36.7007    ?   1129.9862+-58.7791       ?
   date-format-tofte                               1154.3032+-41.3040    ?   1154.9214+-52.2247       ?
   date-format-xparb                               1087.3959+-15.1382    ?   1089.0872+-4.5136        ?
   math-cordic                                      920.3326+-157.4465        917.9818+-157.4189      
   math-partial-sums                               1181.1353+-1.8307         1178.5022+-3.9437        
   math-spectral-norm                              1234.9307+-1.2758     ?   1236.9917+-1.7591        ?
   string-base64                                    530.5659+-1.0382     ?    533.8666+-5.6673        ?
   string-fasta                                     670.6835+-5.0418          667.3395+-2.6730        
   string-tagcloud                                  344.9683+-1.9122     ?    345.2249+-1.9733        ?

   <arithmetic>                                    1000.1903+-7.1116         1000.0658+-7.7640          might be 1.0001x faster
   <geometric> *                                    838.8638+-5.9653     ?    838.9701+-7.3926        ? might be 1.0001x slower
   <harmonic>                                       520.9641+-4.5969     ?    521.8720+-2.0253        ? might be 1.0017x slower

                                                           base                      new                                        
V8Spider:
   crypto                                            82.9459+-0.3310     ?     83.5803+-1.4642        ?
   deltablue                                        126.7830+-1.2151     !    128.4934+-0.3695        ! definitely 1.0135x slower
   earley-boyer                                      70.1245+-1.4350     ?     70.4117+-0.3805        ?
   raytrace                                          44.9864+-0.7254     ?     46.2694+-1.5432        ? might be 1.0285x slower
   regexp                                           107.9320+-0.4868     ?    108.4534+-1.3948        ?
   richards                                         132.0274+-4.0623     ?    132.0474+-7.8449        ?
   splay                                             48.9060+-1.6830           48.2582+-0.6638          might be 1.0134x faster

   <arithmetic>                                      87.6722+-0.7843     ?     88.2163+-1.3624        ? might be 1.0062x slower
   <geometric> *                                     81.1184+-0.7864     ?     81.6358+-0.8281        ? might be 1.0064x slower
   <harmonic>                                        74.6839+-0.9425     ?     75.1929+-0.5670        ? might be 1.0068x slower

                                                           base                      new                                        
Octane:
   encrypt                                           0.36326+-0.00670    ?     0.36582+-0.00781       ?
   decrypt                                           6.48350+-0.03091    ?     6.48652+-0.02435       ?
   deltablue                                x2       0.30582+-0.00844          0.30327+-0.00607       
   earley                                            1.14569+-0.02516          1.13579+-0.00729       
   boyer                                             9.93012+-0.13189          9.92490+-0.10217       
   navier-stokes                            x2       7.35404+-0.00886    ?     7.36314+-0.01208       ?
   raytrace                                 x2       1.87490+-0.02138    ?     1.88491+-0.01975       ?
   richards                                 x2       0.18983+-0.00575    ?     0.19080+-0.00413       ?
   splay                                    x2       0.62018+-0.00628          0.61443+-0.00511       
   regexp                                   x2      52.51603+-0.69161    ?    52.54830+-0.80600       ?
   pdfjs                                    x2      83.77453+-1.98307         82.82946+-0.94982         might be 1.0114x faster
   mandreel                                 x2      86.33503+-0.13971         86.12846+-0.67166       
   gbemu                                    x2      76.61980+-1.57337    ?    76.75806+-1.72390       ?
   closure                                           0.86088+-0.00237          0.86023+-0.00251       
   jquery                                           10.96513+-0.05567         10.94628+-0.05167       
   box2d                                    x2      22.70948+-0.26967    ?    22.73304+-0.22717       ?
   zlib                                     x2     736.26316+-77.97752       734.75708+-68.37104      
   typescript                               x2    1224.65100+-7.67484       1217.42725+-12.64926      

   <arithmetic>                                    153.87254+-5.69793        153.22653+-4.47518         might be 1.0042x faster
   <geometric> *                                    11.08606+-0.11681         11.06689+-0.07780         might be 1.0017x faster
   <harmonic>                                        1.11193+-0.01066          1.11136+-0.00725         might be 1.0005x faster

                                                           base                      new                                        
Kraken:
   ai-astar                                          539.880+-3.149            537.118+-1.885         
   audio-beat-detection                              180.490+-5.716      ?     183.268+-1.605         ? might be 1.0154x slower
   audio-dft                                         241.478+-2.475      ?     241.720+-1.792         ?
   audio-fft                                         123.017+-0.717            122.651+-0.527         
   audio-oscillator                                  362.620+-1.835            362.474+-0.917         
   imaging-darkroom                                  280.069+-0.616            279.753+-2.756         
   imaging-desaturate                                109.042+-0.337      ?     109.241+-0.420         ?
   imaging-gaussian-blur                             184.462+-13.349           180.711+-0.922           might be 1.0208x faster
   json-parse-financial                               78.243+-0.470             77.881+-1.106         
   json-stringify-tinderbox                           94.128+-1.179             93.839+-0.599         
   stanford-crypto-aes                                94.453+-0.732      ?      95.148+-1.934         ?
   stanford-crypto-ccm                                93.784+-3.086             89.885+-14.335          might be 1.0434x faster
   stanford-crypto-pbkdf2                            264.546+-1.924            264.298+-6.595         
   stanford-crypto-sha256-iterative                   82.042+-1.834             81.528+-0.177         

   <arithmetic> *                                    194.875+-0.638            194.251+-0.882           might be 1.0032x faster
   <geometric>                                       161.711+-0.522            160.963+-2.059           might be 1.0046x faster
   <harmonic>                                        138.310+-0.490            137.399+-2.985           might be 1.0066x faster

                                                           base                      new                                        
JSRegress:
   abs-boolean                                        4.1631+-0.0503     ?      4.2610+-0.1700        ? might be 1.0235x slower
   adapt-to-double-divide                            20.6345+-0.7366     ?     20.7902+-0.6884        ?
   aliased-arguments-getbyval                         1.2665+-0.1243     ?      1.2970+-0.0754        ? might be 1.0241x slower
   allocate-big-object                                3.5328+-0.4861            3.4908+-0.4345          might be 1.0120x faster
   arity-mismatch-inlining                            1.1868+-0.0633     ?      1.1946+-0.1699        ?
   array-access-polymorphic-structure                10.4805+-0.4065     ?     10.6491+-0.2718        ? might be 1.0161x slower
   array-nonarray-polymorhpic-access                 56.6180+-4.4577     ?     58.0985+-0.3116        ? might be 1.0261x slower
   array-prototype-every                            117.3654+-4.0685     ?    118.3048+-3.1044        ?
   array-prototype-forEach                          118.5209+-3.2443          117.8113+-2.7713        
   array-prototype-map                              148.6096+-5.3217          148.2692+-4.6532        
   array-prototype-some                             118.0407+-2.3265     ?    118.2228+-4.3050        ?
   array-splice-contiguous                           65.9985+-0.7964     ?     66.6783+-0.8985        ? might be 1.0103x slower
   array-with-double-add                              6.3335+-0.1077            6.3065+-0.1015        
   array-with-double-increment                        4.6702+-0.1515     ?      4.7452+-0.1015        ? might be 1.0161x slower
   array-with-double-mul-add                          8.1648+-0.1545            8.0247+-0.1691          might be 1.0175x faster
   array-with-double-sum                              4.8958+-0.0982            4.8737+-0.0814        
   array-with-int32-add-sub                          11.0680+-0.1699           11.0289+-0.2229        
   array-with-int32-or-double-sum                     5.0012+-0.1042            4.9988+-0.1470        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     52.0885+-0.3478           51.8484+-1.5168        
   ArrayBuffer-DataView-alloc-long-lived             21.8959+-2.3721           21.8540+-1.5512        
   ArrayBuffer-Int32Array-byteOffset                  5.2354+-0.2909            5.2337+-0.1261        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     55.6279+-0.8499     ?     56.4603+-2.0620        ? might be 1.0150x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     36.3349+-2.6896           35.4420+-1.9772          might be 1.0252x faster
   ArrayBuffer-Int8Array-alloc-long-lived            20.4155+-1.2538     ?     21.5081+-1.6693        ? might be 1.0535x slower
   ArrayBuffer-Int8Array-alloc                       17.4146+-1.2194           17.2297+-2.2057          might be 1.0107x faster
   asmjs_bool_bug                                    10.1797+-0.1791           10.0053+-0.1330          might be 1.0174x faster
   assign-custom-setter-polymorphic                   5.0992+-0.6320            4.9418+-0.0803          might be 1.0319x faster
   assign-custom-setter                               6.4642+-0.3341     ?      6.5393+-0.1661        ? might be 1.0116x slower
   basic-set                                         15.3381+-0.7281     ?     15.5065+-0.5026        ? might be 1.0110x slower
   big-int-mul                                        6.5469+-0.0392     ?      6.6272+-0.1480        ? might be 1.0123x slower
   boolean-test                                       4.8189+-0.1848     ?      4.8285+-0.0898        ?
   branch-fold                                        5.2289+-0.2453     ?      5.2465+-0.0253        ?
   by-val-generic                                    12.7009+-0.3408     ?     12.7783+-0.5839        ?
   call-spread-apply                                 19.9489+-0.5357     ?     20.1910+-0.6531        ? might be 1.0121x slower
   call-spread-call                                   8.8018+-0.1914            8.7730+-0.3792        
   captured-assignments                               0.7390+-0.1029     ?      0.7760+-0.1232        ? might be 1.0500x slower
   cast-int-to-double                                 9.3575+-0.2910            9.2399+-0.1938          might be 1.0127x faster
   cell-argument                                     11.3303+-0.7320     ?     11.7093+-0.6414        ? might be 1.0335x slower
   cfg-simplify                                       4.0828+-0.1267     ?      4.1403+-0.1484        ? might be 1.0141x slower
   chain-getter-access                               14.7283+-0.2450           14.6265+-0.3232        
   cmpeq-obj-to-obj-other                            13.9526+-0.4796           13.6591+-0.8101          might be 1.0215x faster
   constant-test                                      8.6625+-0.0820     ?      8.6691+-0.2282        ?
   DataView-custom-properties                        59.1028+-1.2333     ?     60.4602+-1.7960        ? might be 1.0230x slower
   delay-tear-off-arguments-strictmode                3.7916+-0.1042            3.7628+-0.1528        
   destructuring-arguments                            8.9420+-0.4272            8.8617+-0.1091        
   destructuring-swap                                 8.8248+-0.1216            8.7610+-0.1743        
   direct-arguments-getbyval                          1.3688+-0.2073            1.3180+-0.1252          might be 1.0386x faster
   div-boolean-double                                 6.2582+-0.0839     ?      6.3101+-0.0781        ?
   div-boolean                                       11.1657+-0.0529     ?     11.2402+-0.1437        ?
   double-get-by-val-out-of-bounds                    6.8661+-0.1790     ?      6.9277+-0.0943        ?
   double-pollution-getbyval                         11.0887+-0.1948           11.0363+-0.2185        
   double-pollution-putbyoffset                       6.2321+-0.2793     ?      6.2729+-0.1514        ?
   double-to-int32-typed-array-no-inline              3.1509+-0.2242     ?      3.1854+-0.0859        ? might be 1.0109x slower
   double-to-int32-typed-array                        2.8615+-0.0567            2.7711+-0.1842          might be 1.0326x faster
   double-to-uint32-typed-array-no-inline             3.2595+-0.0976            3.2131+-0.2519          might be 1.0144x faster
   double-to-uint32-typed-array                       2.8711+-0.1575     ?      2.9172+-0.1010        ? might be 1.0161x slower
   elidable-new-object-dag                           60.1780+-2.0402     ?     60.9244+-1.7257        ? might be 1.0124x slower
   elidable-new-object-roflcopter                   226.7963+-1.7466     ?    227.8820+-2.5128        ?
   elidable-new-object-then-call                     57.4380+-5.5320     ?     60.5917+-3.8055        ? might be 1.0549x slower
   elidable-new-object-tree                          69.4826+-2.1378           68.9191+-2.1999        
   empty-string-plus-int                              8.3273+-0.1327            8.1942+-0.1416          might be 1.0162x faster
   emscripten-cube2hash                              52.9150+-1.4881     ?     53.2257+-1.6131        ?
   external-arguments-getbyval                        2.1085+-0.1231            2.0749+-0.1793          might be 1.0162x faster
   external-arguments-putbyval                        3.2739+-0.1604            3.1666+-0.0733          might be 1.0339x faster
   fixed-typed-array-storage-var-index                1.7460+-0.1647     ?      1.7579+-0.1397        ?
   fixed-typed-array-storage                          1.2939+-0.0876     ?      1.3383+-0.0317        ? might be 1.0342x slower
   Float32Array-matrix-mult                           6.6221+-0.5241     ?      6.7838+-0.6493        ? might be 1.0244x slower
   Float32Array-to-Float64Array-set                  91.2040+-4.0987           91.1055+-2.1155        
   Float64Array-alloc-long-lived                     98.6553+-1.2867           98.3096+-0.2197        
   Float64Array-to-Int16Array-set                   105.1567+-0.4697          105.0001+-0.4713        
   fold-double-to-int                                20.0325+-0.2346     ?     20.0461+-0.3318        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     27.3409+-2.1126           26.2881+-0.5610          might be 1.0400x faster
   fold-get-by-id-to-multi-get-by-offset             25.3150+-1.5848     ?     26.0165+-2.6594        ? might be 1.0277x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                     18.2576+-0.5806     ?     18.9356+-0.1033        ? might be 1.0371x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     18.3865+-0.4149           18.1356+-0.2688          might be 1.0138x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     18.7703+-1.9159     ?     18.9954+-0.7164        ? might be 1.0120x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     16.7549+-0.2813     ?     17.7465+-1.9128        ? might be 1.0592x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     22.3734+-0.1977     ?     22.5104+-0.5958        ?
   fold-put-by-id-to-multi-put-by-offset             27.8679+-2.3672           27.2734+-1.1381          might be 1.0218x faster
   fold-put-structure                                17.0443+-0.4927     ?     17.3036+-0.1999        ? might be 1.0152x slower
   for-of-iterate-array-entries                       8.7953+-0.5223            8.7378+-0.2148        
   for-of-iterate-array-keys                          4.2797+-0.2565     ?      4.3210+-0.2754        ?
   for-of-iterate-array-values                        3.9532+-0.2383            3.7375+-0.1509          might be 1.0577x faster
   fround                                            25.5994+-1.1030     ?     25.7698+-0.1932        ?
   ftl-library-inlining-dataview                    105.8339+-3.5403          104.9280+-0.1371        
   ftl-library-inlining                             101.5806+-2.0905          100.4156+-0.1489          might be 1.0116x faster
   function-dot-apply                                 2.5223+-0.0603            2.4702+-0.1383          might be 1.0211x faster
   function-test                                      5.2675+-0.2565            5.2198+-0.4260        
   function-with-eval                               172.4597+-2.4075     ?    172.7962+-2.7905        ?
   gcse-poly-get-less-obvious                        28.4269+-0.1477     ?     28.4977+-0.3496        ?
   gcse-poly-get                                     28.3622+-0.2106     ?     28.3862+-0.2359        ?
   gcse                                               7.2984+-0.2400            7.2861+-0.1180        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.7209+-0.1688            3.7073+-0.0645        
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.3388+-0.1887     ?      9.3574+-0.3235        ?
   get-by-id-chain-from-try-block                    17.8676+-0.3029           17.5131+-0.1020          might be 1.0202x faster
   get-by-id-check-structure-elimination              8.4736+-0.3158     ?      8.6105+-0.0834        ? might be 1.0162x slower
   get-by-id-proto-or-self                           26.0175+-1.7655           25.9824+-1.5391        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.4435+-0.0328            4.4376+-0.0513        
   get-by-id-self-or-proto                           26.9262+-3.1036     ?     27.6690+-2.9892        ? might be 1.0276x slower
   get-by-val-out-of-bounds                           6.7737+-0.1688     ?      6.8733+-0.2203        ? might be 1.0147x slower
   get_callee_monomorphic                             5.8738+-0.2542            5.7171+-0.5147          might be 1.0274x faster
   get_callee_polymorphic                             4.9135+-0.1261            4.7496+-0.1139          might be 1.0345x faster
   getter-no-activation                               6.5065+-0.0993     ?      6.5676+-0.1071        ?
   getter-richards                                  192.1076+-18.8797    ?    194.4346+-13.9679       ? might be 1.0121x slower
   getter                                             7.5003+-0.1755            7.3662+-0.1626          might be 1.0182x faster
   global-var-const-infer-fire-from-opt               1.5093+-0.2696            1.3338+-0.1184          might be 1.1316x faster
   global-var-const-infer                             1.3847+-0.2097            1.2709+-0.1918          might be 1.0895x faster
   HashMap-put-get-iterate-keys                      41.2615+-0.2282           40.9263+-0.4442        
   HashMap-put-get-iterate                           40.8093+-1.0773           40.6593+-1.0959        
   HashMap-string-put-get-iterate                    38.6953+-1.6488           38.5407+-1.4537        
   hoist-make-rope                                   16.1783+-3.4032     ?     17.4655+-0.8126        ? might be 1.0796x slower
   hoist-poly-check-structure-effectful-loop   
                                                      7.2843+-0.2379     ?      7.4351+-0.1023        ? might be 1.0207x slower
   hoist-poly-check-structure                         5.4272+-0.1085     ?      5.4758+-0.2227        ?
   imul-double-only                                  11.6577+-0.6777     ?     11.6974+-0.5539        ?
   imul-int-only                                     14.0948+-1.0739     ?     14.2753+-0.9849        ? might be 1.0128x slower
   imul-mixed                                        10.9638+-0.3048     ?     11.0515+-0.4007        ?
   in-four-cases                                     27.1639+-0.5055     ?     27.2751+-0.4101        ?
   in-one-case-false                                 14.1995+-0.1855     ?     14.2211+-0.2223        ?
   in-one-case-true                                  14.3170+-0.1602           14.1969+-0.1894        
   in-two-cases                                      14.8217+-0.1888           14.6805+-0.1373        
   indexed-properties-in-objects                      4.2988+-0.1370     ?      4.3268+-0.1315        ?
   infer-closure-const-then-mov-no-inline             5.0044+-0.0459     ?      5.0240+-0.0846        ?
   infer-closure-const-then-mov                      27.9688+-0.1908     ?     28.1130+-0.3754        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.1475+-0.3301     ?     17.2368+-0.1381        ?
   infer-closure-const-then-put-to-scope             32.1221+-0.3930           31.8705+-0.2382        
   infer-closure-const-then-reenter-no-inline   
                                                     73.8111+-0.1612     ?     73.9678+-0.2286        ?
   infer-closure-const-then-reenter                  32.0594+-0.4520           31.7745+-0.2844        
   infer-constant-global-property                     5.3455+-0.0681            5.3213+-0.0945        
   infer-constant-property                            3.7393+-0.1187     ?      3.7405+-0.1575        ?
   infer-one-time-closure-ten-vars                   16.1230+-0.7073           16.0197+-0.2510        
   infer-one-time-closure-two-vars                   16.3003+-0.3845           16.1303+-0.5267          might be 1.0105x faster
   infer-one-time-closure                            15.8395+-0.6472     ?     16.0261+-0.2898        ? might be 1.0118x slower
   infer-one-time-deep-closure                       28.1194+-0.2524           28.0402+-0.1714        
   inline-arguments-access                            2.4158+-0.1835            2.4148+-0.0645        
   inline-arguments-aliased-access                    2.7497+-0.2118            2.6597+-0.0782          might be 1.0338x faster
   inline-arguments-local-escape                     18.7795+-0.3268           18.5490+-0.3420          might be 1.0124x faster
   inline-get-scoped-var                              6.3769+-0.1493     ?      6.4465+-0.1665        ? might be 1.0109x slower
   inlined-put-by-id-transition                      14.5955+-0.7530           14.3987+-0.1975          might be 1.0137x faster
   int-or-other-abs-then-get-by-val                   7.8982+-0.0925     ?      7.9332+-0.2898        ?
   int-or-other-abs-zero-then-get-by-val             30.4277+-0.3157           30.3200+-0.0426        
   int-or-other-add-then-get-by-val                   6.5722+-0.2378     ?      6.7928+-0.0943        ? might be 1.0336x slower
   int-or-other-add                                   8.8845+-0.2070     ?      8.9659+-0.1314        ?
   int-or-other-div-then-get-by-val                   5.9057+-0.0968            5.6932+-0.1777          might be 1.0373x faster
   int-or-other-max-then-get-by-val                   7.6295+-0.2556            7.4570+-0.1027          might be 1.0231x faster
   int-or-other-min-then-get-by-val                   6.0103+-0.0488     ?      6.0257+-0.1094        ?
   int-or-other-mod-then-get-by-val                   5.8036+-0.0492     ?      5.8546+-0.0975        ?
   int-or-other-mul-then-get-by-val                   5.6374+-0.1695     ?      5.7545+-0.1807        ? might be 1.0208x slower
   int-or-other-neg-then-get-by-val                   7.1462+-0.1779            7.0687+-0.0844          might be 1.0110x faster
   int-or-other-neg-zero-then-get-by-val             30.1871+-0.3581     ?     30.3138+-0.3928        ?
   int-or-other-sub-then-get-by-val                   6.8007+-0.2228            6.7415+-0.1076        
   int-or-other-sub                                   5.8382+-0.1543     ?      5.9107+-0.0930        ? might be 1.0124x slower
   int-overflow-local                                 6.5865+-0.1894            6.5865+-0.1479        
   Int16Array-alloc-long-lived                       69.3333+-0.9877     ?     69.5580+-0.2875        ?
   Int16Array-bubble-sort-with-byteLength            44.9703+-0.3376     ?     45.1652+-0.4600        ?
   Int16Array-bubble-sort                            43.9740+-0.4705           43.8124+-0.1480        
   Int16Array-load-int-mul                            2.2486+-0.0850            2.2251+-0.0940          might be 1.0106x faster
   Int16Array-to-Int32Array-set                      85.0925+-1.5504     ?     86.6466+-2.7631        ? might be 1.0183x slower
   Int32Array-alloc-large                            38.8806+-0.8456           38.7410+-1.2514        
   Int32Array-alloc-long-lived                       77.2256+-0.7552     ?     77.3455+-0.6883        ?
   Int32Array-alloc                                   4.4130+-0.1975     ?      4.5422+-0.0444        ? might be 1.0293x slower
   Int32Array-Int8Array-view-alloc                    9.9979+-0.3843     ?     10.0218+-0.3360        ?
   int52-spill                                        9.8630+-0.2216            9.8511+-0.4173        
   Int8Array-alloc-long-lived                        63.3047+-0.9542           62.9261+-0.8190        
   Int8Array-load-with-byteLength                     5.3712+-0.0536     ?      5.3895+-0.0353        ?
   Int8Array-load                                     5.4045+-0.1029     ?      5.4268+-0.1568        ?
   integer-divide                                    16.4041+-0.0440           16.3264+-0.1931        
   integer-modulo                                     3.1782+-0.1391            3.1506+-0.1569        
   large-int-captured                                 9.9332+-0.2951     ?      9.9991+-0.1260        ?
   large-int-neg                                     23.4200+-0.3708     ?     23.4615+-0.0999        ?
   large-int                                         21.0140+-0.4971           20.9979+-0.4106        
   logical-not                                        6.9606+-0.3751            6.8919+-0.2255        
   lots-of-fields                                    15.8227+-0.3158           15.6618+-0.2877          might be 1.0103x faster
   make-indexed-storage                               4.6394+-0.1902            4.3648+-0.5294          might be 1.0629x faster
   make-rope-cse                                      6.2187+-0.4656            6.2034+-0.2740        
   marsaglia-larger-ints                             64.3711+-0.7698           63.7964+-0.8763        
   marsaglia-osr-entry                               32.3292+-0.7241           31.6858+-0.4001          might be 1.0203x faster
   max-boolean                                        3.6928+-0.0665     ?      3.7140+-0.0690        ?
   method-on-number                                  26.4035+-0.5871     ?     26.9631+-1.4138        ? might be 1.0212x slower
   min-boolean                                        3.7292+-0.1063            3.6640+-0.1526          might be 1.0178x faster
   minus-boolean-double                               4.7460+-0.0945     ?      4.7672+-0.0839        ?
   minus-boolean                                      3.6267+-0.0682     ?      3.6631+-0.1046        ? might be 1.0100x slower
   misc-strict-eq                                    62.7381+-0.6039     ?     64.5027+-8.4910        ? might be 1.0281x slower
   mod-boolean-double                                13.3830+-0.1178           13.3262+-0.1702        
   mod-boolean                                       10.1968+-0.1210           10.0786+-0.3492          might be 1.0117x faster
   mul-boolean-double                                 5.5607+-0.0539            5.5407+-0.0959        
   mul-boolean                                        3.9907+-0.0433     ?      3.9991+-0.0942        ?
   neg-boolean                                        4.8756+-0.1079            4.8442+-0.0816        
   negative-zero-divide                               0.5137+-0.0824     ?      0.5978+-0.0985        ? might be 1.1637x slower
   negative-zero-modulo                               0.5793+-0.0445            0.5203+-0.0911          might be 1.1133x faster
   negative-zero-negate                               0.5425+-0.1009     ?      0.5475+-0.0986        ?
   nested-function-parsing                           35.3429+-0.4282     ?     35.5314+-0.5264        ?
   new-array-buffer-dead                              4.1840+-0.1201            4.0891+-0.0788          might be 1.0232x faster
   new-array-buffer-push                             10.6068+-0.3360     ?     10.7335+-0.5192        ? might be 1.0120x slower
   new-array-dead                                    18.0568+-0.8132           17.8026+-2.0187          might be 1.0143x faster
   new-array-push                                     7.6938+-0.4593            7.6136+-0.4226          might be 1.0105x faster
   number-test                                        4.7355+-0.0973            4.7263+-0.1792        
   object-closure-call                                9.0123+-0.1554     ?      9.0856+-0.2060        ?
   object-test                                        5.0338+-0.1843     ?      5.2270+-0.2014        ? might be 1.0384x slower
   obvious-sink-pathology-taken                     193.1308+-4.3881     ?    193.4605+-3.5493        ?
   obvious-sink-pathology                           182.8864+-1.6314     ?    183.3647+-1.3596        ?
   obviously-elidable-new-object                     54.4272+-4.3139     ?     55.7643+-0.9572        ? might be 1.0246x slower
   plus-boolean-arith                                 3.7715+-0.0699            3.7708+-0.0856        
   plus-boolean-double                                4.7588+-0.1548     ?      4.8088+-0.1525        ? might be 1.0105x slower
   plus-boolean                                       3.6003+-0.0970            3.5986+-0.1636        
   poly-chain-access-different-prototypes-simple   
                                                      4.3901+-0.1139            4.3684+-0.1098        
   poly-chain-access-different-prototypes             3.7127+-0.1669            3.6774+-0.1273        
   poly-chain-access-simpler                          4.4097+-0.0524            4.4069+-0.1152        
   poly-chain-access                                  3.2458+-0.7854     ?      3.2871+-0.6239        ? might be 1.0127x slower
   poly-stricteq                                     78.9216+-0.2204           78.8512+-0.2042        
   polymorphic-array-call                             2.6255+-0.1611     ?      2.8098+-0.2170        ? might be 1.0702x slower
   polymorphic-get-by-id                              4.7592+-0.1520            4.7288+-0.1615        
   polymorphic-put-by-id                             65.9108+-40.8098          51.2645+-9.1029          might be 1.2857x faster
   polymorphic-structure                             25.4593+-2.0687           25.2181+-2.5523        
   polyvariant-monomorphic-get-by-id                 13.1194+-0.1963     ?     13.1890+-0.2291        ?
   proto-getter-access                               14.8884+-0.5178           14.6929+-0.2292          might be 1.0133x faster
   put-by-id-replace-and-transition                  12.3292+-0.3191           12.3202+-0.2364        
   put-by-id-slightly-polymorphic                     3.9644+-0.0733     ?      4.0188+-0.1173        ? might be 1.0137x slower
   put-by-id                                         20.1829+-0.5304     ?     20.2830+-0.3572        ?
   put-by-val-direct                                  0.8912+-0.1572     ?      0.9322+-0.1469        ? might be 1.0460x slower
   put-by-val-large-index-blank-indexing-type   
                                                      9.1901+-0.1787     ?      9.3301+-0.2704        ? might be 1.0152x slower
   put-by-val-machine-int                             3.7016+-0.0620            3.6334+-0.1871          might be 1.0188x faster
   rare-osr-exit-on-local                            20.6352+-0.3933     ?     20.7323+-0.2305        ?
   register-pressure-from-osr                        30.5410+-0.3514     ?     30.6889+-0.5393        ?
   setter                                             7.3904+-0.2401            7.3760+-0.0759        
   simple-activation-demo                            37.3148+-0.3246     ?     37.3370+-0.4877        ?
   simple-getter-access                              20.2988+-0.2373     ?     20.3937+-0.2283        ?
   simple-poly-call-nested                           24.3596+-2.1478     ?     25.5200+-0.6094        ? might be 1.0476x slower
   simple-poly-call                                   1.9127+-0.0841            1.7471+-0.1449          might be 1.0948x faster
   sin-boolean                                       29.1750+-4.3924           28.2089+-2.8591          might be 1.0342x faster
   sinkable-new-object-dag                          105.6507+-2.0809          105.3959+-1.6423        
   sinkable-new-object-taken                         79.8982+-5.1309     ?     80.5720+-5.7387        ?
   sinkable-new-object                               59.8780+-3.3559           59.4673+-1.9124        
   slow-array-profile-convergence                     4.3970+-0.1738            4.3038+-0.2912          might be 1.0217x faster
   slow-convergence                                   5.1273+-0.2973     ?      5.1501+-0.2223        ?
   sparse-conditional                                 1.6600+-0.1304     ?      1.7200+-0.1091        ? might be 1.0361x slower
   splice-to-remove                                  25.9040+-6.3450           23.9104+-0.9035          might be 1.0834x faster
   string-char-code-at                               22.5710+-0.3281     ?     22.5760+-0.1379        ?
   string-concat-object                               2.8878+-0.0542     ?      2.8912+-0.1062        ?
   string-concat-pair-object                          3.0504+-0.3916            2.8508+-0.0940          might be 1.0700x faster
   string-concat-pair-simple                         17.4365+-0.2055           17.2180+-0.1933          might be 1.0127x faster
   string-concat-simple                              17.7892+-0.9581           17.7352+-0.5841        
   string-cons-repeat                                11.6409+-0.2639           11.5594+-0.3281        
   string-cons-tower                                 10.9717+-0.7389           10.6776+-0.3984          might be 1.0276x faster
   string-equality                                   25.3356+-0.2002           25.2435+-0.2721        
   string-get-by-val-big-char                        11.1638+-0.6235           10.9599+-0.2861          might be 1.0186x faster
   string-get-by-val-out-of-bounds-insane             6.2275+-0.2855     ?      6.3068+-0.1624        ? might be 1.0127x slower
   string-get-by-val-out-of-bounds                    7.7307+-0.0646     ?      7.7767+-0.2443        ?
   string-get-by-val                                  5.4383+-0.1003     ?      5.4775+-0.1048        ?
   string-hash                                        3.1227+-0.1067            3.1019+-0.0705        
   string-long-ident-equality                        20.7353+-0.3528           20.5071+-0.3715          might be 1.0111x faster
   string-repeat-arith                               46.6816+-1.1185     ?     46.8887+-1.1672        ?
   string-sub                                        92.6799+-2.8343           91.2147+-0.9082          might be 1.0161x faster
   string-test                                        4.8079+-0.1593            4.7448+-0.1098          might be 1.0133x faster
   string-var-equality                               49.8838+-0.5495     ?     49.9105+-0.2640        ?
   structure-hoist-over-transitions                   4.0237+-0.1497            3.7920+-0.2644          might be 1.0611x faster
   substring-concat-weird                            60.2033+-0.3329           60.1250+-0.6760        
   substring-concat                                  63.6879+-0.4284     ?     63.7352+-0.3766        ?
   substring                                         71.2977+-1.1155           70.8245+-0.1884        
   switch-char-constant                               3.7321+-0.1386     ?      3.8049+-0.0881        ? might be 1.0195x slower
   switch-char                                        9.0539+-0.1118     ?      9.0677+-0.0960        ?
   switch-constant                                   16.0558+-0.4754           15.6205+-1.0968          might be 1.0279x faster
   switch-string-basic-big-var                       24.9419+-2.1798           24.3000+-2.6618          might be 1.0264x faster
   switch-string-basic-big                           26.2802+-6.0119           24.8378+-1.5962          might be 1.0581x faster
   switch-string-basic-var                           31.1710+-1.2060           30.5059+-0.5550          might be 1.0218x faster
   switch-string-basic                               27.9785+-0.5688           27.9263+-0.4390        
   switch-string-big-length-tower-var                29.0103+-0.2376           28.8912+-0.2907        
   switch-string-length-tower-var                    22.6331+-0.2243     ?     22.6807+-0.1489        ?
   switch-string-length-tower                        17.0455+-0.2459           17.0167+-0.3014        
   switch-string-short                               17.0472+-0.2904     ?     17.1395+-0.0973        ?
   switch                                            17.0483+-5.6390     ?     18.3518+-5.9007        ? might be 1.0765x slower
   tear-off-arguments-simple                          2.6840+-0.1897     ?      2.6915+-0.1327        ?
   tear-off-arguments                                 4.1147+-0.1977            4.0338+-0.1784          might be 1.0200x faster
   temporal-structure                                19.8411+-0.3220           19.7670+-0.1565        
   to-int32-boolean                                  23.6723+-0.2690     ?     23.6812+-0.2819        ?
   undefined-test                                     4.8489+-0.2051     ?      4.9797+-0.0860        ? might be 1.0270x slower
   unprofiled-licm                                   31.8737+-0.7408           31.2333+-1.1014          might be 1.0205x faster
   weird-inlining-const-prop                          2.8970+-0.3439            2.7829+-0.1086          might be 1.0410x faster

   <arithmetic>                                      24.2193+-0.1807           24.1929+-0.0571          might be 1.0011x faster
   <geometric> *                                     11.9491+-0.0637           11.9300+-0.0327          might be 1.0016x faster
   <harmonic>                                         6.1166+-0.1025            6.1098+-0.0191          might be 1.0011x faster

                                                           base                      new                                        
AsmBench:
   bigfib.cpp                                       765.3113+-9.5552          763.2983+-6.2206        
   cray.c                                           775.7889+-2.5842          775.7218+-2.9207        
   dry.c                                            742.1899+-16.4512    ?    751.5627+-1.8093        ? might be 1.0126x slower
   FloatMM.c                                       1100.5737+-2.8897         1098.7407+-1.8540        
   gcc-loops.cpp                                   6741.5075+-18.4717    ?   6747.2728+-25.2418       ?
   n-body.c                                        1913.2250+-2.9021     ?   1914.6421+-3.2386        ?
   Quicksort.c                                      669.5978+-1.0605     ?    670.1346+-4.7238        ?
   stepanov_container.cpp                          5561.4227+-36.6834    ?   5561.8893+-15.2593       ?
   Towers.c                                         456.7777+-2.2341          456.5948+-2.3970        

   <arithmetic>                                    2080.7105+-6.2736     ?   2082.2063+-2.9414        ? might be 1.0007x slower
   <geometric> *                                   1300.4707+-5.2685     ?   1301.9607+-1.9934        ? might be 1.0011x slower
   <harmonic>                                       958.9394+-4.7436     ?    960.2415+-1.7953        ? might be 1.0014x slower

                                                           base                      new                                        
CompressionBench:
   huffman                                          766.5085+-18.8498         765.0837+-31.6104       
   arithmetic-simple                                658.4100+-3.8763     ?    661.7753+-9.5518        ?
   arithmetic-precise                               487.0505+-9.7649          483.1703+-0.9230        
   arithmetic-complex-precise                       485.2621+-5.7781          481.6537+-2.2042        
   arithmetic-precise-order-0                       705.6872+-14.6751         696.1768+-11.3209         might be 1.0137x faster
   arithmetic-precise-order-1                       534.6540+-6.9562     ?    537.1047+-6.1721        ?
   arithmetic-precise-order-2                       611.8352+-15.5463         609.1827+-2.3624        
   arithmetic-simple-order-1                        675.4501+-2.2608          674.1208+-3.6378        
   arithmetic-simple-order-2                        761.1940+-3.9704          759.6733+-3.8439        
   lz-string                                        491.4716+-5.3958          489.9752+-7.7746        

   <arithmetic>                                     617.7523+-5.8621          615.7917+-3.5233          might be 1.0032x faster
   <geometric> *                                    608.4656+-5.7111          606.4797+-3.0508          might be 1.0033x faster
   <harmonic>                                       599.1991+-5.6306          597.1748+-2.6749          might be 1.0034x faster

                                                           base                      new                                        
All benchmarks:
   <arithmetic>                                     156.4079+-0.4644          156.3048+-0.6576          might be 1.0007x faster
   <geometric>                                       20.1840+-0.0685           20.1571+-0.0564          might be 1.0013x faster
   <harmonic>                                         5.1155+-0.0447            5.1123+-0.0188          might be 1.0006x faster

                                                           base                      new                                        
Geomean of preferred means:
   <scaled-result>                                  101.2226+-0.3062          101.1790+-0.2300          might be 1.0004x faster
=== End of Run 1 ===
Comment 4 Mark Lam 2014-11-05 17:44:37 PST
(In reply to comment #3)
> ... in dilatable in v8-spider.  ...

I meant "deltablue".
Comment 5 Mark Lam 2014-11-05 17:54:20 PST
Thanks for the review.  I've renamed the var as suggested.

Landed in r175653: <http://trac.webkit.org/r175653>.