Bug 128073 - [ftlopt] AI should be able track structure sets larger than 1
Summary: [ftlopt] AI should be able track structure sets larger than 1
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords: InRadar
Depends on: 133014
Blocks: 132357 133229 133398 133426
  Show dependency treegraph
 
Reported: 2014-02-02 10:25 PST by Filip Pizlo
Modified: 2014-07-23 16:36 PDT (History)
11 users (show)

See Also:


Attachments
the wrong way (7.81 KB, patch)
2014-05-22 14:41 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to look sensible (35.18 KB, patch)
2014-05-22 20:23 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more! (67.84 KB, patch)
2014-05-23 14:01 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more. (77.99 KB, patch)
2014-05-28 19:03 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
crashes on launch (97.18 KB, patch)
2014-05-28 20:45 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to work (111.58 KB, patch)
2014-05-29 15:09 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
now it only fails thousands of tests (124.10 KB, patch)
2014-05-29 16:39 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
less then a hundred failures (129.70 KB, patch)
2014-05-29 23:06 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
using a slightly more complicated approach (139.14 KB, patch)
2014-05-30 14:35 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
almost done (172.27 KB, patch)
2014-06-01 10:50 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
almoster doner (190.41 KB, patch)
2014-06-01 11:36 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
basically works (214.36 KB, patch)
2014-06-02 20:19 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it's faster (218.28 KB, patch)
2014-06-03 13:20 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
and now, it's actually totally sound! (249.94 KB, patch)
2014-06-03 16:29 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (255.72 KB, patch)
2014-06-03 19:58 PDT, Filip Pizlo
oliver: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Filip Pizlo 2014-02-02 10:25:18 PST
...
Comment 1 Filip Pizlo 2014-05-22 14:41:26 PDT
Created attachment 231915 [details]
the wrong way

I think that the right way to do this is to have the DFG watch any watchable structure and then to have clobbering assume that you don't need to clobber watchable structures.

Easy as pie.
Comment 2 Filip Pizlo 2014-05-22 14:41:55 PDT
Oh and here are the perf numbers of watching all watchable structures:

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

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/ftlopt/OpenSource/WebKitBuild/Release/jsc (r169210)
"MoreWatchpoints" at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/jsc (r169210)

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

                                                        TipOfTree              MoreWatchpoints                                  
SunSpider:
   3d-cube                                            7.7771+-0.0765     ?      7.8234+-0.0980        ?
   3d-morph                                           9.3914+-0.0579     ?      9.3939+-0.0894        ?
   3d-raytrace                                       10.0005+-0.1363     ?     10.0189+-0.0705        ?
   access-binary-trees                                2.8274+-0.0324            2.7395+-0.0799          might be 1.0321x faster
   access-fannkuch                                    9.3280+-0.2334            9.2397+-0.1727        
   access-nbody                                       4.7224+-0.0739            4.6570+-0.0072          might be 1.0140x faster
   access-nsieve                                      5.5432+-0.0947            5.4903+-0.0789        
   bitops-3bit-bits-in-byte                           1.8588+-0.0146            1.8572+-0.0087        
   bitops-bits-in-byte                                6.5026+-0.0657     ?      6.5251+-0.1344        ?
   bitops-bitwise-and                                 3.2026+-0.0715            3.1766+-0.0577        
   bitops-nsieve-bits                                 5.8017+-0.0236     ^      5.7067+-0.0347        ^ definitely 1.0166x faster
   controlflow-recursive                              2.8598+-0.0998     ?      2.9045+-0.0490        ? might be 1.0156x slower
   crypto-aes                                         6.2783+-0.0891            6.2756+-0.0356        
   crypto-md5                                         3.5803+-0.1423            3.4563+-0.0754          might be 1.0359x faster
   crypto-sha1                                        3.7611+-0.1029            3.7411+-0.0622        
   date-format-tofte                                 13.2462+-0.1423     ?     13.2799+-0.2038        ?
   date-format-xparb                                  9.9740+-0.2692     ?     10.2703+-0.1868        ? might be 1.0297x slower
   math-cordic                                        4.8072+-0.0929            4.7590+-0.0705          might be 1.0101x faster
   math-partial-sums                                 10.6381+-0.2241           10.4179+-0.0312          might be 1.0211x faster
   math-spectral-norm                                 3.0695+-0.0476            3.0588+-0.0250        
   regexp-dna                                        12.0284+-0.1739     ?     12.0312+-0.1050        ?
   string-base64                                      6.3721+-0.0758     ?      6.4257+-0.0831        ?
   string-fasta                                      10.3696+-0.2276     ?     10.4851+-0.2843        ? might be 1.0111x slower
   string-tagcloud                                   15.6822+-0.2678     ?     15.6900+-0.2550        ?
   string-unpack-code                                32.6667+-0.9394     ?     33.0823+-0.7772        ? might be 1.0127x slower
   string-validate-input                              7.6398+-0.1135     ?      7.6860+-0.0958        ?

   <arithmetic> *                                     8.0742+-0.0463     ?      8.0843+-0.0396        ? might be 1.0013x slower
   <geometric>                                        6.5635+-0.0314            6.5467+-0.0135          might be 1.0026x faster
   <harmonic>                                         5.4333+-0.0336            5.4043+-0.0100          might be 1.0054x faster

                                                        TipOfTree              MoreWatchpoints                                  
LongSpider:
   3d-cube                                         1392.5235+-13.7862    ?   1399.5999+-36.3436       ?
   3d-morph                                        2286.8144+-3.6939     ?   2303.5964+-50.0452       ?
   3d-raytrace                                     1465.7306+-17.6457    ?   1476.8281+-42.8307       ?
   access-binary-trees                             1673.0638+-10.5233    ?   1673.7282+-24.4042       ?
   access-fannkuch                                  531.7426+-18.5349         527.1615+-7.0910        
   access-nbody                                    1245.1110+-3.4118     !   1264.6690+-8.2210        ! definitely 1.0157x slower
   access-nsieve                                   1640.3402+-28.3113    ?   1646.5381+-17.5246       ?
   bitops-3bit-bits-in-byte                          60.1423+-1.6833           59.5509+-0.3792        
   bitops-bits-in-byte                              398.1725+-6.7979          397.7773+-2.5917        
   bitops-nsieve-bits                              1184.2798+-9.0461         1179.9860+-4.7959        
   controlflow-recursive                            880.0491+-3.2549     ^    869.0289+-2.4819        ^ definitely 1.0127x faster
   crypto-aes                                      1142.6767+-5.1522         1141.9144+-2.3591        
   crypto-md5                                      1083.0818+-11.1079        1080.2807+-2.9691        
   crypto-sha1                                     1190.7148+-8.5779     !   1213.8315+-4.9607        ! definitely 1.0194x slower
   date-format-tofte                               1178.0194+-13.8008    ?   1191.1342+-24.8269       ? might be 1.0111x slower
   date-format-xparb                               1669.2515+-46.4507    ?   1721.0008+-24.0433       ? might be 1.0310x slower
   math-cordic                                      841.6890+-1.6275     ?    842.9717+-4.5294        ?
   math-partial-sums                               1332.5089+-29.8564    ?   1335.7389+-4.2825        ?
   math-spectral-norm                              1297.8143+-2.1156         1296.9032+-1.0592        
   string-base64                                    600.1566+-4.4973          598.4666+-2.8850        
   string-fasta                                     921.1930+-11.6825    ?    931.5115+-20.7722       ? might be 1.0112x slower
   string-tagcloud                                  395.8900+-2.4269     !    401.2414+-2.5614        ! definitely 1.0135x slower

   <arithmetic>                                    1109.5894+-2.6131     !   1116.0663+-3.6050        ! definitely 1.0058x slower
   <geometric> *                                    928.4002+-1.8726     ?    932.0723+-2.3276        ? might be 1.0040x slower
   <harmonic>                                       565.0984+-5.9059          563.9037+-2.0471          might be 1.0021x faster

                                                        TipOfTree              MoreWatchpoints                                  
V8Spider:
   crypto                                            85.3139+-0.7514           85.2372+-0.8758        
   deltablue                                        102.8488+-1.9532          102.7127+-0.7693        
   earley-boyer                                      70.5732+-0.7658     ?     70.7522+-0.6031        ?
   raytrace                                          44.3500+-1.1640           44.0350+-0.4654        
   regexp                                           106.7197+-1.8913     ?    107.8785+-3.9170        ? might be 1.0109x slower
   richards                                         105.5955+-1.2877          105.5417+-2.2585        
   splay                                             50.1009+-1.4837           49.8695+-1.3021        

   <arithmetic>                                      80.7860+-0.7444     ?     80.8609+-0.5874        ? might be 1.0009x slower
   <geometric> *                                     76.6146+-0.7517           76.5999+-0.5698          might be 1.0002x faster
   <harmonic>                                        72.1769+-0.8650           72.0692+-0.6004          might be 1.0015x faster

                                                        TipOfTree              MoreWatchpoints                                  
Octane and V8v7:
   encrypt                                           0.44408+-0.00079          0.44308+-0.00057       
   decrypt                                           8.07308+-0.01892    ?     8.09506+-0.07076       ?
   deltablue                                x2       0.43958+-0.00341    ?     0.43972+-0.00456       ?
   earley                                            0.95255+-0.00454    ?     0.96057+-0.00994       ?
   boyer                                            10.73367+-0.06255         10.64704+-0.08970       
   navier-stokes                            x2       7.73307+-0.03891    ?     7.76652+-0.04507       ?
   raytrace                                 x2       2.88814+-0.03646          2.88010+-0.10274       
   regexp                                   x2      33.35482+-0.28566    ?    33.54462+-0.60686       ?
   richards                                 x2       0.23160+-0.00738          0.23102+-0.00940       
   splay                                    x2       0.64467+-0.00324          0.63414+-0.00934         might be 1.0166x faster
   pdfjs                                    x2      94.15011+-0.40260    ?    94.92090+-0.69038       ?
   mandreel                                 x2      99.79389+-2.42707    ?   102.66708+-0.57945       ? might be 1.0288x slower
   gbemu                                    x2      87.14594+-0.49203    ?    87.25374+-2.53782       ?
   closure                                           0.89295+-0.00343    ?     0.89574+-0.00351       ?
   jquery                                           10.88682+-0.02694    !    11.00441+-0.05043       ! definitely 1.0108x slower
   box2d                                    x2      28.34540+-0.98337    ^    26.77438+-0.16349       ^ definitely 1.0587x faster
   zlib                                     x2     776.30600+-45.72154   ?   790.63684+-39.93611      ? might be 1.0185x slower
   typescript                               x2    1251.28735+-13.61991   ?  1264.43412+-17.06716      ? might be 1.0105x slower

