Bug 125523

Summary: Rationalize DFG DCE
Product: WebKit Reporter: Filip Pizlo <fpizlo>
Component: JavaScriptCoreAssignee: Filip Pizlo <fpizlo>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, ggaren, mark.lam, mhahnenberg, msaboff, nrotem, oliver, sam
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Bug Depends on: 125531    
Bug Blocks: 125519, 126239    
Attachments:
Description Flags
work in progress
none
more
none
the patch mhahnenberg: review+

Description Filip Pizlo 2013-12-10 11:00:08 PST
The current DFG DCE has some holes:

- It's generally unsound with respect to forward-exiting nodes.

- It intentionally avoids many opportunities for DCE, thereby masking the above bug, bug probably costing us some performance.

We should be more aggressive about DCE especially when it's sound to do so, and we should make it work right for forward exits.
Comment 1 Filip Pizlo 2013-12-10 11:00:45 PST
Created attachment 218882 [details]
work in progress

I'm basically fixing bugs and then writing tests which reveal more bugs.

It's kind of fun.
Comment 2 Filip Pizlo 2013-12-15 14:27:30 PST
Created attachment 219283 [details]
more
Comment 3 Filip Pizlo 2014-01-01 09:47:32 PST
Created attachment 220186 [details]
the patch
Comment 4 Mark Hahnenberg 2014-01-02 10:26:26 PST
Comment on attachment 220186 [details]
the patch

