Bug 148338 - DFG string concatenation shouldn't be playing fast and loose with effects and OSR exit
Summary: DFG string concatenation shouldn't be playing fast and loose with effects and...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: Other
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords:
Depends on:
Blocks: 145204
  Show dependency treegraph
 
Reported: 2015-08-21 15:51 PDT by Filip Pizlo
Modified: 2015-08-22 11:36 PDT (History)
12 users (show)

See Also:


Attachments
it's a start (16.32 KB, patch)
2015-08-21 17:56 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (29.83 KB, patch)
2015-08-21 18:50 PDT, Filip Pizlo
saam: 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 2015-08-21 15:51:22 PDT
DFG string concatenation appears to have various different ways of creating an OSR exit right after a side effect.  We should change this code so that it is only speculative when it isn't effectful.  It also happens to be the case that if string concat needs to be effectful, then it will already be sufficiently slow that making it speculative won't help anyone.  So, this kind of clean-up is likely to not affect performance; it'll just make the compiler easier to hack on.
Comment 1 Filip Pizlo 2015-08-21 15:53:40 PDT
Proposal:

- ByteCodeParser uses a new node called StrCat that takes two or three arguments, and is basically a MakeRope with ToString rolled together.

- FixupPhase simplifies ValueAdd to MakeRope only if we can speculate that the inputs are strings.

- FixupPhase simplifies StrCat the same way it does for ValueAdd.
Comment 2 Filip Pizlo 2015-08-21 17:56:47 PDT
Created attachment 259692 [details]
it's a start
Comment 3 Filip Pizlo 2015-08-21 18:50:56 PDT
Created attachment 259694 [details]
the patch

Not marking r? yet because I still have to run benchmarks.
Comment 4 WebKit Commit Bot 2015-08-21 18:53:33 PDT
Attachment 259694 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1518:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1534:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 5 Filip Pizlo 2015-08-21 19:47:59 PDT
Performance is fine:

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r188811)
"StrCat" at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r188811)

Collected 7 samples per benchmark/VM, with 7 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                   StrCat                                      
SunSpider:
   3d-cube                                            4.8229+-0.3247            4.7261+-0.3395          might be 1.0205x faster
   3d-morph                                           5.0405+-0.1254     ?      5.2170+-0.1804        ? might be 1.0350x slower
   3d-raytrace                                        5.0033+-0.0440     ?      5.0537+-0.2218        ? might be 1.0101x slower
   access-binary-trees                                2.0113+-0.0671            1.9677+-0.1082          might be 1.0222x faster
   access-fannkuch                                    5.3965+-0.1412     ?      5.4118+-0.2427        ?
   access-nbody                                       2.6635+-0.3231            2.4920+-0.2761          might be 1.0688x faster
   access-nsieve                                      3.0727+-0.1571            2.9906+-0.0469          might be 1.0275x faster
   bitops-3bit-bits-in-byte                           1.4651+-0.0836     ?      1.4746+-0.0878        ?
   bitops-bits-in-byte                                3.2533+-0.1042            3.2392+-0.0936        
   bitops-bitwise-and                                 1.9588+-0.0305            1.9260+-0.0132          might be 1.0170x faster
   bitops-nsieve-bits                                 2.9641+-0.0912     ?      3.2153+-0.6424        ? might be 1.0848x slower
   controlflow-recursive                              2.0926+-0.1979            1.9499+-0.0701          might be 1.0732x faster
   crypto-aes                                         3.6925+-0.0300     ?      3.8437+-0.1519        ? might be 1.0409x slower
   crypto-md5                                         2.3192+-0.1594     ?      2.4199+-0.3883        ? might be 1.0434x slower
   crypto-sha1                                        2.4645+-0.2638            2.4046+-0.2646          might be 1.0249x faster
   date-format-tofte                                  6.7955+-0.5335            6.5446+-0.2061          might be 1.0383x faster
   date-format-xparb                                  4.4253+-0.1625     ?      4.6008+-0.3069        ? might be 1.0397x slower
   math-cordic                                        2.8286+-0.1659            2.6998+-0.0526          might be 1.0477x faster
   math-partial-sums                                  5.0907+-0.2213            4.9831+-0.0949          might be 1.0216x faster
   math-spectral-norm                                 1.7413+-0.0237     ?      1.7444+-0.0651        ?
   regexp-dna                                         6.6188+-0.3263     ?      6.6566+-0.4232        ?
   string-base64                                      4.8567+-1.1255            4.2737+-0.1087          might be 1.1364x faster
   string-fasta                                       6.0499+-0.3264            5.8356+-0.3056          might be 1.0367x faster
   string-tagcloud                                    7.8009+-0.4097     ?      7.8285+-0.2646        ?
   string-unpack-code                                18.9248+-0.8256           18.7430+-0.5036        
   string-validate-input                              4.5129+-0.1626            4.5065+-0.1360        

   <arithmetic>                                       4.5333+-0.0437            4.4903+-0.0381          might be 1.0096x faster

                                                        TipOfTree                   StrCat                                      
LongSpider:
   3d-cube                                          801.3519+-6.9271          798.7902+-11.3417       
   3d-morph                                        1498.2163+-11.8925        1494.8267+-6.9537        
   3d-raytrace                                      605.6156+-18.0632         598.9443+-3.1865          might be 1.0111x faster
   access-binary-trees                              793.9444+-4.5666     ?    794.1231+-8.7404        ?
   access-fannkuch                                  280.6371+-7.6342     ?    281.1981+-6.1448        ?
   access-nbody                                     514.0720+-3.4278     ?    514.6780+-4.9865        ?
   access-nsieve                                    363.0103+-10.7253    ?    367.0928+-11.8301       ? might be 1.0112x slower
   bitops-3bit-bits-in-byte                          39.1975+-1.8050           38.5505+-1.1168          might be 1.0168x faster
   bitops-bits-in-byte                               76.4239+-1.7928           76.0188+-1.6294        
   bitops-nsieve-bits                               406.3780+-2.9944          404.6351+-7.1489        
   controlflow-recursive                            443.2008+-5.2312          437.3526+-5.9566          might be 1.0134x faster
   crypto-aes                                       567.8957+-7.1787     ?    568.0831+-7.0665        ?
   crypto-md5                                       485.5027+-23.0029    ?    494.7652+-7.6763        ? might be 1.0191x slower
   crypto-sha1                                      623.7245+-7.9552     ?    632.9822+-10.8374       ? might be 1.0148x slower
   date-format-tofte                                507.7560+-10.1046         500.2855+-9.0152          might be 1.0149x faster
   date-format-xparb                                618.2691+-5.5785     !    665.5340+-6.1935        ! definitely 1.0764x slower
   hash-map                                         155.1628+-1.4372          153.0116+-0.8541          might be 1.0141x faster
   math-cordic                                      484.8735+-1.8192     ?    489.9809+-10.3342       ? might be 1.0105x slower
   math-partial-sums                                462.8330+-1.8755     ?    467.3193+-4.9677        ?
   math-spectral-norm                               548.4941+-3.4072     ?    556.5191+-10.3996       ? might be 1.0146x slower
   string-base64                                    350.5227+-5.0660     ?    351.1612+-7.0415        ?
   string-fasta                                     366.9147+-5.7366          365.1158+-7.7914        
   string-tagcloud                                  175.5753+-2.1044     ?    176.3488+-1.8162        ?

   <geometric>                                      389.3394+-1.2888     ?    390.6055+-1.5563        ? might be 1.0033x slower

                                                        TipOfTree                   StrCat                                      