V8v7:
   <arithmetic>                                      6.92419+-0.03956    ?     6.94612+-0.07113       ? might be 1.0032x slower
   <geometric> *                                     2.03652+-0.00917          2.03349+-0.01206         might be 1.0015x faster
   <harmonic>                                        0.76841+-0.00949          0.76574+-0.01221         might be 1.0035x faster

Octane including V8v7:
   <arithmetic>                                    159.88748+-3.12515    ?   161.88041+-2.94088       ? might be 1.0125x slower
   <geometric> *                                    12.24100+-0.10515    ?    12.24498+-0.06011       ? might be 1.0003x slower
   <harmonic>                                        1.35300+-0.01584          1.34864+-0.02021         might be 1.0032x faster

                                                        TipOfTree              MoreWatchpoints                                  
Kraken:
   ai-astar                                          530.225+-2.260      ?     535.066+-14.375        ?
   audio-beat-detection                              199.759+-0.816      !     206.302+-1.222         ! definitely 1.0328x slower
   audio-dft                                         262.440+-1.998      ?     262.815+-3.080         ?
   audio-fft                                         116.362+-3.111      !     122.707+-2.185         ! definitely 1.0545x slower
   audio-oscillator                                  380.180+-3.725            379.794+-0.939         
   imaging-darkroom                                  295.266+-1.255      ?     296.137+-1.336         ?
   imaging-desaturate                                122.150+-0.211      !     124.321+-0.221         ! definitely 1.0178x slower
   imaging-gaussian-blur                             181.874+-8.021            178.747+-0.916           might be 1.0175x faster
   json-parse-financial                               82.596+-0.425      ?      83.425+-1.044         ? might be 1.0100x slower
   json-stringify-tinderbox                          102.493+-0.767      ?     103.041+-1.382         ?
   stanford-crypto-aes                                94.528+-1.589             93.374+-1.203           might be 1.0124x faster
   stanford-crypto-ccm                                90.347+-11.727     ?      98.094+-11.975        ? might be 1.0857x slower
   stanford-crypto-pbkdf2                            244.941+-2.952      ?     248.928+-5.200         ? might be 1.0163x slower
   stanford-crypto-sha256-iterative                  111.250+-0.751            109.933+-0.819           might be 1.0120x faster

   <arithmetic> *                                    201.029+-0.693      ?     203.049+-1.524         ? might be 1.0100x slower
   <geometric>                                       169.214+-1.375      ?     171.506+-1.682         ? might be 1.0135x slower
   <harmonic>                                        146.265+-1.961      ?     148.701+-2.103         ? might be 1.0167x slower

                                                        TipOfTree              MoreWatchpoints                                  
