Bug 153477 - [JSC] When lowering B3 to Air, preferRightForResult() should prefer values from the same block
Summary: [JSC] When lowering B3 to Air, preferRightForResult() should prefer values fr...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: New Bugs (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Benjamin Poulain
URL:
Keywords:
Depends on:
Blocks: 150279 153583
  Show dependency treegraph
 
Reported: 2016-01-25 23:17 PST by Benjamin Poulain
Modified: 2016-01-27 21:48 PST (History)
6 users (show)

See Also:


Attachments
Patch (3.33 KB, patch)
2016-01-25 23:22 PST, Benjamin Poulain
no flags Details | Formatted Diff | Diff
Patch (3.43 KB, patch)
2016-01-26 13:45 PST, Benjamin Poulain
no flags Details | Formatted Diff | Diff
Patch (3.80 KB, patch)
2016-01-26 16:05 PST, Benjamin Poulain
no flags Details | Formatted Diff | Diff
Patch for landing (3.76 KB, patch)
2016-01-26 21:14 PST, Benjamin Poulain
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Benjamin Poulain 2016-01-25 23:17:00 PST
[JSC] When lowering B3 to Air, preferRightForResult() should prefer values from the same block
Comment 1 Benjamin Poulain 2016-01-25 23:22:57 PST
Created attachment 269856 [details]
Patch
Comment 2 Benjamin Poulain 2016-01-25 23:23:43 PST
                                                          Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                            8.9990+-0.2216            8.7834+-0.6239          might be 1.0245x faster
   3d-morph                                           8.2653+-0.1234            8.1663+-0.1106          might be 1.0121x faster
   3d-raytrace                                        9.4209+-0.2490     ?      9.6170+-0.1512        ? might be 1.0208x slower
   access-binary-trees                                3.2122+-0.0543     ?      3.2245+-0.3601        ?
   access-fannkuch                                    9.1964+-0.5638            9.0360+-0.2470          might be 1.0177x faster
   access-nbody                                       4.6365+-0.2375     ?      4.7531+-0.1091        ? might be 1.0251x slower
   access-nsieve                                      5.0859+-0.6605            4.9127+-0.2326          might be 1.0353x faster
   bitops-3bit-bits-in-byte                           1.6818+-0.0322     !      1.8657+-0.1235        ! definitely 1.1094x slower
   bitops-bits-in-byte                                5.6151+-0.1356     ?      5.6330+-0.2438        ?
   bitops-bitwise-and                                 2.8706+-0.0853            2.8114+-0.0744          might be 1.0211x faster
   bitops-nsieve-bits                                 4.5212+-0.2486     ?      4.6088+-0.1125        ? might be 1.0194x slower
   controlflow-recursive                              3.6270+-0.1606            3.6185+-0.0812        
   crypto-aes                                         6.6337+-0.2835            6.5541+-0.3053          might be 1.0122x faster
   crypto-md5                                         3.9777+-0.1698     ?      4.0756+-0.1479        ? might be 1.0246x slower
   crypto-sha1                                        3.6248+-0.1073            3.5138+-0.1276          might be 1.0316x faster
   date-format-tofte                                 13.6398+-0.4447           13.1984+-0.5250          might be 1.0334x faster
   date-format-xparb                                  7.6560+-0.2014     ?      7.8102+-0.7021        ? might be 1.0201x slower
   math-cordic                                        4.5248+-0.1918            4.5148+-0.1312        
   math-partial-sums                                 10.1025+-0.2483           10.0869+-0.3821        
   math-spectral-norm                                 3.3578+-0.1951            3.2653+-0.1160          might be 1.0283x faster
   regexp-dna                                        10.0428+-0.1000            9.8249+-0.5468          might be 1.0222x faster
   string-base64                                      7.1927+-0.1632            6.8894+-0.4016          might be 1.0440x faster
   string-fasta                                       9.2285+-0.2854     ?      9.2866+-0.2219        ?
   string-tagcloud                                   13.1512+-0.2392     ?     13.1600+-0.2909        ?
   string-unpack-code                                26.7462+-0.4719     ?     27.6623+-1.3375        ? might be 1.0343x slower
   string-validate-input                              6.8353+-0.1982     ?      6.8425+-0.1468        ?

   <arithmetic>                                       7.4556+-0.0406            7.4506+-0.1041          might be 1.0007x faster

                                                          Conf#1                    Conf#2                                      
LongSpider:
   3d-cube                                         1124.3010+-28.2398        1118.0986+-13.6724       
   3d-morph                                         996.1678+-5.6710     ^    977.7107+-3.2663        ^ definitely 1.0189x faster
   3d-raytrace                                     1082.9517+-3.5443     !   1096.2057+-7.3303        ! definitely 1.0122x slower
   access-binary-trees                             1363.6513+-10.4541        1359.6989+-9.7475        
   access-fannkuch                                  453.5355+-69.0076         415.7766+-19.7573         might be 1.0908x faster
   access-nbody                                    1162.7337+-50.0849        1161.7137+-52.9652       
   access-nsieve                                    662.2388+-6.2894     ?    665.3856+-1.2585        ?
   bitops-3bit-bits-in-byte                          39.9232+-0.2082     ?     40.2249+-0.6287        ?
   bitops-bits-in-byte                              302.4957+-11.3200    ?    304.1348+-12.6668       ?
   bitops-nsieve-bits                               621.7673+-14.1445    ?    624.3857+-11.9395       ?
   controlflow-recursive                            740.1536+-0.1743     !    743.0563+-0.9560        ! definitely 1.0039x slower
   crypto-aes                                      1047.0151+-4.9319         1046.0840+-14.8093       
   crypto-md5                                       848.9262+-6.3741          843.2964+-7.5655        
   crypto-sha1                                     1126.7892+-10.0109        1126.5321+-6.5878        
   date-format-tofte                               1120.8507+-21.2396    ?   1129.0620+-5.5517        ?
   date-format-xparb                               1029.8413+-24.5118        1022.6106+-8.3095        
   hash-map                                         221.8610+-0.8755     ?    222.7203+-1.2745        ?
   math-cordic                                      701.1510+-117.8642   ?    734.6177+-97.4859       ? might be 1.0477x slower
   math-partial-sums                               1068.6945+-4.8718         1065.7954+-1.8422        
   math-spectral-norm                              1073.2802+-1.6234     !   1242.2784+-0.6566        ! definitely 1.1575x slower
   string-base64                                    595.7328+-0.9572     !    598.1189+-0.3669        ! definitely 1.0040x slower
   string-fasta                                     594.5991+-6.1419     ?    610.6902+-56.4668       ? might be 1.0271x slower
   string-tagcloud                                  294.4805+-5.4197          290.8231+-5.9555          might be 1.0126x faster

   <geometric>                                      659.0885+-6.3190     ?    662.8624+-7.7963        ? might be 1.0057x slower

                                                          Conf#1                    Conf#2                                      
V8Spider:
   crypto                                            62.6895+-1.2801           62.5350+-1.8223        
   deltablue                                         80.4327+-6.8917           79.9910+-6.2101        
   earley-boyer                                      67.1740+-0.8151           66.8746+-1.6086        
   raytrace                                          40.8808+-1.0732           39.8513+-0.9087          might be 1.0258x faster
   regexp                                           102.9319+-0.5470     ?    103.1840+-0.3752        ?
   richards                                          68.3190+-0.8181     ?     69.7220+-2.3694        ? might be 1.0205x slower
   splay                                             53.3478+-1.7821     ?     53.7050+-0.5910        ?

   <geometric>                                       65.5278+-0.7102           65.4505+-1.0667          might be 1.0012x faster

                                                          Conf#1                    Conf#2                                      
Octane:
   encrypt                                           0.28383+-0.00733          0.28044+-0.00452         might be 1.0121x faster
   decrypt                                           5.22333+-0.08609          5.12233+-0.01597         might be 1.0197x faster
   deltablue                                x2       0.23321+-0.01833    ?     0.23340+-0.01786       ?
   earley                                            0.51122+-0.00393          0.50936+-0.01025       
   boyer                                             9.06430+-0.05168          8.95411+-0.10632         might be 1.0123x faster
   navier-stokes                            x2       6.34918+-0.02121          6.33842+-0.01446       
   raytrace                                 x2       1.50814+-0.02132          1.49458+-0.02078       
   richards                                 x2       0.14054+-0.00515          0.13909+-0.00292         might be 1.0104x faster
   splay                                    x2       0.56017+-0.00236          0.55848+-0.00451       
   regexp                                   x2      38.59306+-0.25325         38.51058+-0.49861       
   pdfjs                                    x2      60.64035+-1.18840         60.40546+-0.51175       
   mandreel                                 x2      70.16619+-1.53825         69.68302+-0.25131       
   gbemu                                    x2      61.24174+-13.27662        57.85017+-1.88135         might be 1.0586x faster
   closure                                           0.93184+-0.00350    ?     0.93472+-0.00862       ?
   jquery                                           12.00497+-0.13322         11.99090+-0.08382       
   box2d                                    x2      16.62819+-0.19130         16.58277+-0.09798       
   zlib                                     x2     593.17385+-6.61634    ?   595.94607+-3.50866       ?
   typescript                               x2    1110.40936+-15.34893      1109.29724+-5.01627       

   <geometric>                                       8.88054+-0.13207          8.81635+-0.06632         might be 1.0073x faster

                                                          Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                          156.441+-14.012           151.394+-10.302          might be 1.0333x faster
   audio-beat-detection                               81.941+-3.413      ?      83.096+-0.366         ? might be 1.0141x slower
   audio-dft                                         127.874+-1.143      ?     128.445+-0.618         ?
   audio-fft                                          60.712+-0.342      !      61.861+-0.726         ! definitely 1.0189x slower
   audio-oscillator                                   85.785+-0.412             85.748+-0.394         
   imaging-darkroom                                   97.798+-0.233      ?      98.016+-0.267         ?
   imaging-desaturate                                111.052+-0.541      ^      84.118+-0.864         ^ definitely 1.3202x faster
   imaging-gaussian-blur                             126.729+-7.453            123.840+-2.680           might be 1.0233x faster
   json-parse-financial                               68.874+-1.233             68.854+-1.452         
   json-stringify-tinderbox                           41.882+-0.710             41.341+-0.245           might be 1.0131x faster
   stanford-crypto-aes                                61.852+-0.909             61.575+-0.645         
   stanford-crypto-ccm                                59.648+-2.431      ?      59.833+-3.314         ?
   stanford-crypto-pbkdf2                            150.304+-1.163      ?     150.766+-2.383         ?
   stanford-crypto-sha256-iterative                   60.925+-1.453      ?      61.052+-1.337         ?

   <arithmetic>                                       92.273+-0.466      ^      89.996+-0.934         ^ definitely 1.0253x faster

                                                          Conf#1                    Conf#2                                      
JSRegress:
   abc-forward-loop-equal                            53.5940+-0.6786           53.3466+-1.0377        
   abc-postfix-backward-loop                         68.8375+-0.6148     ?     69.3070+-1.0523        ?
   abc-simple-backward-loop                          53.2601+-0.7251           52.8545+-0.4322        
   abc-simple-forward-loop                           53.2452+-1.2322     ?     53.4016+-0.9365        ?
   abc-skippy-loop                                   36.6730+-1.0402           36.3256+-0.8643        
   abs-boolean                                        3.8745+-0.1452            3.8660+-0.1414        
   adapt-to-double-divide                            15.5906+-0.4572           15.4623+-0.3178        
   aliased-arguments-getbyval                         1.7943+-0.2840            1.7057+-0.2736          might be 1.0519x faster
   allocate-big-object                                3.9107+-0.1585            3.8716+-0.3050          might be 1.0101x faster
   arguments-named-and-reflective                    12.0789+-0.1911           12.0574+-0.3286        
   arguments-out-of-bounds                           12.7838+-0.2395           12.4935+-0.1997          might be 1.0232x faster
   arguments-strict-mode                             10.2834+-0.2141     ?     10.2975+-0.2490        ?
   arguments                                          9.5447+-0.6586            9.4933+-0.4557        
   arity-mismatch-inlining                            1.3093+-0.1001     ?      1.3278+-0.1337        ? might be 1.0141x slower
   array-access-polymorphic-structure                11.8613+-1.1855           11.2373+-0.3333          might be 1.0555x faster
   array-nonarray-polymorhpic-access                 36.7214+-1.4755           36.5333+-1.0450        
   array-prototype-every                            127.1037+-6.0224          124.8576+-0.2918          might be 1.0180x faster
   array-prototype-forEach                          123.7795+-1.4867          123.0722+-1.3849        
   array-prototype-map                              137.9955+-2.5754          137.3213+-0.4643        
   array-prototype-reduce                           116.5185+-1.4056          115.3267+-1.2679          might be 1.0103x faster
   array-prototype-reduceRight                      115.3091+-2.0470     ?    117.5745+-5.6919        ? might be 1.0196x slower
   array-prototype-some                             124.4912+-1.4084     ?    126.0613+-3.4193        ? might be 1.0126x slower
   array-splice-contiguous                           37.1118+-0.5799           36.5811+-0.3596          might be 1.0145x faster
   array-with-double-add                              5.9224+-0.1906            5.8481+-0.0356          might be 1.0127x faster
   array-with-double-increment                        4.5110+-0.1311     ?      4.5712+-0.1038        ? might be 1.0133x slower
   array-with-double-mul-add                          7.3598+-0.1188     ?      7.4998+-0.0747        ? might be 1.0190x slower
   array-with-double-sum                              4.3477+-0.0222     ?      4.3942+-0.0361        ? might be 1.0107x slower
   array-with-int32-add-sub                          10.5381+-0.1806     ?     10.6541+-0.1535        ? might be 1.0110x slower
   array-with-int32-or-double-sum                     4.4797+-0.0697            4.4752+-0.0501        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     47.9830+-2.2990     ?     48.0407+-1.9222        ?
   ArrayBuffer-DataView-alloc-long-lived             19.0176+-0.5097     ?     19.2255+-0.6516        ? might be 1.0109x slower
   ArrayBuffer-Int32Array-byteOffset                  5.4128+-0.1768     ?      5.4699+-0.1896        ? might be 1.0106x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     47.8537+-1.4001           46.8220+-1.3171          might be 1.0220x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     30.5018+-1.5736           29.9187+-0.3621          might be 1.0195x faster
   ArrayBuffer-Int8Array-alloc-long-lived            17.4845+-0.5100           17.4467+-0.4285        
   ArrayBuffer-Int8Array-alloc                       14.4971+-0.2939     ?     14.7350+-0.6408        ? might be 1.0164x slower
   arrowfunction-call                                13.3137+-0.1531           13.1595+-0.2857          might be 1.0117x faster
   asmjs_bool_bug                                     9.5292+-0.1774     ?      9.6172+-0.1721        ?
   assign-custom-setter-polymorphic                   4.3259+-0.1289     ?      4.3832+-0.2225        ? might be 1.0133x slower
   assign-custom-setter                               6.1320+-0.2148            6.0295+-0.2463          might be 1.0170x faster
   basic-set                                         11.4390+-0.5731     ?     11.8085+-0.5024        ? might be 1.0323x slower
   big-int-mul                                        4.9125+-0.1532     ?      4.9534+-0.1269        ?
   boolean-test                                       5.0237+-0.1612     ?      5.0583+-0.1020        ?
   branch-fold                                        4.8108+-0.0512     ?      4.8610+-0.1039        ? might be 1.0104x slower
   branch-on-string-as-boolean                       20.2733+-0.5172           20.0468+-0.2201          might be 1.0113x faster
   by-val-generic                                     5.8798+-0.9760     ?      6.5649+-0.7611        ? might be 1.1165x slower
   call-spread-apply                                 41.5644+-3.2556           40.8434+-2.3859          might be 1.0177x faster
   call-spread-call                                  32.6420+-4.8596           31.1058+-1.6691          might be 1.0494x faster
   captured-assignments                               0.8765+-0.0444            0.7299+-0.1354          might be 1.2009x faster
   cast-int-to-double                                 8.4634+-0.1096     ?      8.6678+-0.2227        ? might be 1.0242x slower
   cell-argument                                      5.4765+-0.6494            5.4185+-0.1351          might be 1.0107x faster
   cfg-simplify                                       3.8633+-0.1870            3.8398+-0.1684        
   chain-getter-access                               14.0425+-0.2228           13.9391+-0.2797        
   cmpeq-obj-to-obj-other                            14.7595+-0.7002           14.3155+-1.2914          might be 1.0310x faster
   constant-test                                      8.1955+-0.1397            7.9183+-0.2589          might be 1.0350x faster
   create-lots-of-functions                          15.2675+-1.3992           14.8028+-0.6963          might be 1.0314x faster
   cse-new-array-buffer                               3.6072+-0.1433            3.5569+-0.1708          might be 1.0141x faster
   cse-new-array                                      3.8633+-0.0720            3.6552+-0.2888          might be 1.0569x faster
   custom-setter-getter-as-put-get-by-id              0.9186+-0.0840            0.9090+-0.2184          might be 1.0105x faster
   DataView-custom-properties                        55.6340+-2.4737           54.9353+-1.3810          might be 1.0127x faster
   delay-tear-off-arguments-strictmode               20.0836+-0.9100           19.9182+-0.2039        
   deltablue-varargs                                261.2510+-2.9668     ?    261.8823+-0.9415        ?
   destructuring-arguments                          229.7559+-2.3666     ?    232.0985+-1.4036        ? might be 1.0102x slower
   destructuring-parameters-overridden-by-function   
                                                      0.7526+-0.1521     ?      0.8485+-0.1490        ? might be 1.1274x slower
   destructuring-swap                                 7.8937+-0.1952     ?      7.9296+-0.1082        ?
   direct-arguments-getbyval                          1.8299+-0.2446            1.6098+-0.1260          might be 1.1367x faster
   div-boolean-double                                 5.7682+-0.2178     ?      5.8910+-0.3541        ? might be 1.0213x slower
   div-boolean                                        9.9860+-0.1617            9.8297+-0.1342          might be 1.0159x faster
   double-get-by-val-out-of-bounds                    6.0652+-0.2715     ?      6.4510+-0.1283        ? might be 1.0636x slower
   double-pollution-getbyval                          9.9070+-0.2109     ?     10.0962+-0.2140        ? might be 1.0191x slower
   double-pollution-putbyoffset                       5.7728+-0.1123            5.4810+-0.3020          might be 1.0532x faster
   double-real-use                                   43.2477+-0.7977           42.3843+-0.7474          might be 1.0204x faster
   double-to-int32-typed-array-no-inline              3.1888+-0.2531            3.1877+-0.0929        
   double-to-int32-typed-array                        2.9633+-0.1358     ?      2.9861+-0.1890        ?
   double-to-uint32-typed-array-no-inline             3.3096+-0.1380            3.2552+-0.1406          might be 1.0167x faster
   double-to-uint32-typed-array                       2.9553+-0.2923     ?      2.9713+-0.1301        ?
   elidable-new-object-dag                           51.0750+-0.5699     ?     51.7626+-2.8665        ? might be 1.0135x slower
   elidable-new-object-roflcopter                    54.5837+-5.3123     ?     56.9871+-4.9472        ? might be 1.0440x slower
   elidable-new-object-then-call                     46.1835+-0.9752           45.9568+-1.2821        
   elidable-new-object-tree                          60.0275+-2.2650           59.2118+-0.8862          might be 1.0138x faster
   empty-string-plus-int                              7.7583+-0.2424            7.6490+-0.2813          might be 1.0143x faster
   emscripten-cube2hash                              49.0383+-1.0425           48.8310+-1.0660        
   exit-length-on-plain-object                       24.8073+-2.9641           24.7563+-1.8993        
   external-arguments-getbyval                        1.9602+-0.2761            1.7020+-0.2437          might be 1.1517x faster
   external-arguments-putbyval                        3.2968+-0.0243     ?      3.4729+-0.2811        ? might be 1.0534x slower
   fixed-typed-array-storage-var-index                1.6767+-0.1382            1.6558+-0.1394          might be 1.0126x faster
   fixed-typed-array-storage                          1.4437+-0.2378            1.3743+-0.1702          might be 1.0505x faster
   Float32Array-matrix-mult                           6.8943+-0.2421            6.8419+-0.3241        
   Float32Array-to-Float64Array-set                  77.1525+-0.5932     ?     77.5605+-1.1392        ?
   Float64Array-alloc-long-lived                     96.4258+-1.0685     ?     96.5167+-0.9127        ?
   Float64Array-to-Int16Array-set                    89.1247+-0.7915           88.7769+-0.9207        
   fold-double-to-int                                20.1792+-0.3758           19.8934+-0.8368          might be 1.0144x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     12.1274+-0.2279           12.1042+-0.3371        
   fold-get-by-id-to-multi-get-by-offset             10.1537+-0.2033           10.1322+-0.3983        
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.6564+-0.6774     ?      8.7762+-0.6410        ? might be 1.0138x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.1320+-0.9172     ?      9.5786+-0.2025        ? might be 1.0489x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.8674+-1.3362           10.4108+-1.3464          might be 1.0439x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      9.9627+-1.3386            9.6158+-1.6308          might be 1.0361x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     14.9016+-0.3584     ?     15.8825+-0.9489        ? might be 1.0658x slower
   fold-put-by-id-to-multi-put-by-offset             12.2554+-0.8331           11.9595+-0.8408          might be 1.0247x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     12.3565+-0.5421           12.3403+-0.6044        
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     12.2166+-0.4648           12.0323+-0.3119          might be 1.0153x faster
   fold-put-structure                                 7.8770+-0.4213            7.8683+-0.2652        
   for-of-iterate-array-entries                      15.2526+-0.1107           15.1192+-0.2534        
   for-of-iterate-array-keys                          5.2958+-0.2828     ?      5.4211+-0.4289        ? might be 1.0237x slower
   for-of-iterate-array-values                        5.2324+-0.3128     ?      5.2836+-0.2369        ?
   fround                                            25.0621+-0.7894     ^     14.1538+-0.3960        ^ definitely 1.7707x faster
   ftl-library-inlining-dataview                     94.5969+-2.6905           94.2038+-2.7222        
   ftl-library-inlining                              34.7360+-0.3728     ?     35.0024+-1.1563        ?
   ftl-polymorphic-bitand                           178.4547+-2.8855     ?    179.1273+-1.8201        ?
   ftl-polymorphic-bitor                            177.3090+-1.0179     ?    177.4557+-1.0188        ?
   ftl-polymorphic-bitxor                           183.5342+-15.0596         176.9176+-2.0409          might be 1.0374x faster
   ftl-polymorphic-div                              474.7602+-0.7365     ?    477.6074+-4.1744        ?
   ftl-polymorphic-lshift                           233.5742+-4.7821          231.6180+-3.4929        
   ftl-polymorphic-mul                              281.6637+-13.6666         275.5297+-3.5274          might be 1.0223x faster
   ftl-polymorphic-rshift                           230.6395+-2.7951     ?    232.1797+-4.5688        ?
   ftl-polymorphic-StringFromCharCode               254.7006+-7.2493          251.9734+-6.0083          might be 1.0108x faster
   ftl-polymorphic-sub                              209.7430+-2.4712     ?    210.3525+-2.0736        ?
   ftl-polymorphic-urshift                          213.2188+-4.2135          212.8165+-3.7613        
   function-call                                     13.6815+-0.3300           13.5425+-0.1938          might be 1.0103x faster
   function-dot-apply                                 3.1277+-0.1733     ?      3.1780+-0.0589        ? might be 1.0161x slower
   function-test                                      4.9226+-0.1039     ?      4.9581+-0.1501        ?
   function-with-eval                               133.6370+-0.5753     ?    134.1713+-0.6513        ?
   gcse-poly-get-less-obvious                        22.5526+-0.4910     ?     22.8972+-0.4311        ? might be 1.0153x slower
   gcse-poly-get                                     24.3603+-1.0812     ?     24.4720+-0.6455        ?
   gcse                                               6.8919+-0.0614            6.8665+-0.0938        
   generator-create                                   1.3356+-0.2288     ?      1.3690+-0.1946        ? might be 1.0250x slower
   generator-fib                                    148.8140+-2.5776     ?    149.1550+-1.4770        ?
   generator-function-create                          7.1974+-0.6146            6.9079+-0.2457          might be 1.0419x faster
   generator-sunspider-access-nsieve                  9.0087+-0.3430     ?      9.0576+-0.2810        ?
   generator-with-several-types                     477.1520+-17.7828    ?    487.3710+-2.8502        ? might be 1.0214x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.3068+-0.1624            3.2737+-0.0806          might be 1.0101x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      8.3885+-0.1420            8.2345+-0.0963          might be 1.0187x faster
   get-by-id-chain-from-try-block                     3.3570+-0.2039            3.3264+-0.1668        
   get-by-id-check-structure-elimination              7.8655+-0.1215     ?      7.8713+-0.1571        ?
   get-by-id-proto-or-self                           17.3420+-1.0202     ?     17.8170+-2.0567        ? might be 1.0274x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.0809+-0.0739            3.9925+-0.0916          might be 1.0221x faster
   get-by-id-self-or-proto                           17.0189+-1.5510     ?     17.3430+-1.4808        ? might be 1.0190x slower
   get-by-val-out-of-bounds                           6.1493+-0.3331     ?      6.3724+-0.0839        ? might be 1.0363x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      3.9508+-0.0621     ?      3.9797+-0.1264        ?
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                     10.7935+-0.0322           10.7687+-0.2365        
   get-by-val-with-string-chain-from-try-block   
                                                      3.4979+-0.0782            3.4352+-0.1353          might be 1.0182x faster
   get-by-val-with-string-check-structure-elimination   
                                                      9.5925+-0.4957            9.5369+-0.1083        
   get-by-val-with-string-proto-or-self              17.4597+-0.8146     ?     18.7150+-2.6408        ? might be 1.0719x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      4.9934+-0.1659     ?      5.0120+-0.0798        ?
   get-by-val-with-string-self-or-proto              18.4897+-1.4795           18.0692+-1.1650          might be 1.0233x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      4.7815+-0.0740     ?      4.8502+-0.1530        ? might be 1.0144x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     19.4285+-0.3706     ?     19.4825+-0.4711        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      3.3890+-0.1399     ?      3.4447+-0.2246        ? might be 1.0164x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     18.6983+-0.5164           18.5272+-0.3342        
   get-by-val-with-symbol-proto-or-self              17.7450+-0.5070           17.5809+-0.1945        
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      6.0405+-0.1013            5.9810+-0.0688        
   get-by-val-with-symbol-self-or-proto              18.4145+-2.4458           18.0310+-1.1538          might be 1.0213x faster
   get_callee_monomorphic                             3.7718+-0.1256            3.7632+-0.2521        
   get_callee_polymorphic                             4.9833+-0.1727     ?      4.9854+-0.2062        ?
   getter-no-activation                               5.3571+-0.1845            5.2678+-0.1125          might be 1.0170x faster
   getter-prototype                                   9.2153+-0.1358     ?      9.3868+-0.1343        ? might be 1.0186x slower
   getter-richards-try-catch                       1684.9681+-80.4204    ?   1738.9312+-147.2124      ? might be 1.0320x slower
   getter-richards                                  106.1762+-3.0768          105.5745+-3.3499        
   getter                                             7.1848+-0.4295     ^      6.4932+-0.0969        ^ definitely 1.1065x faster
   global-object-access-with-mutating-structure   
                                                      7.0046+-0.3706            6.9227+-0.0306          might be 1.0118x faster
   global-var-const-infer-fire-from-opt               1.2695+-0.2206            1.2272+-0.1738          might be 1.0345x faster
   global-var-const-infer                             1.0127+-0.0267     ?      1.0633+-0.1884        ? might be 1.0500x slower
   hard-overflow-check-equal                         42.9355+-0.3282     ?     43.1550+-0.5496        ?
   hard-overflow-check                               42.9749+-0.3676     ?     43.2217+-0.9553        ?
   HashMap-put-get-iterate-keys                      32.6147+-0.6080     ?     33.1882+-0.5534        ? might be 1.0176x slower
   HashMap-put-get-iterate                           32.5725+-0.5467           32.5110+-0.7090        
   HashMap-string-put-get-iterate                    36.2670+-2.4697           35.6643+-0.4587          might be 1.0169x faster
   hoist-make-rope                                    7.4429+-0.0136            7.3040+-0.3694          might be 1.0190x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.7762+-0.1635            5.7519+-0.1260        
   hoist-poly-check-structure                         3.7169+-0.1207     ?      3.7320+-0.2757        ?
   imul-double-only                                   5.0232+-0.2229     ?      5.0601+-0.2523        ?
   imul-int-only                                      8.6163+-0.1012     ?      9.0112+-0.4313        ? might be 1.0458x slower
   imul-mixed                                         5.8243+-0.5870            5.5670+-0.2006          might be 1.0462x faster
   in-four-cases                                     22.8632+-0.3742     ?     22.9845+-0.2693        ?
   in-one-case-false                                 12.7995+-0.1150     ?     13.0385+-0.4102        ? might be 1.0187x slower
   in-one-case-true                                  12.8520+-0.2550           12.7485+-0.1906        
   in-two-cases                                      13.7062+-0.2610     ?     13.7988+-0.4507        ?
   indexed-properties-in-objects                      4.0821+-0.1998            4.0380+-0.0614          might be 1.0109x faster
   infer-closure-const-then-mov-no-inline             4.2880+-0.0820            4.2524+-0.0905        
   infer-closure-const-then-mov                      12.2232+-0.2779           12.0385+-0.3337          might be 1.0153x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     14.8593+-0.8206           14.7341+-0.2666        
   infer-closure-const-then-put-to-scope             28.2531+-0.6940     ?     28.3699+-1.0268        ?
   infer-closure-const-then-reenter-no-inline   
                                                     67.3461+-0.0869           67.3287+-0.4977        
   infer-closure-const-then-reenter                  32.9683+-0.7261           32.7440+-0.4128        
   infer-constant-global-property                     4.9059+-0.1390            4.8773+-0.0890        
   infer-constant-property                            3.3851+-0.1769            3.3458+-0.0907          might be 1.0117x faster
   infer-one-time-closure-ten-vars                    9.6120+-0.3221     ?      9.6360+-0.2708        ?
   infer-one-time-closure-two-vars                    8.9012+-0.2345     ?      9.1200+-0.2687        ? might be 1.0246x slower
   infer-one-time-closure                             8.8472+-0.1803     ?      8.9043+-0.2901        ?
   infer-one-time-deep-closure                       16.2725+-0.3293           15.8667+-0.1205          might be 1.0256x faster
   inline-arguments-access                            5.8847+-0.2588     ?      6.1437+-0.1261        ? might be 1.0440x slower
   inline-arguments-aliased-access                    6.1810+-0.2434            6.1498+-0.2125        
   inline-arguments-local-escape                      6.0657+-0.1505     ?      6.1104+-0.1540        ?
   inline-get-scoped-var                              4.7315+-0.0911     ?      4.8143+-0.0734        ? might be 1.0175x slower
   inlined-put-by-id-transition                      16.5842+-0.7578     ?     16.8068+-0.4602        ? might be 1.0134x slower
   inlined-put-by-val-with-string-transition   
                                                     73.0472+-2.4475           70.4139+-3.0946          might be 1.0374x faster
   inlined-put-by-val-with-symbol-transition   
                                                     69.3528+-1.3811     ?     69.7209+-1.9878        ?
   instanceof-bound                                  42.5058+-1.4871     ?     42.7210+-1.3056        ?
   int-or-other-abs-then-get-by-val                   6.6191+-0.1544     ?      6.7462+-0.1956        ? might be 1.0192x slower
   int-or-other-abs-zero-then-get-by-val             27.8473+-0.2537     ?     28.3525+-0.5895        ? might be 1.0181x slower
   int-or-other-add-then-get-by-val                   6.5290+-0.0319     ^      6.4644+-0.0311        ^ definitely 1.0100x faster
   int-or-other-add                                   8.1900+-0.1051     ?      8.2120+-0.2024        ?
   int-or-other-div-then-get-by-val                   5.1790+-0.1037     ?      5.1854+-0.0831        ?
   int-or-other-max-then-get-by-val                   5.1562+-0.1190     ?      5.2205+-0.2152        ? might be 1.0125x slower
   int-or-other-min-then-get-by-val                   5.1794+-0.1200     ?      5.2130+-0.0817        ?
   int-or-other-mod-then-get-by-val                   4.9636+-0.1098     ?      4.9794+-0.1564        ?
   int-or-other-mul-then-get-by-val                   5.3463+-0.2438            5.2172+-0.0765          might be 1.0247x faster
   int-or-other-neg-then-get-by-val                   5.7950+-0.1497     ?      5.8638+-0.1225        ? might be 1.0119x slower
   int-or-other-neg-zero-then-get-by-val             28.3607+-0.7112           28.0523+-0.5110          might be 1.0110x faster
   int-or-other-sub-then-get-by-val                   6.3711+-0.1666     ?      6.4853+-0.0936        ? might be 1.0179x slower
   int-or-other-sub                                   5.3333+-0.1532     ?      5.3950+-0.1378        ? might be 1.0116x slower
   int-overflow-local                                 6.1630+-0.0928     ?      6.2404+-0.1979        ? might be 1.0125x slower
   Int16Array-alloc-long-lived                       68.2151+-1.0256     ?     68.2496+-1.6619        ?
   Int16Array-bubble-sort-with-byteLength            35.6497+-0.9249           35.4227+-0.8086        
   Int16Array-bubble-sort                            36.7913+-0.9085           36.7900+-0.6881        
   Int16Array-load-int-mul                            2.2570+-0.1783            2.2337+-0.1664          might be 1.0104x faster
   Int16Array-to-Int32Array-set                      77.0657+-27.0516          68.9510+-1.9506          might be 1.1177x faster
   Int32Array-alloc-large                            32.7397+-1.4636     ?     32.7792+-1.1850        ?
   Int32Array-alloc-long-lived                       76.7308+-2.5007           75.8788+-0.4416          might be 1.0112x faster
   Int32Array-alloc                                   4.7334+-0.1622            4.7111+-0.0366        
   Int32Array-Int8Array-view-alloc                    9.2642+-0.1018            9.2360+-0.3320        
   int52-spill                                        7.0287+-0.2477     ?      7.0668+-0.1969        ?
   Int8Array-alloc-long-lived                        61.3475+-1.1311           61.1877+-1.2345        
   Int8Array-load-with-byteLength                     4.8205+-0.1605            4.7906+-0.0428        
   Int8Array-load                                     4.8463+-0.1203            4.7950+-0.1293          might be 1.0107x faster
   integer-divide                                    14.1325+-0.1999           14.1147+-0.5000        
   integer-modulo                                     2.8177+-0.0813            2.7711+-0.1534          might be 1.0168x faster
   is-boolean-fold-tricky                             5.8452+-0.1020            5.8298+-0.1379        
   is-boolean-fold                                    4.2026+-0.1236            4.1288+-0.1427          might be 1.0179x faster
   is-function-fold-tricky-internal-function   
                                                     15.0925+-0.2452     ^     14.7124+-0.1119        ^ definitely 1.0258x faster
   is-function-fold-tricky                            5.9238+-0.1438     ?      5.9821+-0.0211        ?
   is-function-fold                                   4.2262+-0.1554     ?      4.2383+-0.0528        ?
   is-number-fold-tricky                              5.8773+-0.0502            5.8099+-0.1296          might be 1.0116x faster
   is-number-fold                                     4.1939+-0.1728            4.1926+-0.1133        
   is-object-or-null-fold-functions                   4.2708+-0.1666     ?      4.3342+-0.0567        ? might be 1.0148x slower
   is-object-or-null-fold-less-tricky                 5.8741+-0.1228     ?      5.9639+-0.1345        ? might be 1.0153x slower
   is-object-or-null-fold-tricky                      7.5780+-0.0769     ?      7.6412+-0.0907        ?
   is-object-or-null-fold                             4.1682+-0.1364     ?      4.2763+-0.1183        ? might be 1.0259x slower
   is-object-or-null-trickier-function                6.0742+-0.1322            6.0602+-0.1117        
   is-object-or-null-trickier-internal-function   
                                                     15.3252+-0.5371     ?     15.3767+-0.2861        ?
   is-object-or-null-tricky-function                  5.9474+-0.1987     ?      6.0818+-0.1733        ? might be 1.0226x slower
   is-object-or-null-tricky-internal-function   
                                                     11.1194+-0.1683     ?     11.1495+-0.3251        ?
   is-string-fold-tricky                              5.9285+-0.1976            5.8548+-0.1181          might be 1.0126x faster
   is-string-fold                                     4.0608+-0.0683     ?      4.2583+-0.1642        ? might be 1.0486x slower
   is-undefined-fold-tricky                           5.0073+-0.2403            4.9365+-0.0978          might be 1.0143x faster
   is-undefined-fold                                  4.1878+-0.1205     ?      4.3677+-0.4172        ? might be 1.0430x slower
   JSONP-negative-0                                   0.4609+-0.0832     ?      0.4891+-0.0968        ? might be 1.0610x slower
   large-int-captured                                 4.5730+-0.2892            4.4915+-0.3134          might be 1.0182x faster
   large-int-neg                                     18.0195+-0.3798     ?     18.1314+-0.2816        ?
   large-int                                         15.8219+-0.3265     ?     16.3056+-0.3486        ? might be 1.0306x slower
   load-varargs-elimination                          25.4585+-0.5371     ?     26.0684+-1.9786        ? might be 1.0240x slower
   logical-not-weird-types                            5.0255+-0.0953     ?      5.1058+-0.0592        ? might be 1.0160x slower
   logical-not                                        6.6699+-0.4346     ?      6.7655+-0.1049        ? might be 1.0143x slower
   lots-of-fields                                    17.9507+-0.5852     ?     17.9650+-0.4613        ?
   make-indexed-storage                               4.2756+-0.3206     ?      4.3627+-0.3749        ? might be 1.0204x slower
   make-rope-cse                                      6.8107+-0.4184            6.7977+-0.0900        
   map-for-each                                       8.2396+-0.1765     ?      8.4064+-0.1897        ? might be 1.0202x slower
   map-for-of                                        26.5817+-0.3002     ?     26.9105+-0.4515        ? might be 1.0124x slower
   marsaglia-larger-ints                             57.3019+-1.6106           57.2570+-1.3619        
   marsaglia-osr-entry                               23.2538+-0.6287     ?     23.3062+-0.3659        ?
   math-random                                       19.8539+-0.1434     ?     19.9324+-0.4567        ?
   math-with-out-of-bounds-array-values              38.7163+-0.5395     ?     38.7436+-0.7139        ?
   max-boolean                                        3.4290+-0.0337            3.4055+-0.1291        
   method-on-number                                  22.7703+-0.1318     ?     23.0731+-0.3219        ? might be 1.0133x slower
   min-boolean                                        3.4627+-0.0661            3.3838+-0.1311          might be 1.0233x faster
   minus-boolean-double                               4.4151+-0.1122     ?      4.5302+-0.0490        ? might be 1.0261x slower
   minus-boolean                                      3.4070+-0.2202            3.3963+-0.0566        
   misc-strict-eq                                    38.2802+-1.0694           38.0988+-1.8738        
   mod-boolean-double                                10.8621+-0.1430           10.7966+-0.2090        
   mod-boolean                                        8.7874+-0.1441            8.6252+-0.3206          might be 1.0188x faster
   mul-boolean-double                                 5.1445+-0.1017            5.0883+-0.0508          might be 1.0110x faster
   mul-boolean                                        3.8746+-0.4402            3.7133+-0.1212          might be 1.0434x faster
   neg-boolean                                        4.3976+-0.0556     ?      4.4593+-0.1480        ? might be 1.0140x slower
   negative-zero-divide                               0.6165+-0.1485     ?      0.6335+-0.1273        ? might be 1.0275x slower
   negative-zero-modulo                               0.5970+-0.1152     ?      0.6537+-0.1226        ? might be 1.0950x slower
   negative-zero-negate                               0.6563+-0.1127     ?      0.6612+-0.1210        ?
   nested-function-parsing                           74.4838+-0.8109     ?     74.7634+-1.0689        ?
   new-array-buffer-dead                            142.5826+-1.1290     ?    144.2305+-0.8656        ? might be 1.0116x slower
   new-array-buffer-push                             10.3389+-0.4805     ?     10.4008+-0.1101        ?
   new-array-dead                                    14.7878+-0.4732     ?     14.8218+-0.8676        ?
   new-array-push                                     6.0920+-0.2123     ?      6.3625+-0.4209        ? might be 1.0444x slower
   no-inline-constructor                             47.9748+-0.6279     ?     48.1799+-1.6919        ?
   number-test                                        5.0363+-0.1434            4.9540+-0.1271          might be 1.0166x faster
   object-closure-call                                7.5772+-0.0818            7.4996+-0.1225          might be 1.0104x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.8166+-0.4276     ?      5.1675+-0.7361        ? might be 1.0729x slower
   object-test                                        4.7541+-0.1588     ?      4.8293+-0.1364        ? might be 1.0158x slower
   obvious-sink-pathology-taken                     187.5803+-1.4629          187.3974+-1.8847        
   obvious-sink-pathology                            44.3376+-1.4628           43.8107+-1.1363          might be 1.0120x faster
   obviously-elidable-new-object                     40.1348+-0.8733           39.5477+-1.6277          might be 1.0148x faster
   plus-boolean-arith                                 3.3671+-0.1799     ?      3.4542+-0.1855        ? might be 1.0259x slower
   plus-boolean-double                                4.4644+-0.1907            4.4207+-0.1559        
   plus-boolean                                       3.3882+-0.2161            3.3238+-0.2456          might be 1.0194x faster
   poly-chain-access-different-prototypes-simple   
                                                      4.0759+-0.0118            3.9629+-0.1522          might be 1.0285x faster
   poly-chain-access-different-prototypes             3.3580+-0.1233     ?      3.3844+-0.1698        ?
   poly-chain-access-simpler                          3.9627+-0.0931     ?      4.0184+-0.1864        ? might be 1.0140x slower
   poly-chain-access                                  3.4449+-0.0797            3.4231+-0.1226        
   poly-stricteq                                     87.0508+-2.8130           86.1597+-0.8340          might be 1.0103x faster
   polymorphic-array-call                             2.0311+-0.1127     ?      2.0873+-0.0559        ? might be 1.0277x slower
   polymorphic-get-by-id                              3.4130+-0.2256            3.3994+-0.1894        
   polymorphic-put-by-id                             46.5748+-0.7792     ?     46.8862+-0.8798        ?
   polymorphic-put-by-val-with-string                48.0761+-0.3227     ?     48.1671+-0.3498        ?
   polymorphic-put-by-val-with-symbol                49.0195+-2.6472           47.7693+-0.3075          might be 1.0262x faster
   polymorphic-structure                             25.2905+-0.5569     ?     25.8140+-0.5564        ? might be 1.0207x slower
   polyvariant-monomorphic-get-by-id                  7.7303+-0.1874            7.6562+-0.1380        
   proto-getter-access                               14.0106+-0.0709     ?     14.0612+-0.2870        ?
   prototype-access-with-mutating-prototype           6.7023+-0.5675     ?      6.9431+-1.4952        ? might be 1.0359x slower
   put-by-id-replace-and-transition                  12.5635+-0.4059           12.4476+-0.4357        
   put-by-id-slightly-polymorphic                     3.7295+-0.1258            3.6486+-0.1673          might be 1.0222x faster
   put-by-id                                         18.5322+-1.0330           18.5022+-0.2688        
   put-by-val-direct                                  0.6990+-0.0828            0.5972+-0.0766          might be 1.1705x faster
   put-by-val-large-index-blank-indexing-type   
                                                      8.4684+-0.1668            8.4356+-0.0780        
   put-by-val-machine-int                             3.8586+-0.2163            3.8488+-0.2274        
   put-by-val-with-string-replace-and-transition   
                                                     19.7113+-0.6825           19.6830+-0.1754        
   put-by-val-with-string-slightly-polymorphic   
                                                      4.7835+-0.1342     ?      4.8959+-0.1762        ? might be 1.0235x slower
   put-by-val-with-string                            19.4439+-0.4082           19.4028+-0.6943        
   put-by-val-with-symbol-replace-and-transition   
                                                     21.9227+-1.1804           21.5447+-0.5974          might be 1.0175x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      5.0620+-0.1708     ?      5.0638+-0.0389        ?
   put-by-val-with-symbol                            19.1540+-0.3756     ?     19.3130+-0.4822        ?
   rare-osr-exit-on-local                            17.2961+-0.1047           16.8087+-2.1965          might be 1.0290x faster
   raytrace-with-empty-try-catch                      9.7394+-0.2013            9.5508+-0.1157          might be 1.0198x faster
   raytrace-with-try-catch                           17.0383+-0.4553     ?     17.0453+-0.4433        ?
   register-pressure-from-osr                        24.2247+-0.0925     ?     24.2310+-0.2294        ?
   repeat-multi-get-by-offset                        25.8497+-0.3027     ?     26.2375+-0.8541        ? might be 1.0150x slower
   richards-empty-try-catch                          74.0649+-1.5889     ?     75.3212+-1.0306        ? might be 1.0170x slower
   richards-try-catch                               380.2310+-4.4057     ?    383.5835+-10.0136       ?
   set-for-each                                       7.3477+-0.1903            7.1918+-0.2008          might be 1.0217x faster
   set-for-of                                        11.5637+-0.1985     ?     11.7592+-0.4390        ? might be 1.0169x slower
   setter-prototype                                   9.4574+-0.3768            9.4074+-0.1455        
   setter                                             5.9648+-0.3266            5.7987+-0.3184          might be 1.0286x faster
   simple-activation-demo                            32.2260+-0.7777     ?     32.5591+-0.9259        ? might be 1.0103x slower
   simple-getter-access                              22.4758+-0.4640           22.4590+-1.2412        
   simple-poly-call-nested                            7.3763+-0.1927            7.3392+-0.3182        
   simple-poly-call                                   1.9113+-0.0830            1.8445+-0.0908          might be 1.0362x faster
   sin-boolean                                       18.1660+-0.4029           18.0451+-0.1401        
   singleton-scope                                   77.1816+-1.1078     ?     77.2692+-0.7739        ?
   sink-function                                     10.0673+-0.8025            9.7680+-0.7466          might be 1.0306x faster
   sink-huge-activation                              15.9868+-0.3957           15.8051+-0.5649          might be 1.0115x faster
   sinkable-new-object-dag                           95.9852+-1.7120     ?     96.7305+-3.0798        ?
   sinkable-new-object-taken                         74.4748+-0.7954           74.4005+-1.8803        
   sinkable-new-object                               43.8137+-0.7714     ?     44.2670+-0.7976        ? might be 1.0103x slower
   slow-array-profile-convergence                     4.2158+-0.2100            4.0260+-0.0837          might be 1.0471x faster
   slow-convergence                                   3.9286+-0.1762     ?      4.0897+-0.2551        ? might be 1.0410x slower
   slow-ternaries                                    25.8693+-0.4836     ?     26.0515+-0.7143        ?
   sorting-benchmark                                 25.7912+-0.6517     ?     26.1097+-0.4765        ? might be 1.0124x slower
   sparse-conditional                                 1.7997+-0.0674            1.7407+-0.1013          might be 1.0339x faster
   splice-to-remove                                  19.8302+-0.7036           19.3983+-0.1019          might be 1.0223x faster
   string-char-code-at                               20.5723+-0.2979     ?     20.6144+-0.3160        ?
   string-concat-object                               3.3813+-0.4347            3.2667+-0.0999          might be 1.0351x faster
   string-concat-pair-object                          3.1800+-0.1042     ?      3.1929+-0.0491        ?
   string-concat-pair-simple                         17.3473+-0.4367     ?     17.4147+-0.3214        ?
   string-concat-simple                              17.0434+-0.3332     ?     17.3651+-0.4311        ? might be 1.0189x slower
   string-cons-repeat                                11.3688+-0.1145           11.3597+-0.1005        
   string-cons-tower                                 10.9457+-0.4887           10.7888+-0.1827          might be 1.0145x faster
   string-equality                                   25.0823+-0.6966           24.8271+-0.3814          might be 1.0103x faster
   string-get-by-val-big-char                         9.7296+-0.5642            9.1755+-0.6101          might be 1.0604x faster
   string-get-by-val-out-of-bounds-insane             5.0639+-0.1738            5.0045+-0.2398          might be 1.0119x faster
   string-get-by-val-out-of-bounds                    6.7180+-0.1593            6.7173+-0.1091        
   string-get-by-val                                  4.9477+-0.1629     ?      4.9933+-0.1252        ?
   string-hash                                        2.8548+-0.1814     ?      2.9103+-0.1214        ? might be 1.0194x slower
   string-long-ident-equality                        20.5215+-0.5573           20.4242+-0.2502        
   string-out-of-bounds                              12.5106+-0.3454           12.3015+-0.1414          might be 1.0170x faster
   string-repeat-arith                               34.6390+-0.8129     ?     34.6824+-0.6331        ?
   string-rope-with-object                           21.2105+-0.2404     ?     21.5312+-1.2650        ? might be 1.0151x slower
   string-sub                                        56.2585+-0.7098     ?     56.7814+-0.6672        ?
   string-test                                        5.0455+-0.1746            4.9406+-0.0744          might be 1.0212x faster
   string-var-equality                               61.2897+-5.0435           61.0154+-1.9532        
   structure-hoist-over-transitions                   3.4108+-0.1520     ?      3.4870+-0.2559        ? might be 1.0224x slower
   substring-concat-weird                            57.2344+-1.1400     ?     58.3620+-1.2887        ? might be 1.0197x slower
   substring-concat                                  62.6795+-1.2670     ?     62.9668+-1.0787        ?
   substring                                         70.9722+-0.7412           70.7723+-1.2181        
   switch-char-constant                               3.5017+-0.0320     ?      3.5865+-0.1887        ? might be 1.0242x slower
   switch-char                                        8.0527+-0.2293     ?      8.1854+-0.3100        ? might be 1.0165x slower
   switch-constant                                    9.4952+-0.7420     ?      9.8021+-0.6142        ? might be 1.0323x slower
   switch-string-basic-big-var                       30.8600+-3.2059     ?     32.3210+-3.1862        ? might be 1.0473x slower
   switch-string-basic-big                           21.7714+-3.5127           21.3331+-2.7879          might be 1.0205x faster
   switch-string-basic-var                           25.1937+-0.7572           24.2742+-2.1117          might be 1.0379x faster
   switch-string-basic                               24.5512+-0.6932     ?     25.4567+-2.4670        ? might be 1.0369x slower
   switch-string-big-length-tower-var                25.8600+-1.3003           25.4553+-0.2503          might be 1.0159x faster
   switch-string-length-tower-var                    20.9031+-0.4754     ?     20.9616+-0.7555        ?
   switch-string-length-tower                        14.7100+-0.2008           14.3443+-0.1801          might be 1.0255x faster
   switch-string-short                               17.6495+-3.2857     ?     18.4695+-1.9567        ? might be 1.0465x slower
   switch                                            13.8019+-0.3266     ?     14.2393+-0.4716        ? might be 1.0317x slower
   symbol-tostringtag                                 4.9202+-0.1107     ?      5.0250+-0.0340        ? might be 1.0213x slower
   tear-off-arguments-simple                          4.1382+-0.3505            3.9279+-0.3773          might be 1.0536x faster
   tear-off-arguments                                 5.1936+-0.1300            5.1062+-0.2086          might be 1.0171x faster
   temporal-structure                                16.7866+-0.1539           16.6800+-0.3682        
   to-int32-boolean                                  22.2523+-0.6386     ?     22.2543+-0.6094        ?
   try-catch-get-by-val-cloned-arguments              9.5323+-1.7107     ?      9.9928+-2.6355        ? might be 1.0483x slower
   try-catch-get-by-val-direct-arguments              3.4053+-0.2578     ?      3.5062+-0.4050        ? might be 1.0296x slower
   try-catch-get-by-val-scoped-arguments              6.4220+-0.3463            6.2363+-0.1786          might be 1.0298x faster
   typed-array-get-set-by-val-profiling              28.3992+-0.3973     ?     29.3038+-0.9898        ? might be 1.0319x slower
   undefined-property-access                        416.6966+-0.4296          416.5255+-0.9810        
   undefined-test                                     5.2035+-0.2725            5.1164+-0.1153          might be 1.0170x faster
   unprofiled-licm                                   13.0049+-0.5487           12.9457+-0.5758        
   v8-raytrace-with-empty-try-catch                  88.3940+-0.6285     ?     88.8006+-0.8260        ?
   v8-raytrace-with-try-catch                       113.7247+-1.3148          113.0792+-1.7639        
   varargs-call                                      17.3661+-0.7775           17.0636+-0.0860          might be 1.0177x faster
   varargs-construct-inline                          32.1750+-1.5263           31.3258+-0.6669          might be 1.0271x faster
   varargs-construct                                 27.3507+-0.0378     ?     27.9266+-0.9531        ? might be 1.0211x slower
   varargs-inline                                    10.8823+-0.3440           10.8804+-0.2138        
   varargs-strict-mode                               14.0779+-0.1902           13.8708+-0.4971          might be 1.0149x faster
   varargs                                           13.7607+-0.0901           13.7535+-0.2575        
   weird-inlining-const-prop                          3.2292+-0.1077            3.1900+-0.1802          might be 1.0123x faster

   <geometric>                                       12.6957+-0.0435           12.6625+-0.0204          might be 1.0026x faster

                                                          Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                                       673.0545+-24.1778    ?    676.2591+-8.9048        ?
   cray.c                                           594.9161+-7.2478     ?    605.5986+-7.8252        ? might be 1.0180x slower
   dry.c                                            645.0521+-0.6494     ?    645.4293+-1.4053        ?
   FloatMM.c                                       1022.7501+-65.1852        1022.4031+-64.3301       
   gcc-loops.cpp                                   6402.6933+-60.2925    ?   6411.9796+-41.8254       ?
   n-body.c                                        1589.9793+-5.0328     !   1794.4055+-11.6615       ! definitely 1.1286x slower
   Quicksort.c                                      589.7418+-8.7599          589.2413+-8.2093        
   stepanov_container.cpp                          4474.2108+-44.6953    ?   4484.1943+-11.8724       ?
   Towers.c                                         403.9198+-24.6696    !    430.2201+-1.5898        ! definitely 1.0651x slower

   <geometric>                                     1123.9434+-8.9705     !   1150.5234+-5.3715        ! definitely 1.0236x slower

                                                          Conf#1                    Conf#2                                      
CompressionBench:
   huffman                                           81.0822+-1.3851     ?     81.4351+-1.2615        ?
   arithmetic-simple                                426.2757+-1.3350     ?    427.7866+-1.2533        ?
   arithmetic-precise                               363.7267+-4.1409          361.4410+-2.2837        
   arithmetic-complex-precise                       362.5070+-1.5892          360.3991+-1.4439        
   arithmetic-precise-order-0                       435.8502+-1.3809          435.5358+-1.3720        
   arithmetic-precise-order-1                       422.9440+-3.7921     ?    423.1777+-2.5906        ?
   arithmetic-precise-order-2                       489.8008+-2.3222     ?    494.8420+-9.5978        ? might be 1.0103x slower
   arithmetic-simple-order-1                        489.1820+-0.5104          489.1222+-0.6022        
   arithmetic-simple-order-2                        553.1318+-3.0236     ?    556.0154+-5.3832        ?
   lz-string                                        434.1714+-9.6298          431.8125+-7.8192        

   <geometric>                                      370.1903+-1.6201     ?    370.3911+-1.2487        ? might be 1.0005x slower

                                                          Conf#1                    Conf#2                                      
Geomean of preferred means:
   <scaled-result>                                   78.1663+-0.1779           78.0967+-0.1424          might be 1.0009x faster
Comment 3 Filip Pizlo 2016-01-25 23:29:28 PST
Comment on attachment 269856 [details]
Patch

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

I guess I'm OK with these heuristics, but I think that the heuristics I'm proposing are better, and they match the intuition that you provide in the ChangeLog.  If you do land this, then please change the ChangeLog to account for the fact that we can already do the better thing.

> Source/JavaScriptCore/ChangeLog:26
> +        Ideally, we should change UseCount to be loop aware but that seemed

Actually, that's not what you want - you want to check if either value's owning block has lower execution frequency.

> Source/JavaScriptCore/b3/B3LowerToAir.cpp:604
> +            // If one operand is not in the block, it could be in a block dominating a loop
> +            // containing m_value.
> +            if (left->owner == m_value->owner)
> +                return false;
> +            if (right->owner == m_value->owner)
> +                return true;

Or you could check left->owner->frequency() and right->owner->frequency().  If either of them has lower frequency than m_value->owner->frequency(), then they are from a block dominating the loop!
Comment 4 Benjamin Poulain 2016-01-26 13:45:16 PST
Created attachment 269912 [details]
Patch
Comment 5 Benjamin Poulain 2016-01-26 13:46:00 PST
The frequency felt a bit weak for me since it is not a property of the CFG. What do you think of this?
Comment 6 Filip Pizlo 2016-01-26 14:03:31 PST
Comment on attachment 269912 [details]
Patch

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

> Source/JavaScriptCore/ChangeLog:28
> +        -Otherwise, use the lowest frequency block if the frequency is set.

But, you want to use the highest frequency.  Lowest frequency means: highest likelihood of being a value that is live "around" the loop.  You want the highest frequency that is less than the frequency of the owning block.

Probably if you did this, then you wouldn't need the other heuristic.

That said, I'm totally OK with this patch just using the same-block rule, so long as the comments explain that this is an approximation of something else.  In particular, I'm surprised that you haven't mentioned in comments that what we're actually after is whether m_value kills the value that we use for UseDef.  We use use count being 1 to approximate this, which usually makes sense, because if I am the only user of some value then this value is usually not live after me.  But use count could be 1 if the value I'm using was hoisted out of a loop.

Since the same-block heuristic is the thing that gives a speed-up, it makes sense for the patch to just have that, so long as you document the intuition.
Comment 7 Filip Pizlo 2016-01-26 14:04:17 PST
Comment on attachment 269912 [details]
Patch

Setting R- because the lowest-frequency rule is actually the opposite of what we want.  Lowest frequency implies highest likelihood of being a hoisted value and so being live after the use.
Comment 8 Benjamin Poulain 2016-01-26 16:05:34 PST
Created attachment 269940 [details]
Patch
Comment 9 Filip Pizlo 2016-01-26 16:10:04 PST
Comment on attachment 269940 [details]
Patch

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

> Source/JavaScriptCore/ChangeLog:39
> +        There is one other way that would be cheap but a bit invasive:
> +        -Get rid of UseDef.
> +        -Make every ops, 3 operands.
> +        -Tell the register allocator to attempt aliasing of the 2 uses
> +         with the def.
> +        -If the allocator fails, just add a move as needed.

I agree with this.  I was thinking it would work like this:

- Make AirOpcodes.opcodes pretend that X86 has three-operand add, sub, and mul.
- Make MacroAssemblerX86 implement the three-operand forms by doing an extra move or whatever (in the case of sub it might turn into a neg+add if the operands are aliased a certain way)
- Have an Air analysis that tells you if an Inst has a "desired aliasing".  This will not be an analysis based on AirOpcodes since that seems too complicated.  It will just know about the add, sub, and mul situation on x86.
Comment 10 Benjamin Poulain 2016-01-26 21:14:58 PST
Created attachment 269979 [details]
Patch for landing
Comment 11 WebKit Commit Bot 2016-01-26 22:10:24 PST
Comment on attachment 269979 [details]
Patch for landing

Clearing flags on attachment: 269979

Committed r195654: <http://trac.webkit.org/changeset/195654>
Comment 12 WebKit Commit Bot 2016-01-26 22:10:28 PST
All reviewed patches have been landed.  Closing bug.
Comment 13 Filip Pizlo 2016-01-27 21:20:41 PST
>                                                           Conf#1            
> Conf#2                                      
> AsmBench:
>    bigfib.cpp                                       673.0545+-24.1778    ?  
> 676.2591+-8.9048        ?
>    cray.c                                           594.9161+-7.2478     ?  
> 605.5986+-7.8252        ? might be 1.0180x slower
>    dry.c                                            645.0521+-0.6494     ?  
> 645.4293+-1.4053        ?
>    FloatMM.c                                       1022.7501+-65.1852       
> 1022.4031+-64.3301       
>    gcc-loops.cpp                                   6402.6933+-60.2925    ?  
> 6411.9796+-41.8254       ?
>    n-body.c                                        1589.9793+-5.0328     !  
> 1794.4055+-11.6615       ! definitely 1.1286x slower
>    Quicksort.c                                      589.7418+-8.7599        
> 589.2413+-8.2093        
>    stepanov_container.cpp                          4474.2108+-44.6953    ?  
> 4484.1943+-11.8724       ?
>    Towers.c                                         403.9198+-24.6696    !  
> 430.2201+-1.5898        ! definitely 1.0651x slower
> 
>    <geometric>                                     1123.9434+-8.9705     !  
> 1150.5234+-5.3715        ! definitely 1.0236x slower

I can't believe we missed this!  We can't slow down AsmBench, it's from JetStream.  This is a huge slow-down on n-body.
Comment 14 Filip Pizlo 2016-01-27 21:48:45 PST
(In reply to comment #13)
> >                                                           Conf#1            
> > Conf#2                                      
> > AsmBench:
> >    bigfib.cpp                                       673.0545+-24.1778    ?  
> > 676.2591+-8.9048        ?
> >    cray.c                                           594.9161+-7.2478     ?  
> > 605.5986+-7.8252        ? might be 1.0180x slower
> >    dry.c                                            645.0521+-0.6494     ?  
> > 645.4293+-1.4053        ?
> >    FloatMM.c                                       1022.7501+-65.1852       
> > 1022.4031+-64.3301       
> >    gcc-loops.cpp                                   6402.6933+-60.2925    ?  
> > 6411.9796+-41.8254       ?
> >    n-body.c                                        1589.9793+-5.0328     !  
> > 1794.4055+-11.6615       ! definitely 1.1286x slower
> >    Quicksort.c                                      589.7418+-8.7599        
> > 589.2413+-8.2093        
> >    stepanov_container.cpp                          4474.2108+-44.6953    ?  
> > 4484.1943+-11.8724       ?
> >    Towers.c                                         403.9198+-24.6696    !  
> > 430.2201+-1.5898        ! definitely 1.0651x slower
> > 
> >    <geometric>                                     1123.9434+-8.9705     !  
> > 1150.5234+-5.3715        ! definitely 1.0236x slower
> 
> I can't believe we missed this!  We can't slow down AsmBench, it's from
> JetStream.  This is a huge slow-down on n-body.

Fix: https://bugs.webkit.org/show_bug.cgi?id=153583