V8Spider:
   crypto                                            47.7636+-1.5085     ?     49.8260+-1.3022        ? might be 1.0432x slower
   deltablue                                         84.5017+-4.3584     ?     86.9629+-3.7174        ? might be 1.0291x slower
   earley-boyer                                      39.8567+-0.9469           39.1756+-0.9359          might be 1.0174x faster
   raytrace                                          31.4919+-2.2552           31.1890+-1.0818        
   regexp                                            61.6669+-1.1145     ?     62.8699+-1.9515        ? might be 1.0195x slower
   richards                                          65.5516+-1.4109     ?     65.9757+-0.6426        ?
   splay                                             36.2523+-2.0906     ?     36.8449+-1.8684        ? might be 1.0163x slower

   <geometric>                                       49.6028+-1.1518     ?     50.2279+-0.7055        ? might be 1.0126x slower

                                                        TipOfTree                   StrCat                                      
Octane:
   encrypt                                           0.16856+-0.00600    ?     0.16993+-0.00181       ?
   decrypt                                           3.30153+-0.05009          3.27973+-0.02540       
   deltablue                                x2       0.15401+-0.00145    !     0.15818+-0.00131       ! definitely 1.0271x slower
   earley                                            0.27642+-0.00200          0.27529+-0.00201       
   boyer                                             4.16719+-0.02811          4.14330+-0.04613       
   navier-stokes                            x2       4.97781+-0.29689          4.86957+-0.02779         might be 1.0222x faster
   raytrace                                 x2       1.05439+-0.06365          0.98101+-0.03183         might be 1.0748x faster
   richards                                 x2       0.10940+-0.00157          0.10865+-0.00079       
   splay                                    x2       0.32972+-0.00227    ?     0.33051+-0.00235       ?
   regexp                                   x2      24.66087+-0.37094         24.56550+-0.17747       
   pdfjs                                    x2      36.70991+-0.50439    ?    36.93184+-0.26231       ?
   mandreel                                 x2      44.06865+-0.55693         43.73296+-0.37088       
   gbemu                                    x2      33.81755+-0.34382    ?    34.29419+-1.39406       ? might be 1.0141x slower
   closure                                           0.56091+-0.00220    ?     0.56108+-0.00471       ?
   jquery                                            7.07405+-0.03798    ?     7.11095+-0.05743       ?
   box2d                                    x2       9.96104+-0.08433    ?    10.43497+-1.23471       ? might be 1.0476x slower
   zlib                                     x2     381.88336+-13.14289       380.39107+-15.03474      
   typescript                               x2     646.49648+-11.26071       645.09225+-7.89991       

   <geometric>                                       5.56861+-0.03467          5.55839+-0.04587         might be 1.0018x faster

                                                        TipOfTree                   StrCat                                      
Kraken:
   ai-astar                                          227.358+-8.187            221.642+-3.848           might be 1.0258x faster
   audio-beat-detection                               50.820+-0.290             50.446+-0.383         
   audio-dft                                          96.478+-2.095      ?      96.659+-2.052         ?
   audio-fft                                          34.758+-0.306      ?      34.901+-0.409         ?
   audio-oscillator                                   59.756+-0.845      ?      60.922+-2.320         ? might be 1.0195x slower
   imaging-darkroom                                   60.752+-0.123      ?      61.458+-1.007         ? might be 1.0116x slower
   imaging-desaturate                                 50.225+-2.461      ?      50.458+-3.240         ?
   imaging-gaussian-blur                              83.985+-1.637             83.835+-1.060         
   json-parse-financial                               37.484+-0.652      ?      37.654+-0.986         ?
   json-stringify-tinderbox                           22.602+-0.763      ?      22.906+-1.331         ? might be 1.0134x slower
   stanford-crypto-aes                                41.338+-1.480             41.025+-0.952         
   stanford-crypto-ccm                                34.734+-1.357      ?      34.793+-1.719         ?
   stanford-crypto-pbkdf2                             93.886+-1.088      ?      94.258+-1.493         ?
   stanford-crypto-sha256-iterative                   36.000+-0.789      ?      36.209+-0.865         ?

   <arithmetic>                                       66.441+-0.522             66.226+-0.400           might be 1.0032x faster

                                                        TipOfTree                   StrCat                                      