JSRegress:
   adapt-to-double-divide                            20.5333+-0.1256           20.3048+-0.2575          might be 1.0113x faster
   aliased-arguments-getbyval                         1.1356+-0.0083     ?      1.1419+-0.0252        ?
   allocate-big-object                                3.6930+-0.0552     ?      3.7361+-0.2221        ? might be 1.0117x slower
   arity-mismatch-inlining                            1.0171+-0.0081     ?      1.0253+-0.0040        ?
   array-access-polymorphic-structure                10.8464+-0.2078     ?     10.9752+-0.1368        ? might be 1.0119x slower
   array-nonarray-polymorhpic-access                 63.0035+-0.2609     ?     63.1164+-0.2395        ?
   array-prototype-every                            124.2277+-0.7453     ?    125.2723+-4.0609        ?
   array-prototype-forEach                          125.8820+-5.9883          122.4917+-1.2804          might be 1.0277x faster
   array-prototype-map                              149.6750+-1.9558     ?    150.1027+-3.1018        ?
   array-prototype-some                             127.4970+-5.2922          124.0220+-1.3912          might be 1.0280x faster
   array-with-double-add                              6.8075+-0.0920     ?      6.8321+-0.0953        ?
   array-with-double-increment                        4.6938+-0.0713            4.6933+-0.0622        
   array-with-double-mul-add                          7.7180+-0.1691     ?      7.7552+-0.1286        ?
   array-with-double-sum                              4.9797+-0.0220     ?      5.0618+-0.0639        ? might be 1.0165x slower
   array-with-int32-add-sub                          12.0926+-0.2850           11.8693+-0.1416          might be 1.0188x faster
   array-with-int32-or-double-sum                     5.1465+-0.0861            5.1106+-0.0722        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    115.3361+-1.0193     ?    116.9484+-1.3693        ? might be 1.0140x slower
   ArrayBuffer-DataView-alloc-long-lived             32.2650+-0.5117     ?     32.9274+-0.9663        ? might be 1.0205x slower
   ArrayBuffer-Int32Array-byteOffset                  5.3347+-0.1216            5.2607+-0.0220          might be 1.0141x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    121.1551+-1.3311     ?    123.3958+-3.5301        ? might be 1.0185x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     53.6058+-3.2151           52.7168+-1.1229          might be 1.0169x faster
   ArrayBuffer-Int8Array-alloc-long-lived            31.7171+-0.9334     ?     32.0137+-0.8772        ?
   ArrayBuffer-Int8Array-alloc                       27.5731+-0.3854     ?     27.9642+-0.3072        ? might be 1.0142x slower
   asmjs_bool_bug                                     9.8872+-0.1698            9.8593+-0.1764        
   assign-custom-setter-polymorphic                   4.8088+-0.0856            4.7750+-0.0313        
   assign-custom-setter                               6.7212+-0.1015            6.7050+-0.0352        
   basic-set                                         16.2764+-0.4493           16.1560+-0.4746        
   big-int-mul                                        6.2260+-0.0299     !      6.3670+-0.1085        ! definitely 1.0226x slower
   boolean-test                                       4.7665+-0.0480     ?      4.8164+-0.0913        ? might be 1.0105x slower
   branch-fold                                        5.2085+-0.0485            5.2044+-0.0555        
   by-val-generic                                    14.1506+-0.1118     ?     14.3477+-0.3354        ? might be 1.0139x slower
   call-spread-apply                                 21.6709+-0.4956           21.0075+-0.6559          might be 1.0316x faster
   call-spread-call                                   9.0597+-0.1121            8.9308+-0.1150          might be 1.0144x faster
   captured-assignments                               0.5697+-0.0071     ?      0.5698+-0.0089        ?
   cast-int-to-double                                12.7871+-0.0640           12.7342+-0.1065        
   cell-argument                                     11.0463+-0.2782     ?     11.0630+-0.1227        ?
   cfg-simplify                                       4.1772+-0.0683            4.1655+-0.0167        
   chain-getter-access                               13.2966+-0.2700     ?     13.3060+-0.2649        ?
   cmpeq-obj-to-obj-other                            13.3462+-0.2013     ?     13.8802+-0.8623        ? might be 1.0400x slower
   constant-test                                      8.8769+-0.1412            8.8630+-0.1121        
   DataView-custom-properties                       122.8341+-1.8119     ?    124.9811+-1.8414        ? might be 1.0175x slower
   delay-tear-off-arguments-strictmode                3.6833+-0.0231     ?      3.6979+-0.0265        ?
   delete-a-few-properties-then-get-by-id             9.5176+-0.1033     ?      9.5208+-0.0895        ?
   destructuring-arguments                            8.9106+-0.0502     !      9.1007+-0.0879        ! definitely 1.0213x slower
   destructuring-swap                                 8.9639+-0.1945     ?      8.9794+-0.0992        ?
   direct-arguments-getbyval                          1.1162+-0.0072     ?      1.1298+-0.0142        ? might be 1.0122x slower
   double-get-by-val-out-of-bounds                    6.7505+-0.0922     !      7.0553+-0.0492        ! definitely 1.0451x slower
   double-pollution-getbyval                         11.3744+-0.1535     ?     11.4148+-0.2345        ?
   double-pollution-putbyoffset                       6.2481+-0.1355     ?      6.3192+-0.1552        ? might be 1.0114x slower
   double-to-int32-typed-array-no-inline              3.0890+-0.1032     ?      3.1257+-0.0813        ? might be 1.0119x slower
   double-to-int32-typed-array                        2.4830+-0.0381     ?      2.4949+-0.0804        ?
   double-to-uint32-typed-array-no-inline             3.1748+-0.0890            3.1329+-0.0722          might be 1.0134x faster
   double-to-uint32-typed-array                       2.6480+-0.0427            2.6260+-0.0190        
   empty-string-plus-int                             10.3037+-0.0647     ?     10.4934+-0.1908        ? might be 1.0184x slower
   emscripten-cube2hash                              54.5830+-0.6695     ?     55.7453+-3.4793        ? might be 1.0213x slower
   external-arguments-getbyval                        2.0540+-0.0063     ?      2.0717+-0.0166        ?
   external-arguments-putbyval                        3.0029+-0.0288     ?      3.0055+-0.0263        ?
   fixed-typed-array-storage-var-index                1.5470+-0.0795            1.5250+-0.0253          might be 1.0144x faster
   fixed-typed-array-storage                          1.1222+-0.0122     ?      1.1455+-0.0492        ? might be 1.0208x slower
   Float32Array-matrix-mult                           8.2343+-0.3501            8.1945+-0.3354        
   Float32Array-to-Float64Array-set                  87.7768+-1.7079     ?     89.1653+-1.4118        ? might be 1.0158x slower
   Float64Array-alloc-long-lived                    102.2710+-1.4948          101.8018+-0.6038        
   Float64Array-to-Int16Array-set                   114.2320+-0.7681     ?    114.6808+-0.5430        ?
   fold-double-to-int                                20.1745+-0.3199           20.0468+-0.1923        
   for-of-iterate-array-entries                       9.7022+-0.1376            9.4815+-0.2203          might be 1.0233x faster
   for-of-iterate-array-keys                          3.6357+-0.0798     ?      3.6581+-0.0952        ?
   for-of-iterate-array-values                        3.3033+-0.2071            3.2525+-0.0951          might be 1.0156x faster
   fround                                            24.2799+-0.2525     ?     24.3980+-0.4653        ?
   function-dot-apply                                 1.7457+-0.0130     ?      1.7573+-0.0283        ?
   function-test                                      5.0794+-0.1735            5.0329+-0.0605        
   function-with-eval                                43.6060+-1.6963           43.5748+-1.3587        
   get-by-id-chain-from-try-block                     8.1850+-0.2263            8.1650+-0.2759        
   get-by-id-proto-or-self                           25.3110+-1.8492           24.5718+-0.5706          might be 1.0301x faster
   get-by-id-self-or-proto                           26.2433+-1.5514           24.8328+-0.6605          might be 1.0568x faster
   get-by-val-out-of-bounds                           6.9151+-0.3206     ?      7.0406+-0.1470        ? might be 1.0182x slower
   get_callee_monomorphic                             5.4445+-0.1011     ?      5.4617+-0.0928        ?
   get_callee_polymorphic                             4.9743+-0.0560            4.9473+-0.1023        
   getter                                             7.5754+-0.1113            7.4965+-0.0766          might be 1.0105x faster
   global-var-const-infer-fire-from-opt               1.2644+-0.0767            1.2576+-0.0330        
   global-var-const-infer                             1.0667+-0.0753            1.0448+-0.0170          might be 1.0209x faster
   HashMap-put-get-iterate-keys                      40.5096+-0.8652           39.7905+-0.4765          might be 1.0181x faster
   HashMap-put-get-iterate                           39.3597+-0.2793           39.3303+-0.5803        
   HashMap-string-put-get-iterate                    45.1345+-0.6831     ?     45.6181+-0.4372        ? might be 1.0107x slower
   imul-double-only                                  10.5515+-0.2282     ?     10.9026+-0.7362        ? might be 1.0333x slower
   imul-int-only                                     13.6208+-0.3945           13.5826+-0.1528        
   imul-mixed                                         9.6903+-0.1031     ?     10.1667+-0.6872        ? might be 1.0492x slower
   in-four-cases                                     23.0684+-0.2235           22.6930+-0.2248          might be 1.0165x faster
   in-one-case-false                                 12.7287+-0.2103           12.7166+-0.0481        
   in-one-case-true                                  12.8008+-0.0638           12.7302+-0.1011        
   in-two-cases                                      13.2018+-0.1093           13.1600+-0.0956        
   indexed-properties-in-objects                      4.5079+-0.0856            4.5022+-0.1153        
   infer-closure-const-then-mov-no-inline             5.0676+-0.0421     ?      5.0782+-0.0148        ?
   infer-closure-const-then-mov                      29.1510+-0.0669     ?     29.4385+-0.6469        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.7560+-0.3437           17.5952+-0.0387        
   infer-closure-const-then-put-to-scope             33.4961+-0.4327           33.1643+-0.0678          might be 1.0100x faster
   infer-closure-const-then-reenter-no-inline   
                                                     77.2409+-0.2342           77.1890+-0.1659        
   infer-closure-const-then-reenter                  33.4610+-0.4011     ?     37.2127+-6.3382        ? might be 1.1121x slower
   infer-one-time-closure-ten-vars                   16.3922+-0.1322           16.3694+-0.1358        
   infer-one-time-closure-two-vars                   15.6941+-0.1222     ?     15.7840+-0.2018        ?
   infer-one-time-closure                            15.5685+-0.2210     ?     15.5730+-0.0987        ?
   infer-one-time-deep-closure                       28.2675+-0.1738     ?     28.4586+-0.3574        ?
   inline-arguments-access                            1.6444+-0.0295     ?      1.7155+-0.1245        ? might be 1.0432x slower
   inline-arguments-aliased-access                    1.8289+-0.0650            1.8031+-0.0171          might be 1.0143x faster
   inline-arguments-local-escape                     19.7581+-0.5007           19.7360+-0.3671        
   inline-get-scoped-var                              7.5521+-0.1077     ?      7.5922+-0.0845        ?
   inlined-put-by-id-transition                      15.4963+-0.4271     ?     16.0201+-0.3002        ? might be 1.0338x slower
   int-or-other-abs-then-get-by-val                   9.8164+-0.0803            9.7895+-0.0794        
   int-or-other-abs-zero-then-get-by-val             33.5404+-0.6161           33.4929+-0.2412        
   int-or-other-add-then-get-by-val                  11.0877+-0.0695     ?     11.1717+-0.0920        ?
   int-or-other-add                                  11.0020+-0.0305     ?     11.1131+-0.1666        ? might be 1.0101x slower
   int-or-other-div-then-get-by-val                   6.8377+-0.0551     ?      6.8541+-0.1058        ?
   int-or-other-max-then-get-by-val                   7.9169+-0.1548     ?      8.1359+-0.5495        ? might be 1.0277x slower
   int-or-other-min-then-get-by-val                   7.5809+-0.0860     ?      7.5817+-0.0407        ?
   int-or-other-mod-then-get-by-val                   6.6038+-0.0116     ?      6.6370+-0.0834        ?
   int-or-other-mul-then-get-by-val                   6.8761+-0.0464     ?      6.9412+-0.0706        ?
   int-or-other-neg-then-get-by-val                   8.5790+-0.1083     ?      8.6311+-0.1939        ?
   int-or-other-neg-zero-then-get-by-val             33.9577+-0.2122           33.8481+-0.0609        
   int-or-other-sub-then-get-by-val                  11.5461+-0.1396     ?     11.5468+-0.0539        ?
   int-or-other-sub                                   9.9382+-0.1516            9.9151+-0.0864        
   int-overflow-local                                 6.6544+-0.0664            6.6519+-0.0608        
   Int16Array-alloc-long-lived                       74.1479+-0.7807           73.1340+-0.8934          might be 1.0139x faster
   Int16Array-bubble-sort-with-byteLength            48.4777+-1.0134           48.2369+-0.2939        
   Int16Array-bubble-sort                            47.5313+-0.1708           47.4182+-0.1796        
   Int16Array-load-int-mul                            2.0968+-0.0293     ?      2.1041+-0.0304        ?
   Int16Array-to-Int32Array-set                      88.6609+-1.5779     ?     88.8154+-1.0664        ?
   Int32Array-alloc-large                            44.3022+-1.4194           43.2633+-1.9113          might be 1.0240x faster
   Int32Array-alloc-long-lived                       81.7672+-0.9437           81.7547+-0.5648        
   Int32Array-alloc                                   4.8077+-0.0701            4.7721+-0.1318        
   Int32Array-Int8Array-view-alloc                   15.0806+-0.0489     !     15.5206+-0.3298        ! definitely 1.0292x slower
   int52-spill                                       12.0135+-0.2067     ?     12.1259+-0.1624        ?
   Int8Array-alloc-long-lived                        67.8793+-0.6060           67.7196+-1.0159        
   Int8Array-load-with-byteLength                     5.5367+-0.0862            5.4846+-0.0470        
   Int8Array-load                                     5.5559+-0.0736            5.4939+-0.0581          might be 1.0113x faster
   integer-divide                                    16.8934+-0.1104     ?     16.9394+-0.1017        ?
   integer-modulo                                     3.2019+-0.5093     ?      3.3615+-0.6251        ? might be 1.0498x slower
   large-int-captured                                10.5197+-0.2275     ?     10.7220+-0.2269        ? might be 1.0192x slower
   large-int-neg                                     24.6471+-0.3766           24.2861+-0.4379          might be 1.0149x faster
   large-int                                         21.5225+-0.2429           21.2903+-0.2123          might be 1.0109x faster
   logical-not                                        6.8776+-0.1452     ?      6.9920+-0.1286        ? might be 1.0166x slower
   lots-of-fields                                    14.0198+-0.1852     ?     14.1880+-0.1834        ? might be 1.0120x slower
   make-indexed-storage                               4.5131+-0.1558     ?      4.5777+-0.0976        ? might be 1.0143x slower
   make-rope-cse                                      6.2966+-0.1481     ?      6.4371+-0.3165        ? might be 1.0223x slower
   marsaglia-larger-ints                             59.2677+-0.2892     ?     59.7434+-0.3567        ?
   marsaglia-osr-entry                               31.1832+-0.3329     ?     31.5530+-0.6854        ? might be 1.0119x slower
   method-on-number                                  31.1452+-0.5554           30.9604+-0.4510        
   misc-strict-eq                                    58.5205+-2.2806           55.9806+-0.6744          might be 1.0454x faster
   negative-zero-divide                               0.4526+-0.0035            0.4522+-0.0065        
   negative-zero-modulo                               0.4561+-0.0121            0.4539+-0.0061        
   negative-zero-negate                               0.4170+-0.0010     ?      0.4362+-0.0206        ? might be 1.0461x slower
   nested-function-parsing                           49.2274+-0.3776     ?     49.2649+-0.1735        ?
   new-array-buffer-dead                              4.0252+-0.0747     ?      4.0310+-0.0759        ?
   new-array-buffer-push                             10.9611+-0.2143     ?     11.0247+-0.3392        ?
   new-array-dead                                    14.2517+-0.3055           14.2213+-0.1777        
   new-array-push                                     7.6506+-0.1209     ?      7.7250+-0.0949        ?
   number-test                                        4.7053+-0.0630     ?      4.7058+-0.0573        ?
   object-closure-call                                8.7762+-0.0980     ?      8.8179+-0.1714        ?
   object-test                                        5.0815+-0.2077            4.9014+-0.0618          might be 1.0367x faster
   poly-stricteq                                     82.4983+-0.1684     ?     83.0643+-0.7154        ?
   polymorphic-array-call                             2.2952+-0.0232     ?      2.3699+-0.1491        ? might be 1.0326x slower
   polymorphic-get-by-id                              4.7668+-0.0489     ?      4.7733+-0.0432        ?
   polymorphic-put-by-id                             68.4646+-14.9501    ?     97.9801+-30.5952       ? might be 1.4311x slower
   polymorphic-structure                             30.6978+-0.7016           30.5213+-0.2114        
   polyvariant-monomorphic-get-by-id                 13.4130+-0.1494           13.3973+-0.1811        
   proto-getter-access                               13.2632+-0.5297     ?     13.3724+-0.2673        ?
   put-by-id                                         20.9181+-0.4509     ?     21.0691+-0.4068        ?
   put-by-val-large-index-blank-indexing-type   
                                                     10.8980+-0.1888     ?     10.9673+-0.1398        ?
   put-by-val-machine-int                             4.5601+-0.2307     ?      4.8675+-0.1557        ? might be 1.0674x slower
   rare-osr-exit-on-local                            21.7821+-0.1125           21.5041+-0.2282          might be 1.0129x faster
   register-pressure-from-osr                        31.3279+-0.2581     ?     31.5902+-0.3111        ?
   setter                                            20.3919+-0.0463           20.3894+-0.1465        
   simple-activation-demo                            35.2197+-0.3730     ?     35.4728+-0.3429        ?
   simple-getter-access                              17.2648+-0.3263           17.0821+-0.3085          might be 1.0107x faster
   slow-array-profile-convergence                     4.5045+-0.2835            4.3393+-0.1965          might be 1.0381x faster
   slow-convergence                                   4.7700+-0.0526     ?      4.7861+-0.0743        ?
   sparse-conditional                                 1.5181+-0.0080     ?      1.5276+-0.0049        ?
   splice-to-remove                                  78.6892+-0.3188     ?     78.9272+-0.2438        ?
   string-char-code-at                               25.5967+-0.1174           25.5961+-0.0976        
   string-concat-object                               3.2482+-0.0904     ?      3.2895+-0.0917        ? might be 1.0127x slower
   string-concat-pair-object                          3.1148+-0.0480            3.1123+-0.0283        
   string-concat-pair-simple                         18.8750+-0.2633           18.8033+-0.4201        
   string-concat-simple                              19.0921+-0.3003           19.0136+-0.3792        
   string-cons-repeat                                11.9711+-0.0861     ?     12.0818+-0.1712        ?
   string-cons-tower                                 11.1866+-0.6729           11.0185+-0.1242          might be 1.0153x faster
   string-equality                                   44.2296+-0.2996           44.2172+-0.3182        
   string-get-by-val-big-char                        14.8597+-0.2010     ^     14.1451+-0.0896        ^ definitely 1.0505x faster
   string-get-by-val-out-of-bounds-insane             6.4963+-0.6378            6.2823+-0.0632          might be 1.0341x faster
   string-get-by-val-out-of-bounds                    7.1814+-0.1000     ?      7.1861+-0.1005        ?
   string-get-by-val                                  5.5677+-0.0091            5.5545+-0.0059        
   string-hash                                        3.1042+-0.0442     ?      3.1047+-0.0451        ?
   string-long-ident-equality                        39.9892+-0.9544           39.3463+-0.1359          might be 1.0163x faster
   string-repeat-arith                               47.4873+-0.3796     ?     48.0150+-0.5409        ? might be 1.0111x slower
   string-sub                                        96.3682+-1.5010     ?     96.6788+-1.4193        ?
   string-test                                        4.5493+-0.0528     !      4.7128+-0.0901        ! definitely 1.0359x slower
   string-var-equality                               71.6147+-0.3552     ?     73.0184+-1.7446        ? might be 1.0196x slower
   structure-hoist-over-transitions                   3.9513+-0.1008            3.9327+-0.0269        
   switch-char-constant                               3.6322+-0.0182     ?      3.6571+-0.0458        ?
   switch-char                                        9.2320+-0.0793     ?      9.3035+-0.1236        ?
   switch-constant                                   11.6372+-0.1401     ?     11.8248+-0.1716        ? might be 1.0161x slower
   switch-string-basic-big-var                       25.0465+-1.5643     ?     25.5822+-0.8310        ? might be 1.0214x slower
   switch-string-basic-big                           31.6306+-2.6749           29.3867+-4.6465          might be 1.0764x faster
   switch-string-basic-var                           31.1637+-1.1877           30.9487+-0.5910        
   switch-string-basic                               31.4090+-2.1147     ?     32.4176+-1.8524        ? might be 1.0321x slower
   switch-string-big-length-tower-var                30.1494+-0.2345     ?     30.1779+-0.2600        ?
   switch-string-length-tower-var                    24.1811+-0.3998           24.0538+-0.1162        
   switch-string-length-tower                        17.3984+-0.0766     ?     17.5229+-0.2191        ?
   switch-string-short                               17.5410+-0.1792           17.4399+-0.1283        
   switch                                            16.1087+-0.3870     ?     16.2246+-0.1827        ?
   tear-off-arguments-simple                          2.6045+-0.0537     ?      2.6092+-0.0613        ?
   tear-off-arguments                                 4.0468+-0.1011            3.9710+-0.0267          might be 1.0191x faster
   temporal-structure                                19.3706+-0.1459           19.2605+-0.2632        
   to-int32-boolean                                  24.1540+-0.1033     ?     24.2052+-0.0750        ?
   undefined-test                                     4.8934+-0.0556     ?      4.9570+-0.1202        ? might be 1.0130x slower
   unprofiled-licm                                   30.7761+-0.4474           30.5203+-0.5652        
   weird-inlining-const-prop                          2.7337+-0.1291            2.7109+-0.1413        

   <arithmetic>                                      22.6385+-0.0804     ?     22.7941+-0.1558        ? might be 1.0069x slower
   <geometric> *                                     11.6269+-0.0265     ?     11.6693+-0.0284        ? might be 1.0036x slower
   <harmonic>                                         5.4418+-0.0144     ?      5.4695+-0.0235        ? might be 1.0051x slower

                                                        TipOfTree              MoreWatchpoints                                  