r=me
Comment 5 Mark Hahnenberg 2014-01-02 10:28:27 PST
(In reply to comment #4)
> (From update of attachment 220186 [details])
> r=me

You mentioned you wrote tests that revealed these bugs. Where are they?
Comment 6 Filip Pizlo 2014-01-02 10:31:16 PST
(In reply to comment #5)
> (In reply to comment #4)
> > (From update of attachment 220186 [details] [details])
> > r=me
> 
> You mentioned you wrote tests that revealed these bugs. Where are they?

Already landed in http://trac.webkit.org/changeset/161126
Comment 7 Mark Hahnenberg 2014-01-02 10:32:13 PST
(In reply to comment #6)
> (In reply to comment #5)
> > (In reply to comment #4)
> > > (From update of attachment 220186 [details] [details] [details])
> > > r=me
> > 
> > You mentioned you wrote tests that revealed these bugs. Where are they?
> 
> Already landed in http://trac.webkit.org/changeset/161126

Boomshockalocka.
Comment 8 Filip Pizlo 2014-01-02 12:11:30 PST
These performance numbers are amusing.


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

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r161126)
"DCE" at /Volumes/Data/fromMiniMe/tertiary/OpenSource/WebKitBuild/Release/jsc (r161126)

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

                                                        TipOfTree                    DCE                                        
SunSpider:
   3d-cube                                            8.1320+-0.0595     ^      7.6937+-0.0753        ^ definitely 1.0570x faster
   3d-morph                                           8.8562+-0.1206            8.8468+-0.0710        
   3d-raytrace                                        9.5668+-0.0715            9.4886+-0.1086        
   access-binary-trees                                2.1611+-0.0539            2.1427+-0.0184        
   access-fannkuch                                    8.1500+-0.0614            8.0368+-0.0836          might be 1.0141x faster
   access-nbody                                       4.2495+-0.0444     ?      4.2820+-0.0612        ?
   access-nsieve                                      5.0173+-0.0289     ?      5.0355+-0.0764        ?
   bitops-3bit-bits-in-byte                           2.0006+-0.0246     ?      2.0126+-0.0419        ?
   bitops-bits-in-byte                                7.1954+-0.0622            7.1838+-0.0709        
   bitops-bitwise-and                                 3.0898+-0.0322            3.0650+-0.0459        
   bitops-nsieve-bits                                 4.7083+-0.0139     !      5.2769+-0.0226        ! definitely 1.1208x slower
   controlflow-recursive                              3.2210+-0.0543            3.1919+-0.0292        
   crypto-aes                                         5.6242+-0.0692            5.5986+-0.0223        
   crypto-md5                                         3.4149+-0.0277            3.3888+-0.0151        
   crypto-sha1                                        3.0272+-0.0075     ?      3.0329+-0.0204        ?
   date-format-tofte                                 11.8652+-0.1693     ?     11.9735+-0.1451        ?
   date-format-xparb                                  8.8528+-0.0729     ?      9.1841+-0.2584        ? might be 1.0374x slower
   math-cordic                                        4.3948+-0.1352            4.3590+-0.1254        
   math-partial-sums                                 10.3029+-0.0710           10.3012+-0.0967        
   math-spectral-norm                                 2.7991+-0.0266            2.7938+-0.0070        
   regexp-dna                                        13.0390+-0.1332           13.0283+-0.1046        
   string-base64                                      5.6473+-0.0358            5.6342+-0.0500        
   string-fasta                                      10.4253+-0.0884           10.4026+-0.0867        
   string-tagcloud                                   15.7119+-0.0732           15.5803+-0.0867        
   string-unpack-code                                31.3378+-0.2592     ?     31.3383+-0.1334        ?
   string-validate-input                              7.0740+-0.0547     ?      7.1454+-0.1526        ? might be 1.0101x slower

   <arithmetic> *                                     7.6871+-0.0147     ?      7.6930+-0.0156        ? might be 1.0008x slower
   <geometric>                                        6.1749+-0.0195     ?      6.1859+-0.0161        ? might be 1.0018x slower
   <harmonic>                                         5.0842+-0.0248     ?      5.0932+-0.0186        ? might be 1.0018x slower

                                                        TipOfTree                    DCE                                        
LongSpider:
   3d-cube                                         2675.6902+-9.5222     ^   2135.7886+-8.7532        ^ definitely 1.2528x faster
   3d-morph                                        1496.3218+-1.6131     ?   1499.4468+-7.1538        ?
   3d-raytrace                                     1506.0730+-8.5439         1504.3271+-4.4835        
   access-binary-trees                             2467.2312+-9.2616     ?   2482.3215+-8.7034        ?
   access-fannkuch                                  657.0691+-0.6737          656.1850+-2.7354        
   access-nbody                                    1499.3143+-4.6995         1496.5226+-1.7041        
   access-nsieve                                   1554.4675+-5.2996         1552.1214+-5.0934        
   bitops-3bit-bits-in-byte                         126.0117+-0.1696     ?    126.2113+-0.1503        ?
   bitops-bits-in-byte                              598.5246+-3.6344     ?    602.3112+-4.2488        ?
   bitops-nsieve-bits                              1051.9732+-2.1172     !   1149.9595+-2.2812        ! definitely 1.0931x slower
   controlflow-recursive                           1474.1888+-0.7479         1473.4970+-0.4625        
   crypto-aes                                      1659.8341+-10.3354        1657.6107+-2.5116        
   crypto-md5                                      1241.3078+-0.7803     ?   1241.5600+-3.1818        ?
   crypto-sha1                                     1630.2178+-6.9962         1626.3382+-5.2377        
   date-format-tofte                               1197.6947+-8.5854     ?   1219.8375+-14.9319       ? might be 1.0185x slower
   date-format-xparb                               1465.6775+-21.1772    ?   1497.4755+-22.6356       ? might be 1.0217x slower
   math-cordic                                     1736.4209+-0.4231     ?   1760.4699+-52.5357       ? might be 1.0138x slower
   math-partial-sums                               1307.9766+-2.7588         1304.7951+-2.5959        
   math-spectral-norm                              1826.1313+-0.5136     ?   1826.8634+-0.7156        ?
   string-base64                                    506.0616+-2.1053          504.7036+-2.5044        
   string-fasta                                     988.4543+-3.2385     !    996.6150+-3.4076        ! definitely 1.0083x slower
   string-tagcloud                                  391.0838+-2.3348          389.1763+-1.2255        

   <arithmetic>                                    1320.8057+-1.1452     ^   1304.7335+-2.0746        ^ definitely 1.0123x faster
   <geometric> *                                   1122.6361+-1.0896     ^   1118.6245+-1.3779        ^ definitely 1.0036x faster
   <harmonic>                                       810.2759+-0.9796     ?    811.2115+-0.5234        ? might be 1.0012x slower

                                                        TipOfTree                    DCE                                        
V8Spider:
   crypto                                            80.3342+-0.9145           79.4921+-0.3032          might be 1.0106x faster
   deltablue                                        100.5419+-0.6083           99.6720+-0.7963        
   earley-boyer                                      73.8694+-0.3580           73.6717+-1.0037        
   raytrace                                          45.8973+-0.1791           45.6676+-0.2451        
   regexp                                           100.6413+-0.2185     ^    100.0988+-0.2613        ^ definitely 1.0054x faster
   richards                                         131.4713+-1.3796     ?    132.5271+-1.4034        ?
   splay                                             46.0539+-0.3213     ?     46.1576+-0.4904        ?

   <arithmetic>                                      82.6870+-0.1628           82.4695+-0.2822          might be 1.0026x faster
   <geometric> *                                     77.4268+-0.1198           77.1818+-0.2234          might be 1.0032x faster
   <harmonic>                                        72.1776+-0.1149           71.9455+-0.2089          might be 1.0032x faster

                                                        TipOfTree                    DCE                                        
Octane and V8v7:
   encrypt                                           0.46873+-0.00052    ^     0.46550+-0.00040       ^ definitely 1.0069x faster
   decrypt                                           8.59196+-0.01228          8.58423+-0.01822       
   deltablue                                x2       0.57708+-0.01611          0.57054+-0.00630         might be 1.0115x faster
   earley                                            0.91690+-0.00671          0.90526+-0.00567         might be 1.0129x faster
   boyer                                            12.47120+-0.04893    ?    12.60686+-0.23651       ? might be 1.0109x slower
   raytrace                                 x2       4.28358+-0.03112    ?     4.30765+-0.02617       ?
   regexp                                   x2      32.95508+-0.15442         32.87670+-0.19189       
   richards                                 x2       0.43680+-0.00667          0.43480+-0.00470       
   splay                                    x2       0.63218+-0.00565          0.62878+-0.00259       
   navier-stokes                            x2      10.70258+-0.00512    ?    10.70921+-0.00921       ?
   closure                                           0.43163+-0.00209    ?     0.43412+-0.00102       ?
   jquery                                            6.33786+-0.01548    ?     6.36299+-0.00970       ?
   gbemu                                    x2      71.68342+-1.16220         71.12748+-0.49741       
   mandreel                                 x2     136.44194+-1.56943        135.34330+-0.54006       
   pdfjs                                    x2     101.93407+-0.24648    ^   101.41015+-0.22285       ^ definitely 1.0052x faster
   box2d                                    x2      34.87811+-0.14200         34.86526+-0.19230       

V8v7:
   <arithmetic>                                      7.60146+-0.01806          7.60108+-0.02210         might be 1.0001x faster
   <geometric> *                                     2.52119+-0.01383          2.51425+-0.00265         might be 1.0028x faster
   <harmonic>                                        1.04250+-0.01005          1.03571+-0.00285         might be 1.0066x faster

Octane including V8v7:
   <arithmetic>                                     31.47184+-0.11227         31.30410+-0.07115         might be 1.0054x faster
   <geometric> *                                     6.98285+-0.02704          6.96234+-0.00672         might be 1.0029x faster
   <harmonic>                                        1.44908+-0.01183          1.44212+-0.00361         might be 1.0048x faster

                                                        TipOfTree                    DCE                                        
Kraken:
   ai-astar                                          494.502+-0.566      ?     494.564+-0.541         ?
   audio-beat-detection                              225.736+-0.790      ?     226.589+-3.620         ?
   audio-dft                                         289.631+-1.258            289.521+-0.737         
   audio-fft                                         130.842+-0.182            130.801+-0.217         
   audio-oscillator                                  244.344+-0.364            244.341+-0.264         
   imaging-darkroom                                  285.905+-0.718      ?     286.349+-0.764         ?
   imaging-desaturate                                158.405+-0.242      ?     158.508+-0.208         ?
   imaging-gaussian-blur                             363.021+-0.276            362.979+-0.166         
   json-parse-financial                               79.870+-0.204      !      81.111+-0.343         ! definitely 1.0155x slower
   json-stringify-tinderbox                          103.794+-0.357      ?     104.679+-1.411         ?
   stanford-crypto-aes                                91.179+-0.690      ?      91.701+-0.544         ?
   stanford-crypto-ccm                               101.162+-0.810            100.020+-1.655           might be 1.0114x faster
   stanford-crypto-pbkdf2                            261.753+-1.743            261.565+-1.270         
   stanford-crypto-sha256-iterative                  114.651+-1.437            113.760+-0.271         

   <arithmetic> *                                    210.343+-0.255      ?     210.463+-0.271         ? might be 1.0006x slower
   <geometric>                                       180.506+-0.291      ?     180.695+-0.218         ? might be 1.0010x slower
   <harmonic>                                        155.971+-0.313      ?     156.264+-0.268         ? might be 1.0019x slower

                                                        TipOfTree                    DCE                                        
JSRegress:
   adapt-to-double-divide                            22.8593+-0.0926           22.8114+-0.1012        
   aliased-arguments-getbyval                         1.0122+-0.0041            1.0090+-0.0042        
   allocate-big-object                                3.0523+-0.0166     ?      3.0718+-0.0214        ?
   arity-mismatch-inlining                            0.9869+-0.0086            0.9831+-0.0145        
   array-access-polymorphic-structure                10.0803+-0.1024           10.0572+-0.0927        
   array-nonarray-polymorhpic-access                 60.5396+-4.5513           58.1722+-0.1349          might be 1.0407x faster
   array-with-double-add                              5.8038+-0.0221            5.8036+-0.0193        
   array-with-double-increment                        4.4030+-0.0447            4.3366+-0.0454          might be 1.0153x faster
   array-with-double-mul-add                          6.8688+-0.0539            6.8233+-0.0718        
   array-with-double-sum                              8.1067+-0.0539            8.0504+-0.0214        
   array-with-int32-add-sub                          10.4534+-0.1007     ?     10.5273+-0.0834        ?
   array-with-int32-or-double-sum                     8.0266+-0.0713            8.0098+-0.0120        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    117.7381+-1.0657     ?    120.0707+-2.0613        ? might be 1.0198x slower
   ArrayBuffer-DataView-alloc-long-lived             31.5309+-0.1607     !     32.6938+-0.4080        ! definitely 1.0369x slower
   ArrayBuffer-Int32Array-byteOffset                  6.0505+-0.0152            6.0299+-0.0429        
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    214.3850+-2.6423     ?    214.9787+-2.2152        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.0585+-1.1524     ?    166.8090+-0.7698        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    118.4252+-1.5455     ?    119.8844+-0.8694        ? might be 1.0123x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     47.8146+-0.1994     !     48.8319+-0.4367        ! definitely 1.0213x slower
   ArrayBuffer-Int8Array-alloc-long-lived            30.4448+-0.2339     !     31.2534+-0.3940        ! definitely 1.0266x slower
   ArrayBuffer-Int8Array-alloc                       26.4802+-0.1498     ?     27.3137+-0.7239        ? might be 1.0315x slower
   asmjs_bool_bug                                     9.2674+-0.0683     ?      9.3199+-0.1088        ?
   basic-set                                         19.8975+-0.1973           19.8824+-0.1379        
   big-int-mul                                        5.5806+-0.0301     ?      5.5947+-0.0297        ?
   boolean-test                                       4.4702+-0.0540     ?      4.4843+-0.0183        ?
   branch-fold                                        5.0226+-0.0161     ^      4.9255+-0.0111        ^ definitely 1.0197x faster
   by-val-generic                                    12.3751+-0.1158     ?     12.6058+-0.1538        ? might be 1.0186x slower
   captured-assignments                               0.6586+-0.0263            0.6506+-0.0218          might be 1.0123x faster
   cast-int-to-double                                12.6064+-0.1147           12.4681+-0.1117          might be 1.0111x faster
   cell-argument                                     15.9950+-0.4319     ?     16.1763+-0.3030        ? might be 1.0113x slower
   cfg-simplify                                       3.9878+-0.0491     ?      4.0090+-0.0076        ?
   chain-custom-getter                              157.8128+-0.1168     ?    160.6441+-5.6036        ? might be 1.0179x slower
   chain-getter-access                              487.5037+-5.3657     ?    487.9003+-4.3024        ?
   cmpeq-obj-to-obj-other                            12.7324+-0.5777           12.6502+-0.3113        
   constant-test                                      8.9413+-0.0702     ?      8.9579+-0.1125        ?
   DataView-custom-properties                       135.1934+-0.7461     !    137.0848+-1.0515        ! definitely 1.0140x slower
   delay-tear-off-arguments-strictmode                3.6904+-0.0205            3.6813+-0.0076        
   destructuring-arguments-length                   172.6619+-1.1707     !    175.5115+-1.2995        ! definitely 1.0165x slower
   destructuring-arguments                            8.9256+-0.0916            8.9091+-0.0694        
   destructuring-swap                                 8.6853+-0.1108     ?      8.7186+-0.1006        ?
   direct-arguments-getbyval                          0.8777+-0.0043     ?      0.8789+-0.0041        ?
   double-get-by-val-out-of-bounds                    7.6496+-0.0754     ?      7.6708+-0.1086        ?
   double-pollution-getbyval                         11.0966+-0.1477     ?     11.1479+-0.0583        ?
   double-pollution-putbyoffset                       6.1260+-0.0391     ?      6.1777+-0.0690        ?
   double-to-int32-typed-array-no-inline              2.6452+-0.0107            2.6387+-0.0083        
   double-to-int32-typed-array                        2.2887+-0.0110     ?      2.3040+-0.0176        ?
   double-to-uint32-typed-array-no-inline             2.8068+-0.0090            2.8048+-0.0050        
   double-to-uint32-typed-array                       2.5637+-0.0055     ?      2.5653+-0.0078        ?
   empty-string-plus-int                             10.8567+-0.0828     !     11.0459+-0.0816        ! definitely 1.0174x slower
   emscripten-cube2hash                              55.4918+-0.1372     ?     55.5970+-0.2883        ?
   emscripten-memops                               7053.6782+-11.7968    ?   7074.9394+-39.5886       ?
   external-arguments-getbyval                        2.1720+-0.0265            2.1574+-0.0171        
   external-arguments-putbyval                        3.1975+-0.1490            3.0694+-0.0107          might be 1.0417x faster
   fixed-typed-array-storage-var-index                1.4187+-0.0050            1.4164+-0.0050        
   fixed-typed-array-storage                          1.0180+-0.0193            1.0073+-0.0049          might be 1.0106x faster
   Float32Array-matrix-mult                           6.3944+-0.0400     ?      6.4376+-0.0715        ?
   Float32Array-to-Float64Array-set                  93.9259+-1.2488           92.8899+-0.8880          might be 1.0112x faster
   Float64Array-alloc-long-lived                    103.7096+-0.7528     ?    104.0691+-0.5559        ?
   Float64Array-to-Int16Array-set                   118.6830+-0.6956          118.1415+-0.3536        
   fold-double-to-int                                20.5385+-0.1986           20.3307+-0.1971          might be 1.0102x faster
   for-of-iterate-array-entries                       8.8238+-0.1682            8.6866+-0.1287          might be 1.0158x faster
   for-of-iterate-array-keys                          3.4340+-0.0306            3.4311+-0.0346        
   for-of-iterate-array-values                        3.0181+-0.1249            2.9730+-0.0407          might be 1.0152x faster
   function-dot-apply                                 3.1571+-0.0549            3.1384+-0.0210        
   function-test                                      4.9095+-0.0328     ?      4.9124+-0.0974        ?
   get-by-id-chain-from-try-block                     7.9251+-0.1155     ?      7.9501+-0.1239        ?
   get-by-id-proto-or-self                           25.9705+-0.2477           25.9295+-0.1509        
   get-by-id-self-or-proto                           24.0295+-0.6459     ?     24.1772+-0.5920        ?
   get-by-val-out-of-bounds                           7.4542+-0.0844     ?      7.4570+-0.1115        ?
   get_callee_monomorphic                             4.9742+-0.0964     ?      5.0257+-0.0181        ? might be 1.0103x slower
   get_callee_polymorphic                             4.8357+-0.0128     ?      4.8574+-0.0284        ?
   global-var-const-infer-fire-from-opt               1.0424+-0.0679            1.0340+-0.0470        
   global-var-const-infer                             0.8168+-0.0099            0.8163+-0.0043        
   HashMap-put-get-iterate-keys                      42.8648+-0.3976     ?     43.2785+-0.7633        ?
   HashMap-put-get-iterate                           54.8255+-0.7414     ?     55.2225+-0.8674        ?
   HashMap-string-put-get-iterate                    50.6311+-0.2401     !     51.8862+-0.3626        ! definitely 1.0248x slower
   imul-double-only                                  17.7317+-0.1549     ?     17.7727+-0.1732        ?
   imul-int-only                                     14.8317+-0.0981     ?     15.0552+-0.1474        ? might be 1.0151x slower
   imul-mixed                                        21.8837+-0.1313     ?     21.9063+-0.0887        ?
   in-four-cases                                     25.9271+-0.0909     ?     25.9371+-0.0267        ?
   in-one-case-false                                 12.1547+-0.1459           12.1154+-0.1306        
   in-one-case-true                                  12.0932+-0.1329     ?     12.1537+-0.1059        ?
   in-two-cases                                      12.8499+-0.0799     ?     12.9063+-0.1555        ?
   indexed-properties-in-objects                      4.2403+-0.0161            4.2172+-0.0388        
   infer-closure-const-then-mov-no-inline            15.3670+-0.1335           15.2985+-0.1004        
   infer-closure-const-then-mov                      28.8862+-0.1233     ?     28.9677+-0.0798        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.7502+-0.0594     ?     17.7759+-0.0612        ?
   infer-closure-const-then-put-to-scope             36.1183+-0.1365     ?     36.2132+-0.2550        ?
   infer-closure-const-then-reenter-no-inline   
                                                     84.3414+-0.1172     ?     84.3630+-0.0975        ?
   infer-closure-const-then-reenter                  36.1757+-0.1739           36.1609+-0.1712        
   infer-one-time-closure-ten-vars                   29.0554+-0.1007     ?     29.0760+-0.1582        ?
   infer-one-time-closure-two-vars                   28.8878+-0.1133           28.8606+-0.0969        
   infer-one-time-closure                            28.8332+-0.1413           28.8123+-0.1073        
   infer-one-time-deep-closure                       58.3487+-0.3317     ?     58.4854+-0.1330        ?
   inline-arguments-access                            1.7127+-0.0070     ?      1.7156+-0.0287        ?
   inline-arguments-aliased-access                    1.8594+-0.0556            1.8419+-0.0427        
   inline-arguments-local-escape                     22.3383+-0.1726     !     23.5935+-0.2988        ! definitely 1.0562x slower
   inline-get-scoped-var                              7.5385+-0.0882            7.4632+-0.0859          might be 1.0101x faster
   inlined-put-by-id-transition                      15.2620+-0.3443     ?     15.6009+-0.3636        ? might be 1.0222x slower
   int-or-other-abs-then-get-by-val                   9.5044+-0.0741     ?      9.5774+-0.1180        ?
   int-or-other-abs-zero-then-get-by-val             37.3098+-0.0212     ?     37.3962+-0.1415        ?
   int-or-other-add-then-get-by-val                  10.6016+-0.1098           10.5979+-0.1135        
   int-or-other-add                                  10.9370+-0.0684     ?     11.0034+-0.0973        ?
   int-or-other-div-then-get-by-val                   6.4366+-0.0240            6.3775+-0.1153        
   int-or-other-max-then-get-by-val                   8.9063+-0.1989            8.8128+-0.0978          might be 1.0106x faster
   int-or-other-min-then-get-by-val                   7.1263+-0.0399     ?      7.1772+-0.1137        ?
   int-or-other-mod-then-get-by-val                   6.2755+-0.0427     ?      6.2781+-0.0151        ?
   int-or-other-mul-then-get-by-val                   6.6869+-0.0359            6.6251+-0.0751        
   int-or-other-neg-then-get-by-val                   7.9903+-0.0728     ?      8.0467+-0.0772        ?
   int-or-other-neg-zero-then-get-by-val             37.0052+-0.1844     ?     37.0304+-0.2505        ?
   int-or-other-sub-then-get-by-val                  10.6947+-0.0621           10.5641+-0.1227          might be 1.0124x faster
   int-or-other-sub                                   8.9484+-0.0893     ?      9.0058+-0.0536        ?
   int-overflow-local                                 6.5227+-0.0752     ?      6.5610+-0.0239        ?
   Int16Array-alloc-long-lived                       68.4768+-0.6734           68.0106+-0.3640        
   Int16Array-bubble-sort-with-byteLength            48.8377+-0.0864     ?     48.9661+-0.1100        ?
   Int16Array-bubble-sort                            48.0762+-0.3035           47.9708+-0.2400        
   Int16Array-load-int-mul                            1.8204+-0.0052     ?      1.8430+-0.0509        ? might be 1.0124x slower
   Int16Array-to-Int32Array-set                      88.9717+-0.6498     !     91.4866+-0.8540        ! definitely 1.0283x slower
   Int32Array-alloc-huge-long-lived                 703.7717+-2.5505     ?    705.3508+-4.9291        ?
   Int32Array-alloc-huge                            807.8832+-9.0868     ?    810.0925+-6.2381        ?
   Int32Array-alloc-large-long-lived                980.7650+-9.1557          975.3432+-13.9233       
   Int32Array-alloc-large                            44.6800+-0.8181     ?     45.4107+-0.5286        ? might be 1.0164x slower
   Int32Array-alloc-long-lived                       80.8176+-0.7152           80.5018+-0.5334        
   Int32Array-alloc                                   4.5302+-0.0092     ?      4.5434+-0.0094        ?
   Int32Array-Int8Array-view-alloc                   15.3166+-0.1997           15.0432+-0.0968          might be 1.0182x faster
   int52-spill                                       12.6114+-0.2053     !     13.0172+-0.0959        ! definitely 1.0322x slower
   Int8Array-alloc-long-lived                        66.8033+-0.7250     ?     67.2700+-0.5596        ?
   Int8Array-load-with-byteLength                     5.0690+-0.0073            5.0371+-0.0655        
   Int8Array-load                                     5.0646+-0.0157            5.0067+-0.0664          might be 1.0116x faster
   integer-divide                                    15.1049+-0.1350           15.0654+-0.0765        
   integer-modulo                                     2.0531+-0.0124     ?      2.0622+-0.0160        ?
   large-int-captured                                 9.8604+-0.1046     !     10.0750+-0.0953        ! definitely 1.0218x slower
   large-int-neg                                     26.2066+-0.1656     ?     26.3054+-0.1489        ?
   large-int                                         23.0784+-0.1363     ?     23.1353+-0.1114        ?
   logical-not                                       10.8477+-0.1825           10.6363+-0.2759          might be 1.0199x faster
   lots-of-fields                                    12.4652+-0.1081     ?     12.4762+-0.0832        ?
   make-indexed-storage                               4.2821+-0.1720     ?      4.2848+-0.1355        ?
   make-rope-cse                                      6.1791+-0.0759            6.1192+-0.0919        
   marsaglia-larger-ints                            111.8697+-0.0945     ?    112.0377+-0.2764        ?
   marsaglia-osr-entry                               47.0722+-0.0476           47.0576+-0.1018        
   marsaglia                                        463.6651+-0.5580          463.6609+-0.2434        
   method-on-number                                  30.2155+-0.7317           29.9918+-0.4068        
   negative-zero-divide                               0.4249+-0.0018            0.4249+-0.0016        
   negative-zero-modulo                               0.4131+-0.0097            0.4106+-0.0021        
   negative-zero-negate                               0.3908+-0.0023     ?      0.4014+-0.0211        ? might be 1.0272x slower
   nested-function-parsing-random                   380.9223+-0.4684     !    386.2527+-0.4867        ! definitely 1.0140x slower
   nested-function-parsing                           47.4592+-0.1365           47.4522+-0.0944        
   new-array-buffer-dead                              3.7884+-0.0170     ?      3.8020+-0.0288        ?
   new-array-buffer-push                             10.6601+-0.1205           10.5779+-0.1388        
   new-array-dead                                    28.6397+-0.1908           28.5429+-0.0684        
   new-array-push                                     6.9986+-0.0795            6.9821+-0.0655        
   number-test                                        4.4257+-0.0311     ?      4.4411+-0.0233        ?
   object-closure-call                               13.5417+-0.1035           13.4970+-0.1196        
   object-test                                        4.8097+-0.0305            4.7873+-0.0399        
   poly-stricteq                                     87.8392+-2.9136           87.5109+-1.0741        
   polymorphic-structure                             21.0910+-0.3142     ?     21.2537+-0.3102        ?
   polyvariant-monomorphic-get-by-id                 11.9544+-0.0994     ?     12.0284+-0.1206        ?
   proto-custom-getter                              157.8363+-0.1937          157.7810+-0.1205        
   proto-getter-access                              490.1356+-5.5485     ?    492.0925+-8.3112        ?
   put-by-id                                         19.6103+-0.3958           19.5849+-0.3579        
   put-by-val-large-index-blank-indexing-type   
                                                     20.6630+-0.1114     ?     20.7681+-0.2149        ?
   put-by-val-machine-int                             3.3644+-0.0065            3.3636+-0.0064        
   rare-osr-exit-on-local                            20.2145+-0.0741     ?     20.2439+-0.1306        ?
   register-pressure-from-osr                        31.4152+-0.1191           31.4148+-0.0791        
   simple-activation-demo                            35.1895+-0.0742     ?     35.3089+-0.1711        ?
   simple-custom-getter                             509.8198+-21.6940    ?    512.4283+-21.6634       ?
   simple-getter-access                             781.7272+-8.0181     ?    792.5346+-9.3028        ? might be 1.0138x slower
   slow-array-profile-convergence                     4.0938+-0.0093     ?      4.1161+-0.0357        ?
   slow-convergence                                   4.5775+-0.0179            4.5761+-0.0276        
   sparse-conditional                                 1.4903+-0.0145            1.4866+-0.0077        
   splice-to-remove                                  77.1941+-0.1392     ^     76.9320+-0.1089        ^ definitely 1.0034x faster
   stepanov_container                             10217.8075+-29.3011    ?  10218.7680+-51.0035       ?
   string-concat-object                               3.2541+-0.0507            3.2522+-0.0421        
   string-concat-pair-object                          3.1801+-0.0353     ?      3.1873+-0.0311        ?
   string-concat-pair-simple                         17.3315+-0.2676           17.1496+-0.3443          might be 1.0106x faster
   string-concat-simple                              17.6057+-0.4271           17.4161+-0.2204          might be 1.0109x faster
   string-cons-repeat                                10.8365+-0.0405     ?     10.8591+-0.0258        ?
   string-cons-tower                                 11.3451+-0.0619     ?     11.3542+-0.0687        ?
   string-equality                                   42.7404+-0.1089     ?     42.9544+-0.3919        ?
   string-get-by-val-big-char                        12.6438+-0.1147     !     13.0120+-0.2304        ! definitely 1.0291x slower
   string-get-by-val-out-of-bounds-insane             5.9141+-0.1524            5.7602+-0.0838          might be 1.0267x faster
   string-get-by-val-out-of-bounds                    5.3204+-0.0620            5.3118+-0.0694        
   string-get-by-val                                  4.9320+-0.0266     ?      4.9509+-0.0188        ?
   string-hash                                        2.7850+-0.0047     ?      2.7869+-0.0034        ?
   string-long-ident-equality                        39.1290+-0.0656           39.0690+-0.0785        
   string-repeat-arith                               50.1005+-0.4834           49.9090+-0.2352        
   string-sub                                       105.2518+-0.6855     ^    103.6332+-0.4101        ^ definitely 1.0156x faster
   string-test                                        4.4101+-0.0252            4.3985+-0.0303        
   string-var-equality                               70.1130+-0.2520           70.0406+-0.2593        
   structure-hoist-over-transitions                   3.5274+-0.0086     ?      3.5293+-0.0174        ?
   switch-char-constant                               3.5053+-0.0133     ?      3.5455+-0.0624        ? might be 1.0115x slower
   switch-char                                        8.1342+-0.0810            8.1338+-0.1008        
   switch-constant                                    9.4414+-0.1131            9.3922+-0.1172        
   switch-string-basic-big-var                       20.6388+-0.1413           20.5182+-0.0633        
   switch-string-basic-big                           21.4133+-0.1823     ?     22.0182+-1.1166        ? might be 1.0282x slower
   switch-string-basic-var                           20.3709+-0.1107           20.2532+-0.1068        
   switch-string-basic                               22.0349+-0.6061           21.9281+-0.4823        
   switch-string-big-length-tower-var                28.9752+-0.1711     ?     29.0535+-0.1864        ?
   switch-string-length-tower-var                    21.9839+-0.1965           21.9323+-0.0961        
   switch-string-length-tower                        16.5716+-0.1015           16.5509+-0.0950        
   switch-string-short                               16.6856+-0.1292           16.6261+-0.1348        
   switch                                            13.6412+-0.1041     ?     13.7697+-0.2146        ?
   tear-off-arguments-simple                          2.4758+-0.0289     ^      2.4151+-0.0047        ^ definitely 1.0251x faster
   tear-off-arguments                                 3.7056+-0.0190            3.7012+-0.0050        
   temporal-structure                                17.1373+-0.0865     ?     17.1549+-0.0746        ?
   to-int32-boolean                                  21.7958+-0.2581           21.5461+-0.1318          might be 1.0116x faster
   undefined-test                                     4.6073+-0.0438     ?      4.6493+-0.0356        ?
   weird-inlining-const-prop                          2.4606+-0.0833            2.4073+-0.0086          might be 1.0221x faster

   <arithmetic>                                     133.9567+-0.2813     ?    134.2444+-0.3872        ? might be 1.0021x slower
   <geometric> *                                     14.7848+-0.0135     ?     14.8030+-0.0100        ? might be 1.0012x slower
   <harmonic>                                         5.3116+-0.0166            5.3092+-0.0164          might be 1.0005x faster

                                                        TipOfTree                    DCE                                        
All benchmarks:
   <arithmetic>                                     202.8464+-0.2198     ^    201.8636+-0.3949        ^ definitely 1.0049x faster
   <geometric>                                       20.5436+-0.0156     ?     20.5530+-0.0086        ? might be 1.0005x slower
   <harmonic>                                         4.8533+-0.0168            4.8460+-0.0109          might be 1.0015x faster

                                                        TipOfTree                    DCE                                        
Geomean of preferred means:
   <scaled-result>                                   49.3867+-0.0370     ^     49.3281+-0.0210        ^ definitely 1.0012x faster
Comment 9 Filip Pizlo 2014-01-02 12:12:17 PST
Landed in http://trac.webkit.org/changeset/161218