JSRegress:
   abc-forward-loop-equal                            31.1456+-1.4073           30.4296+-0.3846          might be 1.0235x faster
   abc-postfix-backward-loop                         29.9684+-1.1729     ?     30.3571+-0.6869        ? might be 1.0130x slower
   abc-simple-backward-loop                          29.4809+-0.7306     ?     29.8360+-0.9788        ? might be 1.0120x slower
   abc-simple-forward-loop                           30.0459+-1.1628           29.9501+-0.7662        
   abc-skippy-loop                                   21.7065+-1.0456           21.2913+-0.3694          might be 1.0195x faster
   abs-boolean                                        2.4337+-0.0584     ?      2.5656+-0.2636        ? might be 1.0542x slower
   adapt-to-double-divide                            16.4878+-0.8791           16.1938+-0.3396          might be 1.0182x faster
   aliased-arguments-getbyval                         1.1704+-0.0434     ?      1.1707+-0.0424        ?
   allocate-big-object                                2.4617+-0.1206     ?      2.9181+-1.0364        ? might be 1.1854x slower
   arguments-named-and-reflective                    11.3366+-0.4559           10.9323+-0.2212          might be 1.0370x faster
   arguments-out-of-bounds                            9.1195+-0.2300            9.0666+-0.2590        
   arguments-strict-mode                             10.1922+-0.2730            9.9007+-0.2057          might be 1.0294x faster
   arguments                                          8.6848+-0.1860            8.6184+-0.1084        
   arity-mismatch-inlining                            0.7778+-0.0268     ?      0.7896+-0.0334        ? might be 1.0151x slower
   array-access-polymorphic-structure                 5.8145+-0.2538     ?      5.8689+-0.1942        ?
   array-nonarray-polymorhpic-access                 24.5954+-0.2835           24.5492+-0.5157        
   array-prototype-every                             76.5537+-1.6512     ?     77.5238+-1.1578        ? might be 1.0127x slower
   array-prototype-forEach                           77.5141+-3.3151           75.9677+-1.7970          might be 1.0204x faster
   array-prototype-map                               80.8135+-0.7237     ?     86.6966+-8.9413        ? might be 1.0728x slower
   array-prototype-reduce                            73.3315+-1.3747           72.9891+-1.9002        
   array-prototype-reduceRight                       72.4801+-1.3334     ?     73.6562+-3.5670        ? might be 1.0162x slower
   array-prototype-some                              76.0469+-1.0196     ?     76.9526+-1.6458        ? might be 1.0119x slower
   array-splice-contiguous                           21.3071+-0.7037           20.2920+-1.0941          might be 1.0500x faster
   array-with-double-add                              3.9956+-0.0962     ?      4.0420+-0.1368        ? might be 1.0116x slower
   array-with-double-increment                        3.0188+-0.0305     ?      3.0873+-0.1024        ? might be 1.0227x slower
   array-with-double-mul-add                          5.0347+-0.1066     ?      5.1806+-0.2030        ? might be 1.0290x slower
   array-with-double-sum                              3.2137+-0.0976            3.1686+-0.1208          might be 1.0142x faster
   array-with-int32-add-sub                           7.6219+-0.2412     ?      7.7368+-0.3901        ? might be 1.0151x slower
   array-with-int32-or-double-sum                     3.3596+-0.0596     ?      3.4121+-0.0855        ? might be 1.0156x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.3177+-0.5026     ?     26.1742+-0.9101        ? might be 1.0338x slower
   ArrayBuffer-DataView-alloc-long-lived             11.7720+-0.5511     ?     11.7806+-0.6288        ?
   ArrayBuffer-Int32Array-byteOffset                  3.6647+-0.1069            3.5748+-0.0826          might be 1.0252x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.0504+-0.5769     ?     30.6883+-1.3370        ? might be 1.0212x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.1507+-0.4191     ?     20.7614+-0.9561        ? might be 1.0303x slower
   ArrayBuffer-Int8Array-alloc-long-lived            12.8059+-0.7278           12.5412+-0.7450          might be 1.0211x faster
   ArrayBuffer-Int8Array-alloc                        9.3755+-0.3654     ?      9.7997+-0.4810        ? might be 1.0452x slower
   arrowfunction-call                                10.7135+-0.2454           10.5185+-0.1472          might be 1.0185x faster
   asmjs_bool_bug                                     6.9057+-0.1906            6.8679+-0.1709        
   assign-custom-setter-polymorphic                   2.6230+-0.7529            2.3449+-0.0510          might be 1.1186x faster
   assign-custom-setter                               3.2358+-0.1125            3.1331+-0.0642          might be 1.0328x faster
   basic-set                                          8.4282+-0.6542     ?      8.5470+-0.4325        ? might be 1.0141x slower
   big-int-mul                                        3.6063+-0.3060            3.4231+-0.0727          might be 1.0535x faster
   boolean-test                                       2.9189+-0.0476     ?      2.9856+-0.1509        ? might be 1.0228x slower
   branch-fold                                        3.5399+-0.0553     ?      3.8179+-0.5844        ? might be 1.0785x slower
   branch-on-string-as-boolean                       16.8358+-0.4432     ?     16.9982+-0.7382        ?
   by-val-generic                                     2.3459+-0.0975     ?      2.3655+-0.1769        ?
   call-spread-apply                                 27.2581+-2.4959           26.0660+-0.8431          might be 1.0457x faster
   call-spread-call                                  21.3594+-0.6888     ?     21.3614+-1.0236        ?
   captured-assignments                               0.4657+-0.0313     ^      0.4204+-0.0081        ^ definitely 1.1076x faster
   cast-int-to-double                                 5.0370+-0.0941     ?      5.5158+-1.4485        ? might be 1.0951x slower
   cell-argument                                      6.5626+-0.3597            6.4824+-0.3332          might be 1.0124x faster
   cfg-simplify                                       2.6609+-0.0905     ?      2.7738+-0.2334        ? might be 1.0424x slower
   chain-getter-access                                8.2312+-0.1675     ?      8.3123+-0.1646        ?
   cmpeq-obj-to-obj-other                            11.6687+-1.0878     ?     12.0208+-0.6587        ? might be 1.0302x slower
   constant-test                                      4.7275+-0.0325            4.7274+-0.0886        
   create-lots-of-functions                           9.5317+-0.4458     ?      9.7405+-0.6411        ? might be 1.0219x slower
   cse-new-array-buffer                               2.2375+-0.1122     ?      2.2691+-0.1682        ? might be 1.0141x slower
   cse-new-array                                      2.2445+-0.1002            2.1922+-0.1102          might be 1.0239x faster
   DataView-custom-properties                        33.3879+-5.9830           30.6297+-0.4778          might be 1.0900x faster
   delay-tear-off-arguments-strictmode               12.4377+-0.3288           12.2544+-0.2778          might be 1.0150x faster
   deltablue-varargs                                158.5559+-0.7326     ?    158.7660+-2.1798        ?
   destructuring-arguments                          161.8938+-1.2668          161.0386+-1.9538        
   destructuring-parameters-overridden-by-function   
                                                      0.4646+-0.0524            0.4523+-0.0273          might be 1.0274x faster
   destructuring-swap                                 4.7325+-0.2366            4.6063+-0.0622          might be 1.0274x faster
   direct-arguments-getbyval                          1.1734+-0.0575     ?      1.2341+-0.1086        ? might be 1.0517x slower
   div-boolean-double                                 5.2619+-0.1643     ?      5.2633+-0.0389        ?
   div-boolean                                        8.1071+-0.0692     ?      8.1529+-0.1457        ?
   double-get-by-val-out-of-bounds                    3.9550+-0.1739     ?      3.9558+-0.0953        ?
   double-pollution-getbyval                          8.6139+-0.0455            8.5876+-0.0306        
   double-pollution-putbyoffset                       3.8017+-0.2199            3.7036+-0.0850          might be 1.0265x faster
   double-real-use                                   26.9679+-1.8766     ?     27.4053+-2.7069        ? might be 1.0162x slower
   double-to-int32-typed-array-no-inline              1.9427+-0.0541     ?      2.0637+-0.3079        ? might be 1.0622x slower
   double-to-int32-typed-array                        1.8152+-0.0815     ?      1.8460+-0.2939        ? might be 1.0170x slower
   double-to-uint32-typed-array-no-inline             2.0096+-0.0340     ?      2.0243+-0.1375        ?
   double-to-uint32-typed-array                       1.8860+-0.0817            1.8166+-0.0716          might be 1.0382x faster
   elidable-new-object-dag                           34.2381+-0.9081           33.8854+-0.5693          might be 1.0104x faster
   elidable-new-object-roflcopter                    33.3892+-0.8551           33.0703+-0.5301        
   elidable-new-object-then-call                     31.0470+-0.3284     ?     31.5540+-0.5959        ? might be 1.0163x slower
   elidable-new-object-tree                          37.5618+-0.9812           37.1336+-1.0619          might be 1.0115x faster
   empty-string-plus-int                              4.5654+-0.1095     ?      4.7860+-0.1689        ? might be 1.0483x slower
   emscripten-cube2hash                              26.0617+-1.2798     ?     26.7690+-1.6684        ? might be 1.0271x slower
   exit-length-on-plain-object                       12.2029+-0.3331     ?     12.3964+-0.6679        ? might be 1.0159x slower
   external-arguments-getbyval                        1.2448+-0.3545     ?      1.2597+-0.1047        ? might be 1.0119x slower
   external-arguments-putbyval                        2.2593+-0.3710     ?      2.2665+-0.2370        ?
   fixed-typed-array-storage-var-index                1.1405+-0.0641            1.1303+-0.0418        
   fixed-typed-array-storage                          0.8996+-0.1570            0.8304+-0.0376          might be 1.0833x faster
   Float32Array-matrix-mult                           3.8641+-0.1069            3.8243+-0.1172          might be 1.0104x faster
   Float32Array-to-Float64Array-set                  46.3413+-0.8890     ?     48.0356+-0.9460        ? might be 1.0366x slower
   Float64Array-alloc-long-lived                     68.3447+-0.8755     ?     70.0030+-1.7225        ? might be 1.0243x slower
   Float64Array-to-Int16Array-set                    57.3182+-2.7270           56.2293+-1.0038          might be 1.0194x faster
   fold-double-to-int                                12.2681+-0.4423           12.1509+-0.3977        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.5835+-1.3629           11.3527+-0.8725          might be 1.0203x faster
   fold-get-by-id-to-multi-get-by-offset              9.6951+-0.4112     ?     10.5021+-1.1908        ? might be 1.0832x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.4390+-0.4917            8.9371+-1.9079          might be 1.0562x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.6073+-0.8821            8.0096+-0.9251          might be 1.0746x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.5311+-1.1464            8.2115+-0.7486          might be 1.1607x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      3.8417+-0.2350     ?      4.6043+-0.7592        ? might be 1.1985x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.1443+-0.2370     ?      8.2129+-0.2706        ?
   fold-put-by-id-to-multi-put-by-offset             10.5276+-1.1868           10.0132+-0.6344          might be 1.0514x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.3340+-1.7707           10.0412+-1.2083          might be 1.0292x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.8404+-1.2672           10.3970+-0.7190          might be 1.1388x faster
   fold-put-structure                                 4.0908+-0.3562            4.0351+-0.2550          might be 1.0138x faster
   for-of-iterate-array-entries                      11.2199+-0.2825           10.9754+-0.2070          might be 1.0223x faster
   for-of-iterate-array-keys                          3.2887+-0.1086     ?      3.3138+-0.1933        ?
   for-of-iterate-array-values                        3.5796+-0.2340            3.3546+-0.1672          might be 1.0671x faster
   fround                                            19.8170+-1.0044           18.4767+-1.4056          might be 1.0725x faster
   ftl-library-inlining-dataview                     56.1531+-0.8738     ?     56.6655+-1.7936        ?
   ftl-library-inlining                             105.9074+-2.8813     ?    106.9240+-1.1386        ?
   function-call                                     10.4703+-0.2053     ?     10.4904+-0.2700        ?
   function-dot-apply                                 1.7519+-0.0492            1.7377+-0.0647        
   function-test                                      2.6067+-0.0333     ?      2.6787+-0.0518        ? might be 1.0276x slower
   function-with-eval                                98.6235+-1.8720           98.3354+-1.6727        
   gcse-poly-get-less-obvious                        13.9881+-0.1321     ?     14.4059+-0.4888        ? might be 1.0299x slower
   gcse-poly-get                                     16.2136+-0.6146     ?     16.2936+-0.9627        ?
   gcse                                               3.9205+-0.2015     ?      3.9684+-0.2727        ? might be 1.0122x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5747+-0.0867     ?      2.6185+-0.0541        ? might be 1.0170x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7929+-0.2862            5.6527+-0.0570          might be 1.0248x faster
   get-by-id-chain-from-try-block                     5.4149+-0.1738     ?      5.5115+-0.2450        ? might be 1.0178x slower
   get-by-id-check-structure-elimination              4.3621+-0.0731     ?      4.5710+-0.2913        ? might be 1.0479x slower
   get-by-id-proto-or-self                           16.1435+-0.3159           15.7855+-0.3270          might be 1.0227x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8843+-0.0859            2.8672+-0.0781        
   get-by-id-self-or-proto                           16.7096+-1.3658           15.8880+-0.3775          might be 1.0517x faster
   get-by-val-out-of-bounds                           3.9046+-0.5398            3.6850+-0.1338          might be 1.0596x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.8780+-0.3093            2.8044+-0.1022          might be 1.0262x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      5.9207+-0.0823     ?      6.6700+-1.3409        ? might be 1.1266x slower
   get-by-val-with-string-chain-from-try-block   
                                                      5.7615+-0.5953            5.6545+-0.2849          might be 1.0189x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.1048+-0.1187     ?      5.3803+-0.7413        ? might be 1.0540x slower
   get-by-val-with-string-proto-or-self              16.4740+-1.4911           16.2640+-1.2117          might be 1.0129x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.1866+-0.0952            3.1356+-0.0621          might be 1.0163x faster
   get-by-val-with-string-self-or-proto              16.5654+-1.2355     ?     18.2298+-2.2927        ? might be 1.1005x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0135+-0.0598            2.9989+-0.0765        
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.2834+-0.0991           12.2825+-0.1538        
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.4909+-0.1269     ?      5.7126+-0.3032        ? might be 1.0404x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     10.9255+-0.0735     ?     10.9531+-0.0489        ?
   get-by-val-with-symbol-proto-or-self              17.6960+-1.7465     ?     17.7269+-1.5277        ?
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.3091+-0.8793            3.8462+-0.0425          might be 1.1204x faster
   get-by-val-with-symbol-self-or-proto              16.5420+-1.2979     ?     18.0642+-1.6752        ? might be 1.0920x slower
   get_callee_monomorphic                             2.1951+-0.1172     ?      2.2366+-0.1831        ? might be 1.0189x slower
   get_callee_polymorphic                             3.1910+-0.0887     ?      3.2404+-0.0945        ? might be 1.0155x slower
   getter-no-activation                               4.6924+-0.1448     ?      4.7293+-0.1329        ?
   getter-prototype                                   9.0873+-0.3969            8.9836+-0.2186          might be 1.0115x faster
   getter-richards                                  122.8137+-3.9077          117.4564+-5.6593          might be 1.0456x faster
   getter                                             5.7251+-0.6897            5.3005+-0.5729          might be 1.0801x faster
   global-object-access-with-mutating-structure   
                                                      5.6862+-0.1670     ?      5.7731+-0.2288        ? might be 1.0153x slower
   global-var-const-infer-fire-from-opt               0.8095+-0.0586            0.7380+-0.0666          might be 1.0969x faster
   global-var-const-infer                             0.5862+-0.0191     ?      0.6703+-0.1048        ? might be 1.1434x slower
   hard-overflow-check-equal                         33.0695+-0.7954           32.7384+-0.4644          might be 1.0101x faster
   hard-overflow-check                               33.9262+-1.2635           32.8813+-0.3965          might be 1.0318x faster
   HashMap-put-get-iterate-keys                      26.1099+-2.3512           25.4144+-1.6804          might be 1.0274x faster
   HashMap-put-get-iterate                           28.1582+-1.0382           27.9748+-1.4628        
   HashMap-string-put-get-iterate                    23.0403+-0.7028     ?     25.3869+-1.6966        ? might be 1.1018x slower
   hoist-make-rope                                    9.4122+-1.0186            8.6981+-0.6850          might be 1.0821x faster
   hoist-poly-check-structure-effectful-loop   
                                                      4.0350+-0.0827     ?      4.1851+-0.3913        ? might be 1.0372x slower
   hoist-poly-check-structure                         3.2539+-0.0593     ?      3.2928+-0.0723        ? might be 1.0120x slower
   imul-double-only                                   7.4231+-0.0525            7.3420+-0.2689          might be 1.0110x faster
   imul-int-only                                      8.4854+-0.5863            8.1219+-0.7523          might be 1.0448x faster
   imul-mixed                                         6.8331+-0.3803     ?      6.8585+-0.3299        ?
   in-four-cases                                     17.1404+-0.3110     ?     17.8450+-2.3242        ? might be 1.0411x slower
   in-one-case-false                                  9.4449+-0.4228     ?      9.5211+-0.5951        ?
   in-one-case-true                                   9.2405+-0.2482            9.2167+-0.2526        
   in-two-cases                                       9.8873+-0.7828            9.6766+-0.2216          might be 1.0218x faster
   indexed-properties-in-objects                      2.6666+-0.0584     ?      2.8036+-0.3184        ? might be 1.0514x slower
   infer-closure-const-then-mov-no-inline             3.0070+-0.0395     ?      3.0214+-0.0535        ?
   infer-closure-const-then-mov                      19.0286+-0.5132           18.6708+-0.7898          might be 1.0192x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.5158+-0.3669           10.3597+-0.0713          might be 1.0151x faster
   infer-closure-const-then-put-to-scope             22.0530+-0.5881           21.1777+-0.7510          might be 1.0413x faster
   infer-closure-const-then-reenter-no-inline   
                                                     50.6959+-1.3560           50.3739+-1.5974        
   infer-closure-const-then-reenter                  21.5408+-0.5510     ?     22.0286+-0.2955        ? might be 1.0226x slower
   infer-constant-global-property                     3.5016+-0.1434     ?      3.5441+-0.2581        ? might be 1.0121x slower
   infer-constant-property                            2.5655+-0.0331     ?      2.5757+-0.0361        ?
   infer-one-time-closure-ten-vars                    7.6331+-0.2489     ?      7.6732+-0.3664        ?
   infer-one-time-closure-two-vars                    7.4261+-0.3729            7.2691+-0.3027          might be 1.0216x faster
   infer-one-time-closure                             7.1008+-0.2838     ?      7.2716+-0.6153        ? might be 1.0240x slower
   infer-one-time-deep-closure                       10.8396+-0.1970     ?     10.9955+-0.5436        ? might be 1.0144x slower
   inline-arguments-access                            3.6590+-0.3138            3.5412+-0.1702          might be 1.0333x faster
   inline-arguments-aliased-access                    3.8611+-0.7523            3.4771+-0.0342          might be 1.1104x faster
   inline-arguments-local-escape                      3.6135+-0.2379     ?      3.7779+-0.5080        ? might be 1.0455x slower
   inline-get-scoped-var                              4.5823+-0.2074            4.5178+-0.1743          might be 1.0143x faster
   inlined-put-by-id-transition                      10.3908+-0.7313           10.0489+-0.9520          might be 1.0340x faster
   inlined-put-by-val-with-string-transition   
                                                     71.9445+-0.4746           71.4734+-1.8479        
   inlined-put-by-val-with-symbol-transition   
                                                     70.0681+-0.8703     ?     70.6903+-1.5673        ?
   int-or-other-abs-then-get-by-val                   4.6914+-0.0843            4.6873+-0.0973        
   int-or-other-abs-zero-then-get-by-val             17.3349+-3.5691           15.4835+-0.1737          might be 1.1196x faster
   int-or-other-add-then-get-by-val                   3.9274+-0.0765            3.9255+-0.0277        
   int-or-other-add                                   4.8364+-0.1537            4.7739+-0.0849          might be 1.0131x faster
   int-or-other-div-then-get-by-val                   3.7933+-0.0988            3.7682+-0.0587        
   int-or-other-max-then-get-by-val                   3.7371+-0.0203     ?      3.7735+-0.0706        ?
   int-or-other-min-then-get-by-val                   3.9045+-0.0817     ?      3.9398+-0.1240        ?
   int-or-other-mod-then-get-by-val                   3.5329+-0.0938     ?      3.5475+-0.0991        ?
   int-or-other-mul-then-get-by-val                   3.4988+-0.0610     ?      3.6295+-0.2778        ? might be 1.0374x slower
   int-or-other-neg-then-get-by-val                   4.3817+-0.0902            4.3801+-0.2104        
   int-or-other-neg-zero-then-get-by-val             16.1496+-1.1679           15.6258+-0.3840          might be 1.0335x faster
   int-or-other-sub-then-get-by-val                   3.9758+-0.0726            3.9347+-0.0578          might be 1.0105x faster
   int-or-other-sub                                   3.3992+-0.1944     ?      3.4142+-0.1347        ?
   int-overflow-local                                 4.1255+-0.2099     ?      4.2104+-0.3422        ? might be 1.0206x slower
   Int16Array-alloc-long-lived                       47.0587+-0.9067           46.9449+-0.9351        
   Int16Array-bubble-sort-with-byteLength            17.5691+-0.5270     ?     17.7390+-0.9971        ?
   Int16Array-bubble-sort                            17.6189+-0.8051           17.4716+-0.7130        
   Int16Array-load-int-mul                            1.3929+-0.0170            1.3911+-0.0498        
   Int16Array-to-Int32Array-set                      53.4947+-16.5133          46.9457+-1.4543          might be 1.1395x faster
   Int32Array-alloc-large                            12.3675+-0.8325     ?     12.5094+-0.6702        ? might be 1.0115x slower
   Int32Array-alloc-long-lived                       54.9740+-1.1645     ?     55.2544+-0.5761        ?
   Int32Array-alloc                                   2.7862+-0.2352     ?      2.9979+-0.5004        ? might be 1.0760x slower
   Int32Array-Int8Array-view-alloc                    5.9407+-0.0928            5.8846+-0.1137        
   int52-spill                                        4.4282+-0.0766     ?      4.4979+-0.1031        ? might be 1.0157x slower
   Int8Array-alloc-long-lived                        41.1368+-1.7902           41.1357+-1.2157        
   Int8Array-load-with-byteLength                     3.4189+-0.1704            3.3262+-0.0219          might be 1.0279x faster
   Int8Array-load                                     3.3903+-0.1097     ?      3.4682+-0.1543        ? might be 1.0230x slower
   integer-divide                                    10.0651+-0.1625     ?     10.1459+-0.2646        ?
   integer-modulo                                     1.5144+-0.0202     ?      1.5271+-0.0440        ?
   is-boolean-fold-tricky                             3.7480+-0.0682     ?      3.8831+-0.2923        ? might be 1.0360x slower
   is-boolean-fold                                    2.7155+-0.1680            2.6057+-0.0449          might be 1.0421x faster
   is-function-fold-tricky-internal-function   
                                                     10.1678+-0.0734     ?     10.2925+-0.2530        ? might be 1.0123x slower
   is-function-fold-tricky                            4.0705+-0.0355     ?      4.0884+-0.0963        ?
   is-function-fold                                   2.6304+-0.0324     ?      2.6597+-0.1214        ? might be 1.0111x slower
   is-number-fold-tricky                              4.0524+-0.0731            4.0246+-0.0908        
   is-number-fold                                     2.6237+-0.1380     ?      2.7929+-0.3881        ? might be 1.0645x slower
   is-object-or-null-fold-functions                   2.6381+-0.0546            2.6365+-0.0511        
   is-object-or-null-fold-less-tricky                 4.0663+-0.0564            4.0202+-0.0244          might be 1.0115x faster
   is-object-or-null-fold-tricky                      5.2059+-0.1313            5.0461+-0.1316          might be 1.0317x faster
   is-object-or-null-fold                             2.6445+-0.0796     ?      2.7330+-0.2929        ? might be 1.0335x slower
   is-object-or-null-trickier-function                4.0882+-0.0430     ?      4.1387+-0.0942        ? might be 1.0124x slower
   is-object-or-null-trickier-internal-function   
                                                     10.5889+-0.2027     ?     10.7656+-0.0741        ? might be 1.0167x slower
   is-object-or-null-tricky-function                  4.0838+-0.0955            4.0549+-0.0388        
   is-object-or-null-tricky-internal-function   
                                                      7.8208+-0.0575            7.8044+-0.0943        
   is-string-fold-tricky                              3.9924+-0.0548     ?      3.9991+-0.0664        ?
   is-string-fold                                     2.6303+-0.0916     ?      2.6654+-0.1679        ? might be 1.0134x slower
   is-undefined-fold-tricky                           3.5508+-0.4753            3.3561+-0.2491          might be 1.0580x faster
   is-undefined-fold                                  2.6070+-0.1004     ?      2.6397+-0.1001        ? might be 1.0125x slower
   JSONP-negative-0                                   0.2486+-0.0039     ?      0.2540+-0.0314        ? might be 1.0217x slower
   large-int-captured                                 3.9732+-0.2508     ?      4.0787+-0.4290        ? might be 1.0265x slower
   large-int-neg                                     13.9153+-0.4101           13.7747+-0.2821          might be 1.0102x faster
   large-int                                         12.6826+-0.2588     ?     13.1542+-0.6735        ? might be 1.0372x slower
   load-varargs-elimination                          20.9234+-0.6051     ?     21.3090+-0.6305        ? might be 1.0184x slower
   logical-not-weird-types                            2.8406+-0.1144            2.7562+-0.0628          might be 1.0306x faster
   logical-not                                        4.1691+-0.0982     ?      4.2117+-0.2138        ? might be 1.0102x slower
   lots-of-fields                                     9.5229+-0.1386            9.2073+-0.3929          might be 1.0343x faster
   make-indexed-storage                               2.7055+-0.0951     ?      2.7297+-0.2262        ?
   make-rope-cse                                      3.6464+-0.1132     ?      3.6747+-0.1744        ?
   marsaglia-larger-ints                             32.2311+-2.2429           31.8976+-0.4541          might be 1.0105x faster
   marsaglia-osr-entry                               21.8169+-0.4521           21.3050+-0.4166          might be 1.0240x faster
   math-with-out-of-bounds-array-values              22.4487+-0.5164     ?     23.1385+-1.0879        ? might be 1.0307x slower
   max-boolean                                        2.6936+-0.2937            2.6220+-0.0599          might be 1.0273x faster
   method-on-number                                  16.2266+-0.6764           15.7417+-0.2831          might be 1.0308x faster
   min-boolean                                        2.6524+-0.2885            2.5685+-0.0847          might be 1.0327x faster
   minus-boolean-double                               3.0661+-0.0690            3.0584+-0.0671        
   minus-boolean                                      2.3601+-0.2139            2.3547+-0.1270        
   misc-strict-eq                                    32.5762+-1.0582     ^     29.4148+-0.6865        ^ definitely 1.1075x faster
   mod-boolean-double                                11.1977+-0.3266           10.9937+-0.2184          might be 1.0186x faster
   mod-boolean                                        8.4449+-0.2433            8.2363+-0.0933          might be 1.0253x faster
   mul-boolean-double                                 3.5678+-0.0394     ?      3.6668+-0.2671        ? might be 1.0277x slower
   mul-boolean                                        2.7819+-0.0855            2.7773+-0.0341        
   neg-boolean                                        3.1006+-0.0141            3.0825+-0.0919        
   negative-zero-divide                               0.3493+-0.0198     ?      0.3578+-0.0316        ? might be 1.0244x slower
   negative-zero-modulo                               0.3367+-0.0074     ?      0.3401+-0.0140        ? might be 1.0100x slower
   negative-zero-negate                               0.3277+-0.0163            0.3229+-0.0164          might be 1.0150x faster
   nested-function-parsing                           44.0606+-1.3436     ?     44.3895+-0.7551        ?
   new-array-buffer-dead                             87.7879+-1.1897     ?     88.3784+-1.1193        ?
   new-array-buffer-push                              5.9845+-0.3235     ?      6.2733+-0.5818        ? might be 1.0483x slower
   new-array-dead                                    14.7372+-0.4094     ?     14.9960+-0.5969        ? might be 1.0176x slower
   new-array-push                                     3.6849+-0.4874            3.3529+-0.1225          might be 1.0990x faster
   no-inline-constructor                             31.6900+-0.8482           31.2977+-0.9552          might be 1.0125x faster
   number-test                                        3.0308+-0.2186            2.9203+-0.0265          might be 1.0379x faster
   object-closure-call                                4.6466+-0.0680     ?      4.6765+-0.0307        ?
   object-get-own-property-symbols-on-large-array   
                                                      4.2335+-0.2532     ?      4.9312+-0.7876        ? might be 1.1648x slower
   object-test                                        2.6406+-0.0924     ?      2.8420+-0.3678        ? might be 1.0763x slower
   obvious-sink-pathology-taken                     100.7753+-1.3656           98.6911+-0.9040          might be 1.0211x faster
   obvious-sink-pathology                            96.4686+-2.5620           93.9887+-0.8356          might be 1.0264x faster
   obviously-elidable-new-object                     28.7442+-0.9348           28.2874+-0.3639          might be 1.0161x faster
   plus-boolean-arith                                 2.3492+-0.0732     ?      2.3789+-0.0659        ? might be 1.0126x slower
   plus-boolean-double                                3.1017+-0.0560     ?      3.1640+-0.1677        ? might be 1.0201x slower
   plus-boolean                                       2.6227+-0.1280            2.6159+-0.3930        
   poly-chain-access-different-prototypes-simple   
                                                      3.1948+-0.0493     ?      3.2247+-0.0807        ?
   poly-chain-access-different-prototypes             2.9137+-0.0773            2.8583+-0.1210          might be 1.0194x faster
   poly-chain-access-simpler                          3.1899+-0.0526     ?      3.3626+-0.4021        ? might be 1.0542x slower
   poly-chain-access                                  3.2526+-0.1145     ?      3.2565+-0.0707        ?
   poly-stricteq                                     50.4970+-0.4574     ^     48.4766+-0.8568        ^ definitely 1.0417x faster
   polymorphic-array-call                             1.2638+-0.0607            1.1783+-0.0640          might be 1.0725x faster
   polymorphic-get-by-id                              2.8236+-0.1198            2.7826+-0.0561          might be 1.0147x faster
   polymorphic-put-by-id                             25.1849+-1.4878           24.8862+-1.3509          might be 1.0120x faster
   polymorphic-put-by-val-with-string                25.6421+-0.8351           25.3653+-0.5556          might be 1.0109x faster
   polymorphic-put-by-val-with-symbol                24.9496+-0.5299           24.8567+-0.5412        
   polymorphic-structure                             13.7651+-0.8716           13.1191+-0.2252          might be 1.0492x faster
   polyvariant-monomorphic-get-by-id                  6.6336+-0.9316     ?      6.6380+-0.8811        ?
   proto-getter-access                                8.5117+-0.3709            8.3768+-0.3214          might be 1.0161x faster
   prototype-access-with-mutating-prototype           5.4771+-0.2494     ?      5.6443+-0.4012        ? might be 1.0305x slower
   put-by-id-replace-and-transition                   7.9639+-0.5039            7.9281+-0.3799        
   put-by-id-slightly-polymorphic                     2.6113+-0.0937            2.5770+-0.0380          might be 1.0133x faster
   put-by-id                                          9.7076+-0.4687     ?      9.7594+-0.5257        ?
   put-by-val-direct                                  0.3238+-0.0059     ?      0.3682+-0.0825        ? might be 1.1370x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.6218+-0.6511            5.5741+-0.5735        
   put-by-val-machine-int                             2.3438+-0.0898     ?      2.4495+-0.2376        ? might be 1.0451x slower
   put-by-val-with-string-replace-and-transition   
                                                     10.3405+-0.6322           10.1094+-0.5299          might be 1.0229x faster
   put-by-val-with-string-slightly-polymorphic   
                                                      2.8797+-0.0983            2.7979+-0.0212          might be 1.0293x faster
   put-by-val-with-string                            10.5278+-0.3571           10.1387+-0.4633          might be 1.0384x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     11.6553+-0.6060           11.3151+-0.2570          might be 1.0301x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.3136+-0.3272            3.0999+-0.0614          might be 1.0689x faster
   put-by-val-with-symbol                            10.4623+-0.5638           10.1827+-0.3735          might be 1.0275x faster
   rare-osr-exit-on-local                            14.1499+-0.2728     ?     14.5824+-0.5626        ? might be 1.0306x slower
   register-pressure-from-osr                        16.6289+-0.5319     ?     16.6723+-0.4702        ?
   repeat-multi-get-by-offset                        21.4990+-0.2896     ?     22.2393+-1.0880        ? might be 1.0344x slower
   setter-prototype                                   7.7757+-0.2726            7.6022+-0.1878          might be 1.0228x faster
   setter                                             5.2869+-0.4751     ?      5.6403+-0.7535        ? might be 1.0669x slower
   simple-activation-demo                            24.6667+-1.3609           24.6474+-0.9674        
   simple-getter-access                              10.8195+-0.5222     ?     11.0280+-0.4992        ? might be 1.0193x slower
   simple-poly-call-nested                            8.8865+-0.9067            8.8777+-0.7708        
   simple-poly-call                                   1.1463+-0.0167     ?      1.1907+-0.0435        ? might be 1.0387x slower
   sin-boolean                                       20.7469+-1.5038           20.5577+-1.3363        
   singleton-scope                                   56.0539+-1.4795           55.6335+-0.6538        
   sink-function                                     10.3840+-0.8357            9.6764+-0.4415          might be 1.0731x faster
   sink-huge-activation                              16.2677+-0.4368     ?     16.5253+-0.5513        ? might be 1.0158x slower
   sinkable-new-object-dag                           54.3792+-0.5899     ?     54.8855+-1.7615        ?
   sinkable-new-object-taken                         42.9556+-2.0262     ?     43.6815+-1.8042        ? might be 1.0169x slower
   sinkable-new-object                               30.4937+-0.8378           30.1870+-0.9364          might be 1.0102x faster
   slow-array-profile-convergence                     2.7342+-0.4909            2.5652+-0.2583          might be 1.0659x faster
   slow-convergence                                   2.2895+-0.0781     ?      2.3290+-0.1445        ? might be 1.0172x slower
   slow-ternaries                                    17.4546+-0.6152     ?     18.5285+-1.6750        ? might be 1.0615x slower
   sorting-benchmark                                 16.7123+-0.4597           16.4958+-0.4930          might be 1.0131x faster
   sparse-conditional                                 1.0959+-0.0383            1.0824+-0.0242          might be 1.0125x faster
   splice-to-remove                                  12.1830+-0.4896     ?     13.0335+-1.2099        ? might be 1.0698x slower
   string-char-code-at                               14.0684+-0.4336     ?     14.3286+-0.6381        ? might be 1.0185x slower
   string-concat-object                               2.1888+-0.0815            2.1527+-0.1699          might be 1.0168x faster
   string-concat-pair-object                          2.0466+-0.0869            2.0295+-0.1172        
   string-concat-pair-simple                          9.3575+-0.8451     ?      9.5057+-0.4900        ? might be 1.0158x slower
   string-concat-simple                               9.0983+-0.2570     ?      9.3932+-0.3635        ? might be 1.0324x slower
   string-cons-repeat                                 6.4657+-0.5533            6.3317+-0.2490          might be 1.0212x faster
   string-cons-tower                                  6.9810+-0.5092            6.9780+-0.8797        
   string-equality                                   15.1554+-0.5691     ?     15.2491+-0.5658        ?
   string-get-by-val-big-char                         6.6301+-0.0995     ?      6.9014+-0.3114        ? might be 1.0409x slower
   string-get-by-val-out-of-bounds-insane             3.0567+-0.0694     ?      3.1164+-0.0952        ? might be 1.0195x slower
   string-get-by-val-out-of-bounds                    4.1134+-0.1867            3.9774+-0.1017          might be 1.0342x faster
   string-get-by-val                                  2.7883+-0.0565            2.7820+-0.0379        
   string-hash                                        1.7822+-0.0310            1.7679+-0.0170        
   string-long-ident-equality                        12.4208+-0.1984     ?     12.9007+-1.0481        ? might be 1.0386x slower
   string-out-of-bounds                              10.0984+-0.3248     ?     10.3635+-0.6056        ? might be 1.0263x slower
   string-repeat-arith                               25.9027+-0.4338     ?     29.2328+-7.1232        ? might be 1.1286x slower
   string-sub                                        51.5594+-0.3931           51.5006+-0.6356        
   string-test                                        2.9570+-0.2971            2.8196+-0.0690          might be 1.0487x faster
   string-var-equality                               24.7246+-0.3301     ?     24.9020+-0.5108        ?
   structure-hoist-over-transitions                   2.4392+-0.1579            2.4151+-0.0671        
   substring-concat-weird                            36.2008+-1.5922           35.6064+-0.8610          might be 1.0167x faster
   substring-concat                                  38.8599+-0.8447     ?     39.4013+-0.7220        ? might be 1.0139x slower
   substring                                         44.9148+-0.7839     ?     45.6822+-2.7099        ? might be 1.0171x slower
   switch-char-constant                               2.5945+-0.0411     ?      2.6532+-0.1349        ? might be 1.0226x slower
   switch-char                                        8.0024+-0.2832     ^      6.9740+-0.6189        ^ definitely 1.1475x faster
   switch-constant                                    8.2765+-1.0611            8.2729+-0.4389        
   switch-string-basic-big-var                       13.7849+-0.1566     ?     13.9359+-0.3378        ? might be 1.0110x slower
   switch-string-basic-big                           14.1514+-0.2010     ?     14.3380+-0.1366        ? might be 1.0132x slower
   switch-string-basic-var                           13.0743+-0.3132     ?     13.2869+-0.4514        ? might be 1.0163x slower
   switch-string-basic                               12.7244+-0.4532           12.4874+-0.1877          might be 1.0190x faster
   switch-string-big-length-tower-var                17.9992+-0.5468           17.8340+-0.3907        
   switch-string-length-tower-var                    14.0604+-0.9481           13.7309+-0.4745          might be 1.0240x faster
   switch-string-length-tower                        12.0111+-0.3903           11.7652+-0.1365          might be 1.0209x faster
   switch-string-short                               12.0165+-0.1216     ?     12.1827+-0.4034        ? might be 1.0138x slower
   switch                                            11.0308+-0.4788     ?     12.0783+-1.0862        ? might be 1.0950x slower
   tear-off-arguments-simple                          3.0123+-0.1402            2.9841+-0.1348        
   tear-off-arguments                                 3.8576+-0.0970     ?      3.8894+-0.1095        ?
   temporal-structure                                12.0939+-0.4399     ?     12.1672+-0.2985        ?
   to-int32-boolean                                  12.5873+-0.1510           12.5255+-0.1652        
   try-catch-get-by-val-cloned-arguments             14.8324+-1.1734           14.2358+-0.5494          might be 1.0419x faster
   try-catch-get-by-val-direct-arguments              6.1888+-0.1099     ?      6.4509+-0.4315        ? might be 1.0423x slower
   try-catch-get-by-val-scoped-arguments              7.7319+-0.2994            7.5411+-0.2008          might be 1.0253x faster
   typed-array-get-set-by-val-profiling              27.2373+-0.6321           27.0678+-0.9738        
   undefined-property-access                        225.0114+-2.9720          223.7468+-1.3135        
   undefined-test                                     2.9424+-0.1006            2.9231+-0.0910        
   unprofiled-licm                                   14.1277+-0.5036           13.7112+-0.2547          might be 1.0304x faster
   varargs-call                                      13.2443+-0.2085     ?     13.2668+-0.3749        ?
   varargs-construct-inline                          22.6368+-1.8568           21.9539+-0.7398          might be 1.0311x faster
   varargs-construct                                 21.1347+-1.2246           19.8487+-0.6085          might be 1.0648x faster
   varargs-inline                                     8.9231+-0.9917            8.5147+-0.2360          might be 1.0480x faster
   varargs-strict-mode                                9.3143+-0.6835            8.9110+-0.1678          might be 1.0453x faster
   varargs                                            8.7695+-0.0546     ?      8.8153+-0.1160        ?
   weird-inlining-const-prop                          2.5034+-0.2887            2.4186+-0.1737          might be 1.0351x faster

   <geometric>                                        7.8485+-0.0156            7.8385+-0.0353          might be 1.0013x faster

                                                        TipOfTree                   StrCat                                      