AsmBench:
   bigfib.cpp                                       818.1274+-5.0017     ?    819.1523+-4.4294        ?
   cray.c                                           799.0123+-5.3850          797.0378+-1.6730        
   dry.c                                            841.9770+-42.5950         792.7522+-46.0816         might be 1.0621x faster
   FloatMM.c                                       1110.8728+-1.9055     ?   1111.5527+-2.2410        ?
   gcc-loops.cpp                                   7555.2723+-47.2615    ^   7484.3604+-15.7308       ^ definitely 1.0095x faster
   n-body.c                                        2071.9841+-6.4904         2048.4736+-20.7510         might be 1.0115x faster
   Quicksort.c                                      687.8965+-7.6058     ?    690.5671+-0.6573        ?
   stepanov_container.cpp                          5831.6206+-20.4313    ?   5851.4619+-81.5362       ?
   Towers.c                                         502.5197+-2.5154     ^    496.1133+-1.6814        ^ definitely 1.0129x faster

   <arithmetic>                                    2246.5870+-5.2677         2232.3857+-12.4340         might be 1.0064x faster
   <geometric> *                                   1389.2427+-7.2557         1375.8130+-11.3310         might be 1.0098x faster
   <harmonic>                                      1023.4015+-6.9354         1011.7254+-9.3500          might be 1.0115x faster

                                                        TipOfTree              MoreWatchpoints                                  
All benchmarks:
   <arithmetic>                                     179.6936+-0.3655     ?    180.1186+-0.3457        ? might be 1.0024x slower
   <geometric>                                       20.1321+-0.0411     ?     20.1889+-0.0373        ? might be 1.0028x slower
   <harmonic>                                         4.8402+-0.0219     ?      4.8477+-0.0262        ? might be 1.0015x slower

                                                        TipOfTree              MoreWatchpoints                                  
Geomean of preferred means:
   <scaled-result>                                   80.9745+-0.2792     ?     81.0814+-0.1969        ? might be 1.0013x slower
Comment 3 Filip Pizlo 2014-05-22 20:23:33 PDT
Created attachment 231935 [details]
starting to look sensible
Comment 4 Filip Pizlo 2014-05-23 14:01:30 PDT
Created attachment 231983 [details]
more!
Comment 5 Filip Pizlo 2014-05-28 19:03:31 PDT
Created attachment 232228 [details]
a bit more.
Comment 6 Filip Pizlo 2014-05-28 20:45:04 PDT
Created attachment 232232 [details]
crashes on launch

But at least it compiles!
Comment 7 Filip Pizlo 2014-05-29 15:09:22 PDT
Created attachment 232264 [details]
starting to work

In the quadmorphic example, it eliminates all structure checks because it realizes that the variable can point to one of four objects and all of them have the field we want at the same offset.  Cool!
Comment 8 Filip Pizlo 2014-05-29 16:39:52 PDT
Created attachment 232270 [details]
now it only fails thousands of tests
Comment 9 Filip Pizlo 2014-05-29 23:06:19 PDT
Created attachment 232281 [details]
less then a hundred failures
Comment 10 Filip Pizlo 2014-05-30 14:35:35 PDT
Created attachment 232304 [details]
using a slightly more complicated approach

I'm going to fix https://bugs.webkit.org/show_bug.cgi?id=133398 as part of this.
Comment 11 Filip Pizlo 2014-06-01 10:50:25 PDT
Created attachment 232349 [details]
almost done

It turns out that AI for MultiPutByOffset was totally busted.  I'm fixing it.
Comment 12 Filip Pizlo 2014-06-01 11:36:46 PDT
Created attachment 232350 [details]
almoster doner
Comment 13 Filip Pizlo 2014-06-02 16:57:24 PDT
Two things left to do, as far as I can tell:

- Make the abstract interpreter track whether our current state is "clobbered" or "valid".  We're valid by default and become clobbered at any instruction that affects structure transition watchpoints.  We become valid again at an invalidation point.  New constants introduced while we're clobbered should have their structure sets clobbered.

- Make the FTL backend robust against the AI become more precise, for example because a constant transitioned to a new structure and that structure contradicts checks we've already emitted.
Comment 14 Filip Pizlo 2014-06-02 18:17:44 PDT
Also, we should convert uses of transitionWatchpointSetIsStillValid() into dfgShouldWatch(), which refuses to watch dictionaries.
Comment 15 Filip Pizlo 2014-06-02 20:19:22 PDT
Created attachment 232413 [details]
basically works

It doesn't appear to be a regression on anything we care about, which is basically all I was hoping for with this change.  There do appear to be some opportunities to reduce the effects of this on SunSpider and JSRegress.  I believe that we're just getting hit by compile times on those benchmarks.


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

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/ftlopt/OpenSource/WebKitBuild/Release/jsc (r169515)
"BigSets" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r169515)

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

                                                        TipOfTree                  BigSets                                      
SunSpider:
   3d-cube                                            7.7753+-0.1781     ?      7.8299+-0.2433        ?
   3d-morph                                           9.4253+-0.0941            9.4149+-0.0919        
   3d-raytrace                                        9.8794+-0.1554     ?     10.0020+-0.2272        ? might be 1.0124x slower
   access-binary-trees                                2.8346+-0.1051            2.7673+-0.0954          might be 1.0243x faster
   access-fannkuch                                    9.2872+-0.1890     ?      9.2996+-0.1395        ?
   access-nbody                                       4.7028+-0.0186     ?      4.7164+-0.0909        ?
   access-nsieve                                      5.5726+-0.1068            5.5328+-0.1197        
   bitops-3bit-bits-in-byte                           1.8632+-0.0159     ?      1.8786+-0.0128        ?
   bitops-bits-in-byte                                6.5753+-0.1886     ?      6.6090+-0.2209        ?
   bitops-bitwise-and                                 3.1583+-0.0892     ?      3.2153+-0.0593        ? might be 1.0181x slower
   bitops-nsieve-bits                                 5.7968+-0.0336     ?      5.8070+-0.0779        ?
   controlflow-recursive                              2.9232+-0.0921            2.9199+-0.0979        
   crypto-aes                                         6.2570+-0.0817     ?      6.3948+-0.1602        ? might be 1.0220x slower
   crypto-md5                                         3.6345+-0.1306            3.4263+-0.0803          might be 1.0608x faster
   crypto-sha1                                        3.7146+-0.1349     ?      3.7371+-0.1313        ?
   date-format-tofte                                 13.2209+-0.1700     ?     13.3746+-0.2641        ? might be 1.0116x slower
   date-format-xparb                                  9.8283+-0.1877     ?     10.1872+-0.2977        ? might be 1.0365x slower
   math-cordic                                        4.7172+-0.0329            4.7015+-0.0168        
   math-partial-sums                                 10.5381+-0.0969           10.5341+-0.1619        
   math-spectral-norm                                 3.0562+-0.0387     ?      3.0576+-0.0287        ?
   regexp-dna                                        11.8872+-0.1811     ?     11.9934+-0.1161        ?
   string-base64                                      6.3839+-0.0716     ?      6.4011+-0.1083        ?
   string-fasta                                      10.2702+-0.2018           10.1937+-0.1540        
   string-tagcloud                                   15.7653+-0.2020     ?     16.0267+-0.1243        ? might be 1.0166x slower
   string-unpack-code                                32.4095+-0.1854     !     33.6371+-0.3951        ! definitely 1.0379x slower
   string-validate-input                              7.7344+-0.2497     ?      7.7383+-0.0816        ?

   <arithmetic> *                                     8.0466+-0.0370     !      8.1306+-0.0385        ! definitely 1.0104x slower
   <geometric>                                        6.5511+-0.0362     ?      6.5748+-0.0194        ? might be 1.0036x slower
   <harmonic>                                         5.4306+-0.0327            5.4290+-0.0127          might be 1.0003x faster

                                                        TipOfTree                  BigSets                                      
LongSpider:
   3d-cube                                         1382.6227+-13.1741    ?   1397.3690+-26.8914       ? might be 1.0107x slower
   3d-morph                                        2286.1527+-2.9878         2277.8416+-11.6817       
   3d-raytrace                                     1457.0853+-13.9387    ?   1464.1174+-11.6962       ?
   access-binary-trees                             1680.4635+-6.3164     ^   1657.2703+-7.0905        ^ definitely 1.0140x faster
   access-fannkuch                                  519.7079+-19.7181         518.0140+-19.1024       
   access-nbody                                    1250.1082+-6.9376     !   1264.4066+-6.0683        ! definitely 1.0114x slower
   access-nsieve                                   1627.3814+-6.1687     ?   1629.3693+-12.1729       ?
   bitops-3bit-bits-in-byte                          59.4247+-0.3956     ?     59.6086+-0.6038        ?
   bitops-bits-in-byte                              397.5146+-5.3163     ?    398.9239+-9.7011        ?
   bitops-nsieve-bits                              1178.8156+-3.5084         1178.4617+-3.1543        
   controlflow-recursive                            878.3545+-1.2668     ^    867.1393+-0.7614        ^ definitely 1.0129x faster
   crypto-aes                                      1140.8805+-3.3996     ?   1141.9679+-3.9428        ?
   crypto-md5                                      1080.2677+-2.4448     !   1088.8383+-4.4293        ! definitely 1.0079x slower
   crypto-sha1                                     1191.4772+-7.2704     ?   1200.9441+-9.3170        ?
   date-format-tofte                               1181.5614+-17.9773    ?   1198.7513+-28.2021       ? might be 1.0145x slower
   date-format-xparb                               1675.9474+-51.7237        1675.1822+-13.3581       
   math-cordic                                      843.4293+-6.2157          838.3862+-1.1058        
   math-partial-sums                               1329.9974+-27.6891    ?   1332.1711+-5.1968        ?
   math-spectral-norm                              1296.6384+-1.9348     ?   1301.0095+-13.3373       ?
   string-base64                                    601.0402+-2.9884          599.1828+-2.6395        
   string-fasta                                     922.5584+-15.7978    ?    927.2976+-17.9817       ?
   string-tagcloud                                  397.7267+-4.3388     ?    400.6536+-2.9687        ?

   <arithmetic>                                    1108.1434+-3.0141     ?   1109.8594+-2.0046        ? might be 1.0015x slower
   <geometric> *                                    926.4895+-2.5047     ?    928.1698+-2.2433        ? might be 1.0018x slower
   <harmonic>                                       561.6440+-1.2295     ?    562.9653+-2.8997        ? might be 1.0024x slower

                                                        TipOfTree                  BigSets                                      
V8Spider:
   crypto                                            85.0902+-1.1393     ?     85.1495+-0.6560        ?
   deltablue                                        101.9537+-0.7946     ?    105.0560+-5.9800        ? might be 1.0304x slower
   earley-boyer                                      70.6561+-0.5646     !     71.9822+-0.6480        ! definitely 1.0188x slower
   raytrace                                          44.1021+-0.5614     !     46.6855+-0.2737        ! definitely 1.0586x slower
   regexp                                           106.0486+-0.7262          105.4491+-0.3676        
   richards                                         105.0144+-1.2623     ?    106.8607+-1.0600        ? might be 1.0176x slower
   splay                                             50.1980+-0.5172     ?     50.7738+-1.4567        ? might be 1.0115x slower

   <arithmetic>                                      80.4376+-0.3166     !     81.7081+-0.8822        ! definitely 1.0158x slower
   <geometric> *                                     76.3389+-0.2942     !     77.7501+-0.6690        ! definitely 1.0185x slower
   <harmonic>                                        71.9655+-0.2969     !     73.5724+-0.5299        ! definitely 1.0223x slower

                                                        TipOfTree                  BigSets                                      
Octane and V8v7:
   encrypt                                           0.44447+-0.00161          0.44259+-0.00366       
   decrypt                                           8.10327+-0.08918          8.05332+-0.07556       
   deltablue                                x2       0.44338+-0.00203    ?     0.44564+-0.00534       ?
   earley                                            0.95113+-0.00612    ?     0.95475+-0.00885       ?
   boyer                                            10.76136+-0.04234         10.63924+-0.12668         might be 1.0115x faster
   navier-stokes                            x2       7.74212+-0.03295          7.74188+-0.00286       
   raytrace                                 x2       2.87277+-0.03016    ?     2.92832+-0.05166       ? might be 1.0193x slower
   regexp                                   x2      33.13449+-0.18989    ?    33.23515+-0.32820       ?
   richards                                 x2       0.23114+-0.01077          0.22722+-0.00280         might be 1.0172x faster
   splay                                    x2       0.64505+-0.00629          0.63641+-0.00810         might be 1.0136x faster
   pdfjs                                    x2      93.88723+-0.27887    !    96.30375+-0.43364       ! definitely 1.0257x slower
   mandreel                                 x2      99.33370+-1.36395    !   102.60518+-0.69602       ! definitely 1.0329x slower
   gbemu                                    x2      87.10547+-1.01810    ^    84.07424+-0.46115       ^ definitely 1.0361x faster
   closure                                           0.88921+-0.00225    !     0.89629+-0.00370       ! definitely 1.0080x slower
   jquery                                           10.89807+-0.03317    !    11.02353+-0.04764       ! definitely 1.0115x slower
   box2d                                    x2      28.74254+-0.91304    ^    27.31876+-0.45933       ^ definitely 1.0521x faster
   zlib                                     x2     803.03984+-2.65376    !   857.73347+-1.71022       ! definitely 1.0681x slower
   typescript                               x2    1251.62419+-4.26602    ?  1265.14954+-9.28190       ? might be 1.0108x slower

V8v7:
   <arithmetic>                                      6.89988+-0.02058    ?     6.90745+-0.04615       ? might be 1.0011x slower
   <geometric> *                                     2.03622+-0.01025          2.03322+-0.00958         might be 1.0015x faster
   <harmonic>                                        0.76901+-0.01396          0.76334+-0.00538         might be 1.0074x faster

Octane including V8v7:
   <arithmetic>                                    161.65504+-0.42141    !   166.29363+-0.58819       ! definitely 1.0287x slower
   <geometric> *                                    12.27262+-0.05906    ?    12.31063+-0.02855       ? might be 1.0031x slower
   <harmonic>                                        1.35374+-0.02309          1.34480+-0.00876         might be 1.0067x faster

                                                        TipOfTree                  BigSets                                      