AsmBench:
   bigfib.cpp                                       455.1717+-5.1549          450.1677+-7.7476          might be 1.0111x faster
   cray.c                                           399.2916+-2.7610     ?    405.2760+-5.5102        ? might be 1.0150x slower
   dry.c                                            427.3124+-12.4429    ?    431.7579+-5.8084        ? might be 1.0104x slower
   FloatMM.c                                        700.4568+-35.4117         687.6922+-4.9069          might be 1.0186x faster
   gcc-loops.cpp                                   3447.8074+-45.0770        3440.1287+-17.6443       
   n-body.c                                         826.6895+-4.1895     ?    830.4058+-6.2975        ?
   Quicksort.c                                      412.2963+-16.3599         408.4893+-6.6752        
   stepanov_container.cpp                          3602.2525+-53.7644        3587.3544+-36.7372       
   Towers.c                                         234.0241+-1.7707     ?    234.9332+-2.9402        ?

   <geometric>                                      722.6572+-3.4368          721.8925+-2.0286          might be 1.0011x faster

                                                        TipOfTree                   StrCat                                      
CompressionBench:
   huffman                                           59.6905+-0.8487     ?     60.4018+-1.7954        ? might be 1.0119x slower
   arithmetic-simple                                274.2560+-3.0890          272.9439+-2.7159        
   arithmetic-precise                               243.4763+-1.5488     ?    243.8998+-2.2648        ?
   arithmetic-complex-precise                       244.7453+-1.8204     ?    245.0768+-3.6190        ?
   arithmetic-precise-order-0                       282.5098+-2.5430     ?    282.9064+-2.0032        ?
   arithmetic-precise-order-1                       304.4931+-2.0394     ?    305.3485+-3.4775        ?
   arithmetic-precise-order-2                       354.6418+-6.2511     ?    358.4465+-13.9828       ? might be 1.0107x slower
   arithmetic-simple-order-1                        327.8805+-2.9962     ?    331.8115+-6.3701        ? might be 1.0120x slower
   arithmetic-simple-order-2                        378.5660+-5.1875     ?    381.3957+-4.3562        ?
   lz-string                                        315.2341+-6.3704          311.4762+-5.7974          might be 1.0121x faster

   <geometric>                                      255.0249+-1.0439     ?    255.8277+-1.7300        ? might be 1.0031x slower

                                                        TipOfTree                   StrCat                                      