Kraken:
   ai-astar                                          528.543+-1.029      ?     529.102+-1.681         ?
   audio-beat-detection                              200.451+-1.934      ?     204.646+-3.129         ? might be 1.0209x slower
   audio-dft                                         263.205+-2.007            261.964+-4.323         
   audio-fft                                         114.335+-0.197      !     121.888+-1.158         ! definitely 1.0661x slower
   audio-oscillator                                  381.506+-7.248      ^     373.069+-0.573         ^ definitely 1.0226x faster
   imaging-darkroom                                  295.425+-1.754      ?     298.930+-7.529         ? might be 1.0119x slower
   imaging-desaturate                                122.175+-0.378      !     124.179+-0.278         ! definitely 1.0164x slower
   imaging-gaussian-blur                             181.351+-8.082            178.821+-0.279           might be 1.0142x faster
   json-parse-financial                               82.163+-0.469      !      83.913+-0.473         ! definitely 1.0213x slower
   json-stringify-tinderbox                          102.741+-1.622      ?     103.798+-3.596         ? might be 1.0103x slower
   stanford-crypto-aes                                94.010+-2.459      ?      94.151+-3.179         ?
   stanford-crypto-ccm                                97.559+-12.788     ?      98.872+-12.009        ? might be 1.0135x slower
   stanford-crypto-pbkdf2                            244.976+-5.852      ?     248.728+-6.559         ? might be 1.0153x slower
   stanford-crypto-sha256-iterative                  111.311+-1.439            110.867+-2.503         

   <arithmetic> *                                    201.411+-1.075      ?     202.352+-1.192         ? might be 1.0047x slower
   <geometric>                                       169.881+-1.418      ?     171.476+-1.507         ? might be 1.0094x slower
   <harmonic>                                        147.150+-2.007      ?     149.040+-1.849         ? might be 1.0128x slower

                                                        TipOfTree                  BigSets                                      
JSRegress:
   abs-boolean                                       24.2047+-0.2798     ?     24.6338+-0.6343        ? might be 1.0177x slower
   adapt-to-double-divide                            19.8609+-0.2631     ?     20.2351+-0.3608        ? might be 1.0188x slower
   aliased-arguments-getbyval                         1.1323+-0.0073     ?      1.1358+-0.0163        ?
   allocate-big-object                                3.6776+-0.0905     ?      3.7087+-0.1944        ?
   arity-mismatch-inlining                            1.0141+-0.0064     ?      1.0459+-0.0321        ? might be 1.0314x slower
   array-access-polymorphic-structure                10.8029+-0.1185     ?     10.8637+-0.0665        ?
   array-nonarray-polymorhpic-access                 63.0277+-0.2696     ?     63.5662+-0.9630        ?
   array-prototype-every                            123.8875+-0.5850          122.1482+-1.5397          might be 1.0142x faster
   array-prototype-forEach                          121.9103+-0.2426     ?    122.0203+-2.9471        ?
   array-prototype-map                              148.8099+-2.0023          146.5709+-0.9322          might be 1.0153x faster
   array-prototype-some                             124.7983+-1.3295     ^    120.8228+-1.6915        ^ definitely 1.0329x faster
   array-splice-contiguous                          125.8057+-8.5855     ?    125.9599+-9.7902        ?
   array-with-double-add                              6.8195+-0.0819     ?      6.8392+-0.0965        ?
   array-with-double-increment                        4.7582+-0.0768            4.7530+-0.0864        
   array-with-double-mul-add                          7.7841+-0.1143            7.7735+-0.0670        
   array-with-double-sum                              5.0301+-0.0707     ?      5.0673+-0.0819        ?
   array-with-int32-add-sub                          12.1351+-0.2754           11.8594+-0.1278          might be 1.0233x faster
   array-with-int32-or-double-sum                     5.1566+-0.0720            5.1490+-0.0765        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    115.4014+-1.7875     ?    115.9180+-0.7010        ?
   ArrayBuffer-DataView-alloc-long-lived             32.4842+-1.0927     ?     33.1648+-0.3614        ? might be 1.0210x slower
   ArrayBuffer-Int32Array-byteOffset                  5.2930+-0.0811            5.2780+-0.0176        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    120.0850+-1.4247     ?    122.0804+-1.1859        ? might be 1.0166x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     50.9678+-0.5532     !     53.9848+-1.0396        ! definitely 1.0592x slower
   ArrayBuffer-Int8Array-alloc-long-lived            31.2546+-0.3130     !     33.7594+-0.7155        ! definitely 1.0801x slower
   ArrayBuffer-Int8Array-alloc                       27.3053+-0.1867     !     29.9793+-0.8005        ! definitely 1.0979x slower
   asmjs_bool_bug                                     9.9059+-0.1278     !     10.2899+-0.1359        ! definitely 1.0388x slower
   assign-custom-setter-polymorphic                   4.7870+-0.0450            4.7758+-0.0609        
   assign-custom-setter                               6.7126+-0.0599     ?      6.7207+-0.0651        ?
   basic-set                                         16.1139+-0.2932           15.8476+-0.1795          might be 1.0168x faster
   big-int-mul                                        6.3922+-0.0984            6.3849+-0.1242        
   boolean-test                                       4.7839+-0.0735     ?      4.8141+-0.0722        ?
   branch-fold                                        5.2828+-0.0909            5.2808+-0.0513        
   by-val-generic                                    14.2164+-0.2624     ?     14.2278+-0.4280        ?
   call-spread-apply                                 21.4137+-0.5961           20.7463+-0.1317          might be 1.0322x faster
   call-spread-call                                   9.1325+-0.1823            8.9773+-0.2167          might be 1.0173x faster
   captured-assignments                               0.5686+-0.0069            0.5645+-0.0046        
   cast-int-to-double                                12.8130+-0.1125     ?     12.9089+-0.2218        ?
   cell-argument                                     11.0360+-0.1910           10.9884+-0.1658        
   cfg-simplify                                       4.1608+-0.0355     ?      4.1998+-0.0569        ?
   chain-getter-access                               13.2213+-0.2400     ?     13.2985+-0.3058        ?
   cmpeq-obj-to-obj-other                            13.3061+-0.2166     ?     13.7000+-0.7900        ? might be 1.0296x slower
   constant-test                                      8.8868+-0.1093            8.8713+-0.1556        
   DataView-custom-properties                       123.6600+-0.9483     ?    124.8651+-0.6209        ?
   delay-tear-off-arguments-strictmode                3.6818+-0.0191     ?      3.7555+-0.1148        ? might be 1.0200x slower
   destructuring-arguments                            8.9878+-0.0976     ?      9.0378+-0.1605        ?
   destructuring-swap                                 8.9653+-0.0988     ?      8.9729+-0.0930        ?
   direct-arguments-getbyval                          1.1149+-0.0139     ?      1.1734+-0.0885        ? might be 1.0525x slower
   div-boolean-double                                22.8300+-1.2688           22.8261+-0.9473        
   div-boolean                                       23.9832+-1.2816           23.2281+-0.9023          might be 1.0325x faster
   double-get-by-val-out-of-bounds                    6.7007+-0.1069     ?      6.8245+-0.3028        ? might be 1.0185x slower
   double-pollution-getbyval                         11.4920+-0.1544           11.3292+-0.1212          might be 1.0144x faster
   double-pollution-putbyoffset                       6.2142+-0.1233            6.1781+-0.0845        
   double-to-int32-typed-array-no-inline              3.1379+-0.1243            3.0723+-0.0436          might be 1.0214x faster
   double-to-int32-typed-array                        2.5092+-0.0560     ?      2.5513+-0.0860        ? might be 1.0168x slower
   double-to-uint32-typed-array-no-inline             3.2657+-0.1063            3.1624+-0.0964          might be 1.0327x faster
   double-to-uint32-typed-array                       2.6460+-0.0607     ?      2.7254+-0.0885        ? might be 1.0300x slower
   empty-string-plus-int                             10.2695+-0.1125     ?     10.6130+-0.3169        ? might be 1.0334x slower
   emscripten-cube2hash                              55.2334+-0.5508     ^     54.1699+-0.4404        ^ definitely 1.0196x faster
   external-arguments-getbyval                        2.0703+-0.0202     ?      2.0718+-0.0150        ?
   external-arguments-putbyval                        3.0388+-0.0676            2.9932+-0.0198          might be 1.0152x faster
   fixed-typed-array-storage-var-index                1.5413+-0.0330     ?      1.5855+-0.0895        ? might be 1.0287x slower
   fixed-typed-array-storage                          1.1119+-0.0057     ?      1.1286+-0.0175        ? might be 1.0151x slower
   Float32Array-matrix-mult                           8.4384+-0.3189            8.1210+-0.3789          might be 1.0391x faster
   Float32Array-to-Float64Array-set                  87.7498+-1.3153           87.0756+-0.1769        
   Float64Array-alloc-long-lived                    102.4223+-0.7615          102.1812+-0.7907        
   Float64Array-to-Int16Array-set                   114.8465+-0.7760     !    118.3255+-2.2514        ! definitely 1.0303x slower
   fold-double-to-int                                20.1337+-0.3308     !     20.8423+-0.1907        ! definitely 1.0352x slower
   for-of-iterate-array-entries                       9.6591+-0.1798     !     10.8315+-0.4439        ! definitely 1.1214x slower
   for-of-iterate-array-keys                          3.6333+-0.0697     ?      3.6580+-0.1487        ?
   for-of-iterate-array-values                        3.3472+-0.0782     ^      3.2220+-0.0285        ^ definitely 1.0388x faster
   fround                                            24.2314+-0.4272           24.2168+-0.3557        
   function-dot-apply                                 1.7493+-0.0111     !      1.8031+-0.0108        ! definitely 1.0308x slower
   function-test                                      5.0334+-0.0559            5.0252+-0.0223        
   function-with-eval                                43.1102+-1.1207     ?     43.9114+-1.2529        ? might be 1.0186x slower
   get-by-id-chain-from-try-block                     8.2206+-0.2461     ?      8.3318+-0.1847        ? might be 1.0135x slower
   get-by-id-proto-or-self                           24.9804+-1.3890     ?     25.9299+-2.9596        ? might be 1.0380x slower
   get-by-id-self-or-proto                           25.0569+-0.9110     ?     26.2771+-2.0209        ? might be 1.0487x slower
   get-by-val-out-of-bounds                           6.8553+-0.2060     !      7.4429+-0.0868        ! definitely 1.0857x slower
   get_callee_monomorphic                             5.4957+-0.1542            5.4268+-0.0801          might be 1.0127x faster
   get_callee_polymorphic                             4.9063+-0.0957     ?      5.0475+-0.0487        ? might be 1.0288x slower
   getter                                             7.5241+-0.0206            7.5040+-0.0941        
   global-var-const-infer-fire-from-opt               1.2181+-0.0312     ?      1.2492+-0.0132        ? might be 1.0256x slower
   global-var-const-infer                             1.0479+-0.0262     ?      1.0604+-0.0325        ? might be 1.0119x slower
   HashMap-put-get-iterate-keys                      40.0907+-1.0253           39.9911+-1.1276        
   HashMap-put-get-iterate                           39.5532+-0.3664           39.5203+-0.6712        
   HashMap-string-put-get-iterate                    45.1247+-0.6477     ?     45.7402+-0.6858        ? might be 1.0136x slower
   imul-double-only                                  10.5492+-0.2696     ?     10.5591+-0.1627        ?
   imul-int-only                                     13.7525+-0.5166     ?     13.8094+-0.2636        ?
   imul-mixed                                         9.8007+-0.4922            9.7625+-0.4779        
   in-four-cases                                     22.6285+-0.2273     ?     22.6324+-0.0881        ?
   in-one-case-false                                 12.7960+-0.1070           12.7957+-0.0733        
   in-one-case-true                                  12.6993+-0.1577     ?     12.7461+-0.1417        ?
   in-two-cases                                      13.1036+-0.0935     ?     13.1713+-0.1736        ?
   indexed-properties-in-objects                      4.4451+-0.0578     ?      4.4475+-0.0709        ?
   infer-closure-const-then-mov-no-inline             5.0586+-0.0275     ?      5.0935+-0.0438        ?
   infer-closure-const-then-mov                      29.2172+-0.1192     ?     29.2395+-0.1043        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.5379+-0.0602     ?     17.5567+-0.1494        ?
   infer-closure-const-then-put-to-scope             33.5118+-0.7321           33.3665+-0.2598        
   infer-closure-const-then-reenter-no-inline   
                                                     77.4146+-0.8241           77.1143+-0.1751        
   infer-closure-const-then-reenter                  33.1597+-0.1118     ?     33.3822+-0.1726        ?
   infer-one-time-closure-ten-vars                   16.3491+-0.2501           16.2799+-0.1566        
   infer-one-time-closure-two-vars                   15.8546+-0.3679     ?     16.0114+-0.4462        ?
   infer-one-time-closure                            15.6579+-0.0732           15.5750+-0.0803        
   infer-one-time-deep-closure                       28.0892+-0.2340     ?     28.3201+-0.1152        ?
   inline-arguments-access                            1.6376+-0.0064     !      1.7130+-0.0396        ! definitely 1.0461x slower
   inline-arguments-aliased-access                    1.8551+-0.1014     ?      1.9308+-0.1272        ? might be 1.0408x slower
   inline-arguments-local-escape                     19.8119+-0.5506           19.7011+-0.4428        
   inline-get-scoped-var                              7.5792+-0.0665     ?      7.6732+-0.1168        ? might be 1.0124x slower
   inlined-put-by-id-transition                      15.8801+-0.2187           15.5673+-0.4229          might be 1.0201x faster
   int-or-other-abs-then-get-by-val                   9.7722+-0.1789     ?      9.8103+-0.1210        ?
   int-or-other-abs-zero-then-get-by-val             33.3165+-0.3797     ?     33.6660+-0.8408        ? might be 1.0105x slower
   int-or-other-add-then-get-by-val                  11.1344+-0.1027     ^     10.8320+-0.1828        ^ definitely 1.0279x faster
   int-or-other-add                                  11.0941+-0.1102     ?     11.1685+-0.1024        ?
   int-or-other-div-then-get-by-val                   6.8220+-0.0746     ?      6.8840+-0.1166        ?
   int-or-other-max-then-get-by-val                   7.8767+-0.1061            7.8080+-0.1283        
   int-or-other-min-then-get-by-val                   7.6070+-0.1074     ?      7.7016+-0.0776        ? might be 1.0124x slower
   int-or-other-mod-then-get-by-val                   6.5827+-0.0364     ^      6.4602+-0.0637        ^ definitely 1.0190x faster
   int-or-other-mul-then-get-by-val                   6.8805+-0.0353            6.7856+-0.0891          might be 1.0140x faster
   int-or-other-neg-then-get-by-val                   8.5424+-0.0688     ?      8.6942+-0.1489        ? might be 1.0178x slower
   int-or-other-neg-zero-then-get-by-val             33.7461+-0.1353     ?     34.1365+-0.7230        ? might be 1.0116x slower
   int-or-other-sub-then-get-by-val                  11.5885+-0.1368     ^     11.1006+-0.0594        ^ definitely 1.0439x faster
   int-or-other-sub                                   9.8581+-0.1036            9.8132+-0.0804        
   int-overflow-local                                 6.6994+-0.1110            6.6983+-0.1184        
   Int16Array-alloc-long-lived                       73.6001+-0.3944     ?     74.5023+-1.0732        ? might be 1.0123x slower
   Int16Array-bubble-sort-with-byteLength            48.1125+-0.1481     ^     42.5845+-0.1550        ^ definitely 1.1298x faster
   Int16Array-bubble-sort                            47.4700+-0.4847     ^     43.0763+-0.8362        ^ definitely 1.1020x faster
   Int16Array-load-int-mul                            2.0966+-0.0271     ?      2.1476+-0.0901        ? might be 1.0243x slower
   Int16Array-to-Int32Array-set                      88.1325+-0.7270     ?     89.7996+-1.9357        ? might be 1.0189x slower
   Int32Array-alloc-large                            44.4193+-0.9656           44.2158+-0.9374        
   Int32Array-alloc-long-lived                       81.6533+-0.7804     ?     82.6288+-1.4272        ? might be 1.0119x slower
   Int32Array-alloc                                   4.8962+-0.0408            4.8408+-0.2080          might be 1.0114x faster
   Int32Array-Int8Array-view-alloc                   15.1326+-0.1121     ?     15.4193+-0.3303        ? might be 1.0189x slower
   int52-spill                                       11.9222+-0.1642     !     12.2795+-0.1285        ! definitely 1.0300x slower
   Int8Array-alloc-long-lived                        67.6232+-0.8457           67.0676+-0.5859        
   Int8Array-load-with-byteLength                     5.5192+-0.0928            5.4659+-0.0125        
   Int8Array-load                                     5.5225+-0.0863     ?      5.5381+-0.0779        ?
   integer-divide                                    16.8510+-0.0711     ?     17.0325+-0.3428        ? might be 1.0108x slower
   integer-modulo                                     3.3217+-0.3143            3.2421+-0.2554          might be 1.0245x faster
   large-int-captured                                10.6928+-0.2710           10.4348+-0.2660          might be 1.0247x faster
   large-int-neg                                     24.7210+-0.5926           24.2422+-0.1270          might be 1.0198x faster
   large-int                                         21.4163+-0.2440           21.3907+-0.3389        
   logical-not                                        6.8198+-0.1954     ?      6.8717+-0.1042        ?
   lots-of-fields                                    14.0646+-0.1394           13.9315+-0.1309        
   make-indexed-storage                               4.4869+-0.2079     ?      4.7217+-0.1195        ? might be 1.0523x slower
   make-rope-cse                                      6.2628+-0.0644     ?      6.4443+-0.2078        ? might be 1.0290x slower
   marsaglia-larger-ints                             59.6656+-0.9943     ?     59.8340+-0.2484        ?
   marsaglia-osr-entry                               31.1192+-0.6032     ?     31.3838+-0.5770        ?
   max-boolean                                       32.5253+-0.1758     ?     32.7653+-0.4797        ?
   method-on-number                                  31.1770+-0.8347           30.7478+-0.3881          might be 1.0140x faster
   min-boolean                                       32.7979+-0.4853     ?     33.0782+-0.4831        ?
   minus-boolean-double                              22.6000+-1.5768           21.7010+-0.0690          might be 1.0414x faster
   minus-boolean                                     23.1637+-0.7216           23.0166+-0.1687        
   misc-strict-eq                                    57.7670+-0.4896     ^     56.0473+-1.0501        ^ definitely 1.0307x faster
   mod-boolean-double                                31.8084+-0.8248           30.8370+-1.8928          might be 1.0315x faster
   mod-boolean                                       54.1657+-0.1177           54.1266+-0.7643        
   mul-boolean-double                                22.9146+-0.5423     ?     23.2488+-1.1369        ? might be 1.0146x slower
   mul-boolean                                       24.6417+-2.6038           23.0713+-0.5526          might be 1.0681x faster
   neg-boolean                                       23.2775+-0.9192     ?     24.2878+-1.3947        ? might be 1.0434x slower
   negative-zero-divide                               0.4502+-0.0042     ?      0.4526+-0.0017        ?
   negative-zero-modulo                               0.4489+-0.0032     ?      0.4545+-0.0025        ? might be 1.0126x slower
   negative-zero-negate                               0.4229+-0.0147     ?      0.4295+-0.0128        ? might be 1.0157x slower
   nested-function-parsing                           49.3872+-0.3304     ?     49.7751+-0.5752        ?
   new-array-buffer-dead                              4.0229+-0.0641     ?      4.0596+-0.0872        ?
   new-array-buffer-push                             10.7667+-0.1644     ?     10.8218+-0.2124        ?
   new-array-dead                                    14.0717+-0.2367     ?     14.2829+-0.3984        ? might be 1.0150x slower
   new-array-push                                     7.6546+-0.0848            7.5574+-0.2280          might be 1.0129x faster
   number-test                                        4.6629+-0.0501     ?      4.6762+-0.0401        ?
   object-closure-call                                8.8006+-0.1997     ?      8.8033+-0.0621        ?
   object-test                                        5.1234+-0.0820     ^      4.9044+-0.0504        ^ definitely 1.0447x faster
   plus-boolean-arith                                22.5326+-1.1877     ?     22.5487+-1.2176        ?
   plus-boolean-double                               24.8311+-0.9513           24.5515+-0.0730          might be 1.0114x faster
   plus-boolean                                      23.9853+-0.1655     ?     24.5325+-0.7293        ? might be 1.0228x slower
   poly-stricteq                                     83.3709+-2.5517           82.5115+-0.2169          might be 1.0104x faster
   polymorphic-array-call                             2.3148+-0.0433     ?      2.3155+-0.0310        ?
   polymorphic-get-by-id                              4.7876+-0.0580            4.7581+-0.0144        
   polymorphic-put-by-id                            116.8333+-39.5689         106.3998+-32.1270         might be 1.0981x faster
   polymorphic-structure                             30.2976+-0.0999     ?     30.6440+-0.3608        ? might be 1.0114x slower
   polyvariant-monomorphic-get-by-id                 13.4202+-0.2724     ?     13.4594+-0.0745        ?
   proto-getter-access                               13.0552+-0.2453     ?     13.2380+-0.1806        ? might be 1.0140x slower
   put-by-id                                         20.8852+-0.3506     ?     21.4873+-0.4308        ? might be 1.0288x slower
   put-by-val-large-index-blank-indexing-type   
                                                     11.0263+-0.2534     ?     11.1219+-0.2026        ?
   put-by-val-machine-int                             4.6244+-0.1550            4.2542+-0.4941          might be 1.0870x faster
   rare-osr-exit-on-local                            21.5168+-0.2209     ?     21.5715+-0.1473        ?
   register-pressure-from-osr                        31.2133+-0.1564     ?     31.5947+-0.3144        ? might be 1.0122x slower
   setter                                            20.4290+-0.4698           20.3192+-0.0882        
   simple-activation-demo                            35.5305+-0.7362           35.2472+-0.1813        
   simple-getter-access                              17.1711+-0.2164     ?     17.3020+-0.4125        ?
   sin-boolean                                       50.3887+-0.1230     ?     50.5719+-0.4036        ?
   slow-array-profile-convergence                     4.4336+-0.3584            4.2699+-0.1812          might be 1.0383x faster
   slow-convergence                                   4.7526+-0.0313     ?      4.7833+-0.0289        ?
   sparse-conditional                                 1.5340+-0.0521     ?      1.5516+-0.0511        ? might be 1.0115x slower
   splice-to-remove                                  79.4832+-1.6742           78.4371+-0.3038          might be 1.0133x faster
   string-char-code-at                               25.7956+-0.5395     ^     23.6325+-0.3430        ^ definitely 1.0915x faster
   string-concat-object                               3.2092+-0.0483     ?      3.2810+-0.0570        ? might be 1.0224x slower
   string-concat-pair-object                          3.1460+-0.0374     ?      3.1590+-0.0526        ?
   string-concat-pair-simple                         18.6878+-0.2116     ?     18.8252+-0.7422        ?
   string-concat-simple                              18.9159+-0.2865           18.7767+-0.3919        
   string-cons-repeat                                11.9738+-0.0699     ?     12.0990+-0.1572        ? might be 1.0104x slower
   string-cons-tower                                 10.9454+-0.0544     ?     11.2152+-0.3405        ? might be 1.0246x slower
   string-equality                                   44.5058+-1.0922           44.4942+-0.8579        
   string-get-by-val-big-char                        14.5364+-0.1024           14.1036+-0.4753          might be 1.0307x faster
   string-get-by-val-out-of-bounds-insane             6.2393+-0.0816     ?      6.2806+-0.1826        ?
   string-get-by-val-out-of-bounds                    7.2270+-0.1152            7.1952+-0.1014        
   string-get-by-val                                  5.5655+-0.0211     ?      5.5816+-0.0966        ?
   string-hash                                        3.1361+-0.0851            2.9972+-0.0771          might be 1.0463x faster
   string-long-ident-equality                        39.6287+-0.8203     ?     39.8847+-0.9093        ?
   string-repeat-arith                               47.5137+-0.5408           46.8809+-0.3672          might be 1.0135x faster
   string-sub                                        96.0842+-3.2423           94.7444+-0.5077          might be 1.0141x faster
   string-test                                        4.5794+-0.0615     ?      4.6610+-0.0680        ? might be 1.0178x slower
   string-var-equality                               73.0897+-2.6311     !     87.5909+-7.6678        ! definitely 1.1984x slower
   structure-hoist-over-transitions                   3.9061+-0.0239     ?      3.9205+-0.0487        ?
   switch-char-constant                               3.6792+-0.0781            3.6774+-0.0477        
   switch-char                                        9.3374+-0.1571            9.2500+-0.0600        
   switch-constant                                   11.7020+-0.0996     ?     11.7618+-0.1509        ?
   switch-string-basic-big-var                       25.5762+-1.3255           25.0600+-1.9296          might be 1.0206x faster
   switch-string-basic-big                           32.0250+-1.7123           30.0862+-2.8852          might be 1.0644x faster
   switch-string-basic-var                           31.3377+-0.5872     ?     31.6042+-0.8363        ?
   switch-string-basic                               32.8816+-2.5105           31.9924+-1.7896          might be 1.0278x faster
   switch-string-big-length-tower-var                30.0205+-0.1882     ?     30.0732+-0.1373        ?
   switch-string-length-tower-var                    24.0404+-0.2307     ?     24.1393+-0.4220        ?
   switch-string-length-tower                        17.5397+-0.2737     ?     17.6081+-0.4190        ?
   switch-string-short                               17.5352+-0.1609           17.4035+-0.1604        
   switch                                            15.9190+-0.1435     ?     16.0111+-0.1261        ?
   tear-off-arguments-simple                          2.5888+-0.0153     ?      2.6151+-0.0687        ? might be 1.0102x slower
   tear-off-arguments                                 3.9543+-0.0296     ?      4.0032+-0.0511        ? might be 1.0124x slower
   temporal-structure                                19.3560+-0.1260           19.2738+-0.1165        
   to-int32-boolean                                  24.1163+-0.1377     ?     24.3736+-0.4854        ? might be 1.0107x slower
   undefined-test                                     4.9325+-0.0744            4.8940+-0.0260        
   unprofiled-licm                                   30.9769+-1.0776     ?     31.3237+-0.6876        ? might be 1.0112x slower
   weird-inlining-const-prop                          2.6660+-0.0626     ?      2.8326+-0.1928        ? might be 1.0625x slower

   <arithmetic>                                      23.7321+-0.1262     ?     23.7345+-0.1369        ? might be 1.0001x slower
   <geometric> *                                     12.5029+-0.0200     ?     12.5335+-0.0242        ? might be 1.0024x slower
   <harmonic>                                         5.7702+-0.0116     !      5.8148+-0.0310        ! definitely 1.0077x slower

                                                        TipOfTree                  BigSets                                      