Geomean of preferred means:
   <scaled-result>                                   51.1475+-0.2239     ?     51.1608+-0.1229        ? might be 1.0003x slower
Comment 6 Michael Saboff 2015-08-22 09:44:04 PDT
Comment on attachment 259694 [details]
the patch

r=me
Comment 7 Saam Barati 2015-08-22 10:06:23 PDT
Comment on attachment 259694 [details]
the patch

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

r=me too, with comments
Maybe you can also add a test that ensures that you don't execute side effects twice for an out of memory error.

> Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1515
> +        bool goodToGo = true;

Nit: maybe call this variable "canConvertToMakeRope".

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:2086
> +        

You need an exception check here!

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2212
> +        

You need an exception check here!
Comment 8 Filip Pizlo 2015-08-22 11:11:36 PDT
(In reply to comment #7)
> Comment on attachment 259694 [details]
> the patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=259694&action=review
> 
> r=me too, with comments
> Maybe you can also add a test that ensures that you don't execute side
> effects twice for an out of memory error.

Done.

> 
> > Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1515
> > +        bool goodToGo = true;
> 
> Nit: maybe call this variable "canConvertToMakeRope".

OK.

> 
> > Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:2086
> > +        
> 
> You need an exception check here!
> 
> > Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2212
> > +        
> 
> You need an exception check here!

Damn, I forgot about those!  I'll add the checks and some tests.
Comment 9 Filip Pizlo 2015-08-22 11:36:23 PDT
Landed in http://trac.webkit.org/changeset/188825