AsmBench:
   bigfib.cpp                                       816.0463+-4.0488     !    829.7315+-4.4921        ! definitely 1.0168x slower
   cray.c                                           795.0968+-1.6557     !    798.6882+-0.9359        ! definitely 1.0045x slower
   dry.c                                            841.6009+-42.6571         815.9877+-33.3149         might be 1.0314x faster
   FloatMM.c                                       1118.8792+-11.0512        1110.8865+-0.4787        
   gcc-loops.cpp                                   7543.7642+-13.8800    ^   7487.7253+-5.0253        ^ definitely 1.0075x faster
   n-body.c                                        2070.5363+-14.4424        2057.3853+-49.1261       
   Quicksort.c                                      686.1586+-8.0114     ?    689.8110+-3.7107        ?
   stepanov_container.cpp                          5829.8348+-21.3044    ?   5843.2611+-24.8316       ?
   Towers.c                                         500.2574+-0.6316     ^    494.2997+-1.8593        ^ definitely 1.0121x faster

   <arithmetic>                                    2244.6861+-4.8692         2236.4196+-9.0525          might be 1.0037x faster
   <geometric> *                                   1387.6539+-7.8114         1382.2790+-7.6176          might be 1.0039x faster
   <harmonic>                                      1021.4662+-6.8647         1017.1617+-5.8286          might be 1.0042x faster

                                                        TipOfTree                  BigSets                                      
All benchmarks:
   <arithmetic>                                     173.0219+-0.2787     ?    173.3986+-0.3181        ? might be 1.0022x slower
   <geometric>                                       20.6097+-0.0296     !     20.6716+-0.0308        ! definitely 1.0030x slower
   <harmonic>                                         5.0408+-0.0297     ?      5.0531+-0.0187        ? might be 1.0024x slower

                                                        TipOfTree                  BigSets                                      
Geomean of preferred means:
   <scaled-result>                                   81.7522+-0.2056     !     82.1833+-0.1663        ! definitely 1.0053x slower
Comment 16 Filip Pizlo 2014-06-03 13:20:04 PDT
Created attachment 232437 [details]
it's faster

I did some sampling region profiling, which confirmed that the biggest regressions were coming from compile times and that this was all due to the CFA phase.  Initially I feared that the cost would be in clobberStructures() and friends, which are inherently O(n) operations.  Fortunately, though, all of the cost was in merging.  This is what you'd expect in any abstract interpreter.  This was easy to fix.  I just added a bunch of ALWAYS_INLINE common cases: merging usually encounters clear or top structures; copy/assignment usually deals with small structure sets; and equality usually doesn't have to deal with out-of-line stuff.

There is still some more fixing to do, but this is almost done...
Comment 17 Filip Pizlo 2014-06-03 16:29:26 PDT
Created attachment 232449 [details]
and now, it's actually totally sound!

Our abstract interpreter is now sounder than ever!
Comment 18 Filip Pizlo 2014-06-03 19:58:27 PDT
Created attachment 232460 [details]
the patch
Comment 19 Filip Pizlo 2014-06-04 11:05:06 PDT
Landed in http://trac.webkit.org/changeset/169588
Comment 20 Brent Fulgham 2014-07-23 08:58:54 PDT
Build fixes were needed:

1. Fix 32-bit: <http://trac.webkit.org/changeset/171381>
2. Windows fix attempt: <http://trac.webkit.org/changeset/171382>
3. Windows fix (sleep -> Sleep): <http://trac.webkit.org/changeset/171386>
4. Windows fix (return value needed): <http://trac.webkit.org/changeset/171387>
Comment 21 Radar WebKit Bug Importer 2014-07-23 16:36:31 PDT
<rdar://problem/17787547>