Bug 145364

Summary: Array#reduce and reduceRight don't follow ToLength
Product: WebKit Reporter: Jordan Harband <ljharb>
Component: JavaScriptCoreAssignee: Jordan Harband <ljharb>
Status: RESOLVED FIXED    
Severity: Normal CC: buildbot, commit-queue, darin, fpizlo, rniwa, ysuzuki
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on: 144128    
Bug Blocks:    
Attachments:
Description Flags
Patch
none
Patch
none
Archive of layout-test-results from ews102 for mac-mavericks
none
Archive of layout-test-results from ews104 for mac-mavericks-wk2
none
Patch
none
Archive of layout-test-results from ews101 for mac-mavericks
none
Archive of layout-test-results from ews106 for mac-mavericks-wk2
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch none

Jordan Harband
Reported 2015-05-24 21:19:40 PDT
Per https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength, all array methods (specifically reduce and reduceRight) should take negative lengths and clamp them to 0, and lengths > 2^53 - 1, and clamp them to 2^53 - 1.
Attachments
Patch (6.16 KB, patch)
2015-05-24 21:21 PDT, Jordan Harband
no flags
Patch (12.61 KB, patch)
2015-05-24 21:53 PDT, Jordan Harband
no flags
Archive of layout-test-results from ews102 for mac-mavericks (557.79 KB, application/zip)
2015-05-24 22:24 PDT, Build Bot
no flags
Archive of layout-test-results from ews104 for mac-mavericks-wk2 (549.80 KB, application/zip)
2015-05-24 22:45 PDT, Build Bot
no flags
Patch (14.81 KB, patch)
2015-05-25 01:51 PDT, Jordan Harband
no flags
Archive of layout-test-results from ews101 for mac-mavericks (560.75 KB, application/zip)
2015-05-25 02:40 PDT, Build Bot
no flags
Archive of layout-test-results from ews106 for mac-mavericks-wk2 (589.70 KB, application/zip)
2015-05-25 02:47 PDT, Build Bot
no flags
Patch (20.39 KB, patch)
2015-05-25 03:07 PDT, Jordan Harband
no flags
Patch (17.86 KB, patch)
2015-05-27 21:49 PDT, Jordan Harband
no flags
Patch (17.92 KB, patch)
2015-05-28 23:21 PDT, Jordan Harband
no flags
Patch (17.92 KB, patch)
2015-05-29 00:01 PDT, Jordan Harband
no flags
Patch (22.14 KB, patch)
2015-05-30 10:57 PDT, Jordan Harband
no flags
Jordan Harband
Comment 1 2015-05-24 21:21:25 PDT
Jordan Harband
Comment 2 2015-05-24 21:53:00 PDT
Build Bot
Comment 3 2015-05-24 22:23:59 PDT
Comment on attachment 253672 [details] Patch Attachment 253672 [details] did not pass mac-ews (mac): Output: http://webkit-queues.appspot.com/results/4873211888009216 Number of test failures exceeded the failure limit.
Build Bot
Comment 4 2015-05-24 22:24:02 PDT
Created attachment 253673 [details] Archive of layout-test-results from ews102 for mac-mavericks The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews102 Port: mac-mavericks Platform: Mac OS X 10.9.5
Jordan Harband
Comment 5 2015-05-24 22:30:29 PDT
I'm not sure how to deal with the EWS issues. Any help would be appreciated.
Filip Pizlo
Comment 6 2015-05-24 22:38:52 PDT
(In reply to comment #5) > I'm not sure how to deal with the EWS issues. Any help would be appreciated. Your patch fails many JavaScript tests in the ietestcenter and sputnik test suites. You can run these using run-webkit-tests.
Jordan Harband
Comment 7 2015-05-24 22:40:22 PDT
(In reply to comment #6) > (In reply to comment #5) > > I'm not sure how to deal with the EWS issues. Any help would be appreciated. > > Your patch fails many JavaScript tests in the ietestcenter and sputnik test > suites. You can run these using run-webkit-tests. Yes, I do see the results - but I'm confused about where the line is between 64-bit ints in ToLength, and 32-but ints in arrays. There doesn't seem to be a single code path that will throw a RangeError when the length is > 32 bits, and it seems like most of the code hands around 32-bit integers as lengths instead, which won't allow for easy spec compliance.
Filip Pizlo
Comment 8 2015-05-24 22:43:02 PDT
(In reply to comment #7) > (In reply to comment #6) > > (In reply to comment #5) > > > I'm not sure how to deal with the EWS issues. Any help would be appreciated. > > > > Your patch fails many JavaScript tests in the ietestcenter and sputnik test > > suites. You can run these using run-webkit-tests. > > Yes, I do see the results - but I'm confused about where the line is between > 64-bit ints in ToLength, and 32-but ints in arrays. There doesn't seem to be > a single code path that will throw a RangeError when the length is > 32 > bits, and it seems like most of the code hands around 32-bit integers as > lengths instead, which won't allow for easy spec compliance. Well, a JSArray does still have a length that is defined as being a 31-bit unsigned integer. We're not going to change that anytime soon, and my understanding is that ES still defines array.length this way for primitive JS arrays. Making changes to allow array prototype methods to work with larger lengths needs to be very mindful of this.
Build Bot
Comment 9 2015-05-24 22:45:37 PDT
Comment on attachment 253672 [details] Patch Attachment 253672 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.appspot.com/results/6625480161624064 Number of test failures exceeded the failure limit.
Build Bot
Comment 10 2015-05-24 22:45:39 PDT
Created attachment 253674 [details] Archive of layout-test-results from ews104 for mac-mavericks-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews104 Port: mac-mavericks-wk2 Platform: Mac OS X 10.9.5
Jordan Harband
Comment 11 2015-05-24 22:50:19 PDT
(In reply to comment #8) > (In reply to comment #7) > > (In reply to comment #6) > > > (In reply to comment #5) > > > > I'm not sure how to deal with the EWS issues. Any help would be appreciated. > > > > > > Your patch fails many JavaScript tests in the ietestcenter and sputnik test > > > suites. You can run these using run-webkit-tests. > > > > Yes, I do see the results - but I'm confused about where the line is between > > 64-bit ints in ToLength, and 32-but ints in arrays. There doesn't seem to be > > a single code path that will throw a RangeError when the length is > 32 > > bits, and it seems like most of the code hands around 32-bit integers as > > lengths instead, which won't allow for easy spec compliance. > > Well, a JSArray does still have a length that is defined as being a 31-bit > unsigned integer. We're not going to change that anytime soon, and my > understanding is that ES still defines array.length this way for primitive > JS arrays. Making changes to allow array prototype methods to work with > larger lengths needs to be very mindful of this. OK - in this case I think this might be beyond my C knowledge, so I'll leave the bug open for someone else to take over.
Yusuke Suzuki
Comment 12 2015-05-25 00:12:23 PDT
(In reply to comment #11) > (In reply to comment #8) > > (In reply to comment #7) > > > (In reply to comment #6) > > > > (In reply to comment #5) > > > > > I'm not sure how to deal with the EWS issues. Any help would be appreciated. > > > > > > > > Your patch fails many JavaScript tests in the ietestcenter and sputnik test > > > > suites. You can run these using run-webkit-tests. > > > > > > Yes, I do see the results - but I'm confused about where the line is between > > > 64-bit ints in ToLength, and 32-but ints in arrays. There doesn't seem to be > > > a single code path that will throw a RangeError when the length is > 32 > > > bits, and it seems like most of the code hands around 32-bit integers as > > > lengths instead, which won't allow for easy spec compliance. > > > > Well, a JSArray does still have a length that is defined as being a 31-bit > > unsigned integer. We're not going to change that anytime soon, and my > > understanding is that ES still defines array.length this way for primitive > > JS arrays. Making changes to allow array prototype methods to work with > > larger lengths needs to be very mindful of this. > > OK - in this case I think this might be beyond my C knowledge, so I'll leave > the bug open for someone else to take over. I suggest that we can start it from the simplest point; implementing Array.prototype{reduce,reduceRight} in builtins JS (with using @ToLength). It gives the following benefits. 1. provide better inlining functionality for callbacks 2. become speculative type aware; even if length is allowed to use 2**53 - 1, the length is within uint32_t in practice Note: If we write it in C++, the best way I think is writing the 2 loops, one for array-index range [0, UINT32_MAX) and one for the out of range [UINT32_MAX, 2**53 - 1]. In array-index range, we can use indexed property access operations. But in the out of this range, we should use Identifier based property access operations.
Jordan Harband
Comment 13 2015-05-25 01:49:40 PDT
I decided to just rewrite the functions in JS. Patch incoming.
Jordan Harband
Comment 14 2015-05-25 01:51:25 PDT
Build Bot
Comment 15 2015-05-25 02:40:40 PDT
Comment on attachment 253676 [details] Patch Attachment 253676 [details] did not pass mac-ews (mac): Output: http://webkit-queues.appspot.com/results/6498864525737984 New failing tests: js/dom/array-prototype-properties.html
Build Bot
Comment 16 2015-05-25 02:40:44 PDT
Created attachment 253678 [details] Archive of layout-test-results from ews101 for mac-mavericks The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews101 Port: mac-mavericks Platform: Mac OS X 10.9.5
Build Bot
Comment 17 2015-05-25 02:47:26 PDT
Comment on attachment 253676 [details] Patch Attachment 253676 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.appspot.com/results/6184071340228608 New failing tests: js/dom/array-prototype-properties.html
Build Bot
Comment 18 2015-05-25 02:47:29 PDT
Created attachment 253679 [details] Archive of layout-test-results from ews106 for mac-mavericks-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-mavericks-wk2 Platform: Mac OS X 10.9.5
Jordan Harband
Comment 19 2015-05-25 03:07:31 PDT
Yusuke Suzuki
Comment 20 2015-05-26 04:25:44 PDT
Comment on attachment 253680 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=253680&action=review And I suggest taking the benchmarks results because the performance of `reduce` is relatively important. We can take the result by executing, Tools/Scripts/run-jsc-benchmarks Baseline:<path to baseline jsc> Patched:<path to jsc with this patch> > Source/JavaScriptCore/ChangeLog:31 > + Could you update the ChangeLog? This entry should be locate on the top of ChangeLog. `ToString`, `Push`, `Splice` is not related to this patch. > Source/JavaScriptCore/builtins/Array.prototype.js:44 > + if (arguments.length > 1) { unnecessary braces. > Source/JavaScriptCore/builtins/Array.prototype.js:47 > + while (k < length && !(k in array)) { k += 1; } Nits: don't use braces if it's one line. And while and body needs a line break. like, while (k < length && !(k in array)) k += 1; > Source/JavaScriptCore/builtins/Array.prototype.js:79 > + if (arguments.length > 1) { Ditto. > Source/JavaScriptCore/builtins/Array.prototype.js:82 > + while (k >= 0 && !(k in array)) { k -= 1; } Ditto. > LayoutTests/ChangeLog:24 > + Update the ChangeLog. > LayoutTests/js/dom/script-tests/array-prototype-properties.js:20 > +shouldThrow("Array.prototype.some.call(undefined, function () {})"); Why are these modified?
Jordan Harband
Comment 21 2015-05-27 21:49:02 PDT
Jordan Harband
Comment 22 2015-05-28 23:21:11 PDT
Jordan Harband
Comment 23 2015-05-28 23:54:22 PDT
Ran the benchmarks: Benchmark report for SunSpider, LongSpider, V8Spider, and JSRegress on Jordans-MacBook-Pro (MacBookPro11,3). VMs tested: "Baseline" at /Users/ljharb/Dropbox/git/WebKit.git/WebKitBuild/Release/jsc "Patched" at /Users/ljharb/Dropbox/git/WebKit.git/WebKitBuild/array_reduce_tolength/Release/jsc Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. Baseline Patched SunSpider: 3d-cube 4.4483+-0.3899 4.3946+-0.2109 might be 1.0122x faster 3d-morph 5.1868+-0.3576 ? 5.3343+-0.4639 ? might be 1.0284x slower 3d-raytrace 5.7186+-0.7682 5.2552+-0.3969 might be 1.0882x faster access-binary-trees 2.0643+-0.3178 ? 2.1298+-0.3983 ? might be 1.0317x slower access-fannkuch 5.3824+-0.6457 5.2739+-0.2778 might be 1.0206x faster access-nbody 2.5883+-0.1450 2.5565+-0.0990 might be 1.0124x faster access-nsieve 2.9964+-0.3241 2.9557+-0.2325 might be 1.0138x faster bitops-3bit-bits-in-byte 1.4949+-0.1579 1.4450+-0.0719 might be 1.0345x faster bitops-bits-in-byte 3.5685+-0.6309 3.4225+-0.7752 might be 1.0426x faster bitops-bitwise-and 1.9857+-0.1290 ? 2.0587+-0.1817 ? might be 1.0367x slower bitops-nsieve-bits 2.9736+-0.4570 2.8569+-0.1380 might be 1.0408x faster controlflow-recursive 2.2300+-0.8364 1.9053+-0.1085 might be 1.1704x faster crypto-aes 3.9025+-0.6497 3.7808+-0.2425 might be 1.0322x faster crypto-md5 2.4333+-0.1277 ? 2.8038+-0.9898 ? might be 1.1523x slower crypto-sha1 2.8663+-0.3901 2.5287+-0.5533 might be 1.1335x faster date-format-tofte 6.8653+-0.3710 6.8561+-0.6342 date-format-xparb 4.7546+-0.3557 ? 5.3268+-1.1815 ? might be 1.1203x slower math-cordic 2.7652+-0.1848 ? 2.8775+-0.2110 ? might be 1.0406x slower math-partial-sums 4.3969+-0.2361 ? 4.5852+-0.5020 ? might be 1.0428x slower math-spectral-norm 1.8138+-0.2293 1.7302+-0.1488 might be 1.0484x faster regexp-dna 6.0910+-0.2303 ? 6.2360+-0.1437 ? might be 1.0238x slower string-base64 4.0392+-0.0833 ? 4.3887+-0.4602 ? might be 1.0865x slower string-fasta 5.9215+-0.7147 ? 7.3121+-4.3438 ? might be 1.2348x slower string-tagcloud 7.8597+-0.1788 ? 7.8877+-0.1163 ? string-unpack-code 18.7525+-0.8782 ? 18.8445+-1.2668 ? string-validate-input 4.5685+-0.4544 4.3610+-0.2292 might be 1.0476x faster <arithmetic> 4.5257+-0.0793 ? 4.5811+-0.1740 ? might be 1.0122x slower Baseline Patched LongSpider: 3d-cube 791.9592+-8.7784 ? 797.8406+-31.3228 ? 3d-morph 1518.1199+-36.4964 1501.2363+-15.0437 might be 1.0112x faster 3d-raytrace 674.2609+-26.3730 672.6521+-57.8660 access-binary-trees 857.4426+-64.1390 823.7007+-26.2919 might be 1.0410x faster access-fannkuch 276.0776+-16.0742 ? 280.3853+-12.1282 ? might be 1.0156x slower access-nbody 566.2078+-35.5526 557.9118+-16.4075 might be 1.0149x faster access-nsieve 362.0334+-10.2146 ? 386.8407+-57.1546 ? might be 1.0685x slower bitops-3bit-bits-in-byte 43.5438+-2.4746 40.4972+-1.1120 might be 1.0752x faster bitops-bits-in-byte 81.4824+-6.6918 ? 86.0085+-6.0079 ? might be 1.0555x slower bitops-nsieve-bits 407.9085+-18.8825 ? 411.2543+-13.8296 ? controlflow-recursive 472.8563+-14.4254 455.5620+-16.8880 might be 1.0380x faster crypto-aes 591.2748+-35.0733 ? 602.7316+-58.0980 ? might be 1.0194x slower crypto-md5 532.2205+-50.9372 508.9590+-33.0362 might be 1.0457x faster crypto-sha1 587.5639+-20.8652 584.2053+-6.2175 date-format-tofte 540.3008+-31.5623 ? 543.4084+-38.7834 ? date-format-xparb 650.1973+-18.6158 ? 658.8145+-13.9406 ? might be 1.0133x slower hash-map 157.6827+-18.3652 150.8104+-7.6703 might be 1.0456x faster math-cordic 541.4682+-28.5625 506.7944+-8.2335 might be 1.0684x faster math-partial-sums 439.7106+-38.3390 434.5372+-33.3070 might be 1.0119x faster math-spectral-norm 567.4692+-22.4909 559.2260+-13.3673 might be 1.0147x faster string-base64 338.3475+-21.2178 ? 341.4330+-29.0532 ? string-fasta 397.9070+-54.6912 376.6193+-24.8705 might be 1.0565x faster string-tagcloud 182.3983+-5.4005 ? 187.3492+-6.5794 ? might be 1.0271x slower <geometric> 404.3514+-5.0314 400.9658+-6.4636 might be 1.0084x faster Baseline Patched V8Spider: crypto 60.5027+-7.9288 ? 61.9313+-7.1068 ? might be 1.0236x slower deltablue 95.2670+-4.8961 86.0731+-19.4149 might be 1.1068x faster earley-boyer 45.3255+-3.7627 42.4238+-0.8528 might be 1.0684x faster raytrace 35.9045+-3.1593 35.7477+-4.0434 regexp 73.8725+-6.0013 71.4680+-3.4743 might be 1.0336x faster richards 102.9329+-52.3560 91.1306+-4.2207 might be 1.1295x faster splay 37.8393+-9.3046 ? 38.2735+-11.1325 ? might be 1.0115x slower <geometric> 59.3248+-4.0714 57.0576+-1.4768 might be 1.0397x faster Baseline Patched JSRegress: abs-boolean 2.3695+-0.1108 ? 2.4168+-0.3178 ? might be 1.0200x slower adapt-to-double-divide 15.8965+-0.7259 ? 16.1577+-1.2011 ? might be 1.0164x slower aliased-arguments-getbyval 1.0753+-0.0576 ? 1.1064+-0.1477 ? might be 1.0290x slower allocate-big-object 2.4630+-0.3337 2.4240+-0.4916 might be 1.0161x faster arguments-named-and-reflective 10.6548+-0.7093 ? 10.8292+-0.3070 ? might be 1.0164x slower arguments-out-of-bounds 9.9397+-0.5611 ? 10.5007+-0.3801 ? might be 1.0564x slower arguments-strict-mode 9.7064+-0.9401 9.4311+-0.6639 might be 1.0292x faster arguments 8.3494+-0.4823 ? 8.4659+-0.5299 ? might be 1.0140x slower arity-mismatch-inlining 0.7962+-0.1084 0.7803+-0.0285 might be 1.0204x faster array-access-polymorphic-structure 5.8956+-0.8246 5.8215+-0.1216 might be 1.0127x faster array-nonarray-polymorhpic-access 25.9915+-1.4147 24.8688+-0.7135 might be 1.0451x faster array-prototype-every 76.7665+-5.8957 ? 78.3793+-4.7528 ? might be 1.0210x slower array-prototype-forEach 77.4977+-5.7676 ? 78.4979+-9.2988 ? might be 1.0129x slower array-prototype-map 86.3943+-5.4017 ? 87.2162+-7.6651 ? array-prototype-some 79.6071+-5.5569 76.2093+-3.2413 might be 1.0446x faster array-splice-contiguous 38.1938+-1.6394 ? 39.1806+-4.9231 ? might be 1.0258x slower array-with-double-add 3.3719+-0.3319 3.3458+-0.1342 array-with-double-increment 3.0108+-0.1806 ? 3.1063+-0.3904 ? might be 1.0317x slower array-with-double-mul-add 4.2459+-0.4253 4.1517+-0.4313 might be 1.0227x faster array-with-double-sum 3.1557+-0.1661 3.0139+-0.0775 might be 1.0470x faster array-with-int32-add-sub 5.9944+-0.3340 ? 6.4460+-1.2344 ? might be 1.0753x slower array-with-int32-or-double-sum 3.3032+-0.3848 ? 3.3240+-0.4694 ? ArrayBuffer-DataView-alloc-large-long-lived 27.7297+-2.3958 27.3462+-1.5204 might be 1.0140x faster ArrayBuffer-DataView-alloc-long-lived 12.4580+-0.9686 12.1564+-0.5959 might be 1.0248x faster ArrayBuffer-Int32Array-byteOffset 3.5623+-0.0514 ? 3.5640+-0.1717 ? ArrayBuffer-Int8Array-alloc-large-long-lived 27.1994+-0.7915 ? 27.7824+-0.9831 ? might be 1.0214x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 20.1410+-1.0381 20.1205+-0.7028 ArrayBuffer-Int8Array-alloc-long-lived 11.7102+-0.4120 ? 12.1937+-1.4833 ? might be 1.0413x slower ArrayBuffer-Int8Array-alloc 9.7155+-0.2622 ? 9.7408+-0.3339 ? asmjs_bool_bug 6.8787+-0.6163 6.8253+-0.4575 assign-custom-setter-polymorphic 2.4736+-0.0880 ? 2.6258+-0.2009 ? might be 1.0615x slower assign-custom-setter 3.4190+-0.1926 ? 3.4369+-0.2772 ? basic-set 8.4774+-0.5671 ? 8.8167+-1.7513 ? might be 1.0400x slower big-int-mul 3.6068+-0.8468 3.4397+-0.4948 might be 1.0486x faster boolean-test 2.7460+-0.1503 ? 2.7725+-0.2089 ? branch-fold 3.7387+-0.2349 3.4285+-0.2448 might be 1.0905x faster branch-on-string-as-boolean 15.1669+-1.1460 14.8550+-0.3936 might be 1.0210x faster by-val-generic 7.0283+-0.1729 ? 7.4342+-1.1160 ? might be 1.0577x slower call-spread-apply 28.8990+-3.0332 27.4525+-1.1142 might be 1.0527x faster call-spread-call 22.4185+-0.9919 ? 23.2035+-1.5537 ? might be 1.0350x slower captured-assignments 0.4023+-0.0719 0.3881+-0.0414 might be 1.0368x faster cast-int-to-double 4.8967+-0.4760 4.6959+-0.1334 might be 1.0427x faster cell-argument 6.3444+-0.9131 6.0786+-0.3078 might be 1.0437x faster cfg-simplify 2.7733+-0.2629 2.6744+-0.0674 might be 1.0370x faster chain-getter-access 8.1580+-1.2432 ? 8.1961+-0.6263 ? cmpeq-obj-to-obj-other 11.8594+-2.8811 11.6851+-1.0970 might be 1.0149x faster constant-test 4.4613+-0.2353 ? 4.5366+-0.3755 ? might be 1.0169x slower create-lots-of-functions 9.5157+-0.8162 ? 9.5269+-0.7010 ? cse-new-array-buffer 2.3254+-0.3940 2.0503+-0.1136 might be 1.1342x faster cse-new-array 2.4818+-0.5253 2.2864+-0.2564 might be 1.0854x faster DataView-custom-properties 33.7694+-3.2158 32.6441+-2.7496 might be 1.0345x faster deconstructing-parameters-overridden-by-function 0.4332+-0.0270 0.4102+-0.0163 might be 1.0559x faster delay-tear-off-arguments-strictmode 12.9276+-1.3120 12.5315+-0.1797 might be 1.0316x faster deltablue-varargs 168.9684+-4.0492 ? 174.2148+-19.6760 ? might be 1.0310x slower destructuring-arguments 13.4781+-0.3938 13.3365+-0.5443 might be 1.0106x faster destructuring-swap 4.7420+-0.2993 4.5391+-0.2610 might be 1.0447x faster direct-arguments-getbyval 1.1314+-0.1277 ? 1.1470+-0.0981 ? might be 1.0138x slower div-boolean-double 5.1896+-0.3067 5.1713+-0.3733 div-boolean 8.3802+-0.4523 8.0914+-0.4336 might be 1.0357x faster double-get-by-val-out-of-bounds 4.3503+-0.5601 3.8774+-0.3459 might be 1.1219x faster double-pollution-getbyval 8.6006+-0.4064 8.4878+-0.5560 might be 1.0133x faster double-pollution-putbyoffset 3.9442+-0.2942 ? 4.1605+-0.9936 ? might be 1.0548x slower double-to-int32-typed-array-no-inline 2.3030+-0.3262 2.0930+-0.1429 might be 1.1003x faster double-to-int32-typed-array 1.8898+-0.3807 ? 2.1685+-0.3473 ? might be 1.1474x slower double-to-uint32-typed-array-no-inline 2.3745+-0.3104 2.2377+-0.2896 might be 1.0611x faster double-to-uint32-typed-array 1.8792+-0.2755 1.8499+-0.1344 might be 1.0158x faster elidable-new-object-dag 34.5931+-2.9004 33.9970+-1.2568 might be 1.0175x faster elidable-new-object-roflcopter 35.5268+-2.0344 ? 35.8919+-4.4901 ? might be 1.0103x slower elidable-new-object-then-call 32.4336+-1.9151 30.5245+-2.4749 might be 1.0625x faster elidable-new-object-tree 36.1328+-2.4835 ? 36.3362+-1.9740 ? empty-string-plus-int 4.9308+-0.3404 ? 5.2444+-1.5880 ? might be 1.0636x slower emscripten-cube2hash 27.0504+-1.1611 ? 27.0820+-0.1137 ? exit-length-on-plain-object 12.3332+-1.3636 11.9197+-0.2548 might be 1.0347x faster external-arguments-getbyval 1.3783+-0.5841 1.1225+-0.0966 might be 1.2279x faster external-arguments-putbyval 2.1706+-0.0557 ? 2.3966+-0.6990 ? might be 1.1041x slower fixed-typed-array-storage-var-index 1.2451+-0.1923 1.2168+-0.1227 might be 1.0233x faster fixed-typed-array-storage 0.8627+-0.0638 ? 0.8992+-0.1411 ? might be 1.0423x slower Float32Array-matrix-mult 3.8755+-0.2988 3.8515+-0.2840 Float32Array-to-Float64Array-set 45.8940+-1.4457 ? 47.8378+-1.4846 ? might be 1.0424x slower Float64Array-alloc-long-lived 57.2079+-1.7363 ? 59.2123+-2.8856 ? might be 1.0350x slower Float64Array-to-Int16Array-set 58.4658+-6.3768 ? 61.1043+-12.0971 ? might be 1.0451x slower fold-double-to-int 12.8510+-1.1543 12.6807+-1.4946 might be 1.0134x faster fold-get-by-id-to-multi-get-by-offset-rare-int 10.3516+-1.5488 10.1146+-0.4532 might be 1.0234x faster fold-get-by-id-to-multi-get-by-offset 8.7523+-1.3072 8.1662+-0.5916 might be 1.0718x faster fold-multi-get-by-offset-to-get-by-offset 8.0105+-2.2048 ? 8.2407+-1.3251 ? might be 1.0287x slower fold-multi-get-by-offset-to-poly-get-by-offset 8.3550+-1.5711 8.2052+-1.9376 might be 1.0183x faster fold-multi-put-by-offset-to-poly-put-by-offset 7.3162+-1.1468 ? 7.7231+-1.8638 ? might be 1.0556x slower fold-multi-put-by-offset-to-put-by-offset 5.4037+-1.0727 5.0341+-1.2283 might be 1.0734x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.9796+-1.8433 8.5618+-1.2740 might be 1.1656x faster fold-put-by-id-to-multi-put-by-offset 8.8778+-2.7981 8.5466+-0.4245 might be 1.0388x faster fold-put-structure 5.1379+-0.9308 ? 6.1991+-3.0297 ? might be 1.2065x slower for-of-iterate-array-entries 4.0233+-0.2326 ? 4.0578+-0.2185 ? for-of-iterate-array-keys 3.2162+-0.1731 ? 3.4299+-0.2569 ? might be 1.0664x slower for-of-iterate-array-values 3.0585+-0.1991 ? 3.7072+-1.3658 ? might be 1.2121x slower fround 19.6340+-2.5860 18.1650+-2.0258 might be 1.0809x faster ftl-library-inlining-dataview 65.5935+-20.8073 59.9476+-3.0414 might be 1.0942x faster ftl-library-inlining 108.3499+-4.5057 ? 112.5010+-9.6823 ? might be 1.0383x slower function-dot-apply 1.9375+-0.1334 ? 2.0457+-0.3986 ? might be 1.0559x slower function-test 2.6998+-0.3892 2.5632+-0.0918 might be 1.0533x faster function-with-eval 88.8690+-1.3509 ? 91.9040+-4.8011 ? might be 1.0342x slower gcse-poly-get-less-obvious 14.6398+-1.4462 ? 14.7578+-2.1173 ? gcse-poly-get 14.1893+-0.8567 ? 15.0439+-2.2246 ? might be 1.0602x slower gcse 3.8778+-0.5873 3.8110+-0.1893 might be 1.0175x faster get-by-id-bimorphic-check-structure-elimination-simple 2.5084+-0.1256 ? 2.6175+-0.2442 ? might be 1.0435x slower get-by-id-bimorphic-check-structure-elimination 5.9938+-1.2627 5.9424+-1.0974 get-by-id-chain-from-try-block 7.0258+-2.7195 6.4331+-0.3553 might be 1.0921x faster get-by-id-check-structure-elimination 4.2908+-0.2032 ? 4.2919+-0.3558 ? get-by-id-proto-or-self 14.8965+-3.0421 14.3503+-0.7807 might be 1.0381x faster get-by-id-quadmorphic-check-structure-elimination-simple 2.8240+-0.3147 ? 2.8532+-0.2998 ? might be 1.0103x slower get-by-id-self-or-proto 14.3041+-1.0109 13.6468+-1.0165 might be 1.0482x faster get-by-val-out-of-bounds 4.0852+-0.4608 3.9392+-0.9759 might be 1.0371x faster get_callee_monomorphic 2.8527+-0.4140 2.5515+-0.1801 might be 1.1181x faster get_callee_polymorphic 3.2767+-0.2561 3.2379+-0.3051 might be 1.0120x faster getter-no-activation 4.8008+-0.7797 ? 4.8658+-0.3747 ? might be 1.0135x slower getter-richards 135.0325+-47.4162 ? 139.4269+-18.9332 ? might be 1.0325x slower getter 5.4348+-0.8156 5.1214+-0.1629 might be 1.0612x faster global-var-const-infer-fire-from-opt 0.8785+-0.2049 0.8205+-0.1053 might be 1.0707x faster global-var-const-infer 0.6636+-0.0488 0.6585+-0.0452 HashMap-put-get-iterate-keys 30.1801+-3.3792 ? 31.7158+-2.3760 ? might be 1.0509x slower HashMap-put-get-iterate 37.6675+-3.8742 30.6368+-3.5876 might be 1.2295x faster HashMap-string-put-get-iterate 28.0742+-1.8826 ? 30.3336+-10.5763 ? might be 1.0805x slower hoist-make-rope 7.8230+-1.0497 7.5375+-1.1372 might be 1.0379x faster hoist-poly-check-structure-effectful-loop 4.1992+-0.2837 ? 4.4008+-0.7283 ? might be 1.0480x slower hoist-poly-check-structure 3.1677+-0.2623 ? 3.2142+-0.3068 ? might be 1.0147x slower imul-double-only 7.3707+-2.0778 6.6487+-0.3092 might be 1.1086x faster imul-int-only 7.5684+-0.4807 ? 7.6060+-0.3510 ? imul-mixed 7.2322+-1.8498 6.2773+-0.5283 might be 1.1521x faster in-four-cases 18.1603+-2.7532 17.0410+-1.7230 might be 1.0657x faster in-one-case-false 10.6640+-4.3924 10.0955+-0.5545 might be 1.0563x faster in-one-case-true 9.6876+-1.0359 ? 10.0333+-1.0986 ? might be 1.0357x slower in-two-cases 10.1500+-1.5329 ? 10.8674+-1.6151 ? might be 1.0707x slower indexed-properties-in-objects 2.7994+-0.3404 2.6873+-0.1630 might be 1.0417x faster infer-closure-const-then-mov-no-inline 3.4572+-0.9857 3.2502+-0.7451 might be 1.0637x faster infer-closure-const-then-mov 16.6777+-0.8082 ? 16.7838+-2.1792 ? infer-closure-const-then-put-to-scope-no-inline 11.0132+-0.9281 ? 11.2582+-0.8551 ? might be 1.0222x slower infer-closure-const-then-put-to-scope 20.8373+-0.6453 ? 20.8978+-0.5672 ? infer-closure-const-then-reenter-no-inline 51.6437+-6.1553 50.8140+-2.2787 might be 1.0163x faster infer-closure-const-then-reenter 21.3495+-1.4478 ? 21.8472+-0.3434 ? might be 1.0233x slower infer-constant-global-property 3.5070+-0.3936 3.3110+-0.0923 might be 1.0592x faster infer-constant-property 2.5522+-0.0617 2.5290+-0.1124 infer-one-time-closure-ten-vars 8.2551+-0.5071 ? 8.2813+-0.6010 ? infer-one-time-closure-two-vars 7.9333+-0.3643 ? 8.2957+-0.9346 ? might be 1.0457x slower infer-one-time-closure 8.4764+-1.1984 7.3842+-0.3544 might be 1.1479x faster infer-one-time-deep-closure 12.6865+-0.9147 12.6055+-0.5798 inline-arguments-access 3.8227+-0.5052 ? 3.8990+-0.6388 ? might be 1.0200x slower inline-arguments-aliased-access 4.1420+-1.2134 4.0429+-1.6307 might be 1.0245x faster inline-arguments-local-escape 3.6566+-0.1824 3.6497+-0.1739 inline-get-scoped-var 4.5121+-0.0496 4.4742+-0.1647 inlined-put-by-id-transition 9.6885+-0.2102 ? 9.7633+-1.8153 ? int-or-other-abs-then-get-by-val 5.0430+-1.3484 4.9500+-1.1824 might be 1.0188x faster int-or-other-abs-zero-then-get-by-val 15.3982+-0.5662 ? 15.5982+-1.3093 ? might be 1.0130x slower int-or-other-add-then-get-by-val 4.4352+-0.7669 ? 4.6356+-1.5089 ? might be 1.0452x slower int-or-other-add 5.0510+-0.2751 4.9635+-0.5993 might be 1.0176x faster int-or-other-div-then-get-by-val 4.2209+-0.8213 3.8517+-0.4808 might be 1.0959x faster int-or-other-max-then-get-by-val 4.1969+-0.7549 3.9058+-0.1869 might be 1.0745x faster int-or-other-min-then-get-by-val 4.4015+-0.4994 ? 4.4684+-1.1987 ? might be 1.0152x slower int-or-other-mod-then-get-by-val 3.9026+-0.3331 3.7350+-0.1674 might be 1.0449x faster int-or-other-mul-then-get-by-val 4.0888+-1.1085 3.6483+-0.3202 might be 1.1208x faster int-or-other-neg-then-get-by-val 5.2860+-1.6419 4.6763+-0.6051 might be 1.1304x faster int-or-other-neg-zero-then-get-by-val 15.0459+-0.1386 ? 15.6116+-1.6225 ? might be 1.0376x slower int-or-other-sub-then-get-by-val 4.3448+-1.1041 4.3166+-0.6785 int-or-other-sub 3.6783+-0.3940 3.3594+-0.2983 might be 1.0949x faster int-overflow-local 4.0659+-0.5792 ? 4.2675+-1.0094 ? might be 1.0496x slower Int16Array-alloc-long-lived 41.1531+-1.4427 ? 41.9167+-4.0880 ? might be 1.0186x slower Int16Array-bubble-sort-with-byteLength 17.0885+-0.9501 17.0393+-1.9781 Int16Array-bubble-sort 16.6284+-1.0959 ? 17.1880+-2.2773 ? might be 1.0337x slower Int16Array-load-int-mul 1.4896+-0.0856 ^ 1.3340+-0.0514 ^ definitely 1.1166x faster Int16Array-to-Int32Array-set 43.6108+-3.6190 ? 48.3352+-6.6706 ? might be 1.1083x slower Int32Array-alloc-large 12.7289+-0.8413 12.1660+-0.7589 might be 1.0463x faster Int32Array-alloc-long-lived 46.8256+-2.8789 ? 48.2297+-11.9107 ? might be 1.0300x slower Int32Array-alloc 2.6823+-0.0752 ? 2.7292+-0.2270 ? might be 1.0175x slower Int32Array-Int8Array-view-alloc 6.0527+-0.6561 5.8616+-0.2798 might be 1.0326x faster int52-spill 5.6191+-0.8015 ? 5.7007+-1.4329 ? might be 1.0145x slower Int8Array-alloc-long-lived 36.8548+-1.7330 ? 37.4250+-2.4353 ? might be 1.0155x slower Int8Array-load-with-byteLength 3.3834+-0.1522 3.3697+-0.3494 Int8Array-load 3.3595+-0.1106 3.2895+-0.1512 might be 1.0213x faster integer-divide 10.5037+-1.1609 10.3663+-0.9017 might be 1.0133x faster integer-modulo 1.6458+-0.1447 ? 1.7138+-0.3717 ? might be 1.0414x slower is-boolean-fold-tricky 3.6641+-0.0611 ? 3.6824+-0.2119 ? is-boolean-fold 2.7497+-0.6787 ? 2.8038+-0.3364 ? might be 1.0197x slower is-function-fold-tricky-internal-function 11.7934+-5.7839 10.1153+-0.7747 might be 1.1659x faster is-function-fold-tricky 4.0264+-0.4205 3.9648+-0.2324 might be 1.0155x faster is-function-fold 2.7062+-0.2756 2.5615+-0.0896 might be 1.0565x faster is-number-fold-tricky 4.0970+-0.2641 3.9232+-0.2552 might be 1.0443x faster is-number-fold 2.5599+-0.1473 2.5566+-0.1999 is-object-or-null-fold-functions 2.6967+-0.2990 ? 2.7919+-0.3784 ? might be 1.0353x slower is-object-or-null-fold-less-tricky 4.0735+-0.2824 4.0708+-0.2583 is-object-or-null-fold-tricky 4.9745+-0.2846 ? 5.0958+-0.3008 ? might be 1.0244x slower is-object-or-null-fold 2.7706+-0.4414 2.6283+-0.1903 might be 1.0541x faster is-object-or-null-trickier-function 3.9889+-0.1711 3.9429+-0.0249 might be 1.0117x faster is-object-or-null-trickier-internal-function 11.9434+-2.9886 10.3864+-0.5129 might be 1.1499x faster is-object-or-null-tricky-function 4.2901+-0.7053 4.1201+-0.4750 might be 1.0413x faster is-object-or-null-tricky-internal-function 7.6227+-0.5767 ? 8.2587+-0.6176 ? might be 1.0834x slower is-string-fold-tricky 3.9893+-0.1135 ? 4.0984+-0.1143 ? might be 1.0274x slower is-string-fold 2.6440+-0.3079 ? 2.6870+-0.2582 ? might be 1.0162x slower is-undefined-fold-tricky 3.2582+-0.1206 ? 3.2977+-0.2703 ? might be 1.0121x slower is-undefined-fold 2.5103+-0.0729 ? 2.5187+-0.0706 ? large-int-captured 3.8184+-0.1773 ? 4.1090+-0.2440 ? might be 1.0761x slower large-int-neg 14.5290+-1.7962 14.2131+-0.5619 might be 1.0222x faster large-int 13.7422+-1.6796 13.4816+-0.4649 might be 1.0193x faster load-varargs-elimination 20.6490+-0.3611 20.3343+-0.5701 might be 1.0155x faster logical-not 4.2200+-0.4323 ? 4.5055+-1.1036 ? might be 1.0677x slower lots-of-fields 9.8375+-1.8179 9.6052+-0.8894 might be 1.0242x faster make-indexed-storage 2.7860+-0.1846 2.7386+-0.7804 might be 1.0173x faster make-rope-cse 3.9994+-0.7209 3.7510+-0.1423 might be 1.0662x faster marsaglia-larger-ints 34.9540+-3.2527 34.6703+-2.5523 marsaglia-osr-entry 21.5202+-3.4273 20.7021+-0.6566 might be 1.0395x faster max-boolean 2.5264+-0.2422 ? 2.5749+-0.2389 ? might be 1.0192x slower method-on-number 15.1404+-0.2782 ? 16.0789+-1.6594 ? might be 1.0620x slower min-boolean 2.4885+-0.2324 ? 2.5237+-0.1437 ? might be 1.0142x slower minus-boolean-double 2.9943+-0.1987 ? 3.1832+-0.2285 ? might be 1.0631x slower minus-boolean 2.2540+-0.2275 ? 2.2806+-0.1091 ? might be 1.0118x slower misc-strict-eq 38.0974+-18.2511 30.8953+-2.0148 might be 1.2331x faster mod-boolean-double 11.0627+-0.4379 ? 11.1008+-0.3753 ? mod-boolean 8.1687+-0.3270 ? 8.5317+-0.5701 ? might be 1.0444x slower mul-boolean-double 3.5267+-0.0413 3.4758+-0.2129 might be 1.0147x faster mul-boolean 2.7213+-0.1506 ? 2.8338+-0.2041 ? might be 1.0413x slower neg-boolean 2.9782+-0.0373 ? 2.9961+-0.0815 ? negative-zero-divide 0.3102+-0.0369 ? 0.3242+-0.0338 ? might be 1.0451x slower negative-zero-modulo 0.3213+-0.0384 0.2872+-0.0202 might be 1.1188x faster negative-zero-negate 0.2890+-0.0138 ? 0.3022+-0.0481 ? might be 1.0458x slower nested-function-parsing 31.4500+-0.1783 ? 35.1543+-8.5246 ? might be 1.1178x slower new-array-buffer-dead 88.6119+-6.1280 ? 88.9470+-6.2004 ? new-array-buffer-push 5.8185+-0.6405 ? 5.8599+-0.3422 ? new-array-dead 13.4366+-1.3121 12.9837+-0.9961 might be 1.0349x faster new-array-push 3.4358+-0.0604 ? 3.5054+-0.8298 ? might be 1.0203x slower no-inline-constructor 32.7170+-2.3188 31.5552+-0.8994 might be 1.0368x faster number-test 2.9140+-0.3382 2.8523+-0.2501 might be 1.0216x faster object-closure-call 4.8270+-0.7359 ? 4.9311+-0.4157 ? might be 1.0216x slower object-test 2.5480+-0.1447 ? 2.6066+-0.0250 ? might be 1.0230x slower obvious-sink-pathology-taken 103.1457+-3.6842 ? 103.7552+-2.0396 ? obvious-sink-pathology 96.9351+-2.6696 96.3171+-1.8857 obviously-elidable-new-object 28.9344+-1.8794 28.3513+-4.8309 might be 1.0206x faster plus-boolean-arith 2.2249+-0.0975 ! 2.4466+-0.0936 ! definitely 1.0996x slower plus-boolean-double 3.0528+-0.2608 ? 3.1222+-0.2428 ? might be 1.0227x slower plus-boolean 2.3822+-0.1566 ? 2.4418+-0.1907 ? might be 1.0250x slower poly-chain-access-different-prototypes-simple 2.6200+-0.3536 ? 2.6542+-0.2135 ? might be 1.0130x slower poly-chain-access-different-prototypes 2.8845+-0.9029 2.4692+-0.3204 might be 1.1682x faster poly-chain-access-simpler 2.6655+-0.2225 ? 2.8080+-0.4986 ? might be 1.0534x slower poly-chain-access 2.4905+-0.1987 ? 2.7688+-0.5404 ? might be 1.1118x slower poly-stricteq 46.2322+-0.8996 ? 48.6822+-3.5406 ? might be 1.0530x slower polymorphic-array-call 1.2773+-0.1568 1.1695+-0.0697 might be 1.0922x faster polymorphic-get-by-id 2.6872+-0.1226 ? 2.7097+-0.2006 ? polymorphic-put-by-id 25.2003+-0.3214 ? 25.4345+-0.6040 ? polymorphic-structure 12.8807+-0.7348 ? 13.0163+-0.3998 ? might be 1.0105x slower polyvariant-monomorphic-get-by-id 7.1276+-1.7587 6.8098+-1.1429 might be 1.0467x faster proto-getter-access 8.0466+-0.4762 ? 8.3938+-1.1585 ? might be 1.0431x slower put-by-id-replace-and-transition 7.7839+-1.4500 7.5931+-0.6025 might be 1.0251x faster put-by-id-slightly-polymorphic 2.6842+-0.4235 2.5174+-0.1306 might be 1.0663x faster put-by-id 9.9345+-0.8527 ? 10.0226+-1.7868 ? put-by-val-direct 0.2990+-0.0161 ? 0.3090+-0.0614 ? might be 1.0337x slower put-by-val-large-index-blank-indexing-type 5.1891+-0.1072 5.0131+-0.2461 might be 1.0351x faster put-by-val-machine-int 2.2857+-0.3242 2.2700+-0.1883 rare-osr-exit-on-local 15.1652+-1.7859 ? 15.9540+-1.9860 ? might be 1.0520x slower register-pressure-from-osr 16.8102+-2.3811 ? 16.8365+-0.5473 ? setter 5.7974+-1.0157 ? 6.0466+-0.4370 ? might be 1.0430x slower simple-activation-demo 24.3130+-1.1583 ? 24.6669+-0.7877 ? might be 1.0146x slower simple-getter-access 10.3850+-0.6314 10.1459+-0.3928 might be 1.0236x faster simple-poly-call-nested 8.8340+-0.8594 8.3900+-0.4054 might be 1.0529x faster simple-poly-call 1.2533+-0.1151 1.1861+-0.0542 might be 1.0567x faster sin-boolean 17.8589+-0.4973 17.3697+-1.0089 might be 1.0282x faster singleton-scope 59.5529+-4.8736 58.0301+-1.0322 might be 1.0262x faster sink-function 9.4247+-0.4042 ? 9.6729+-1.3286 ? might be 1.0263x slower sink-huge-activation 17.7903+-1.7462 15.7977+-0.9924 might be 1.1261x faster sinkable-new-object-dag 56.1281+-4.2310 ? 57.4968+-5.1217 ? might be 1.0244x slower sinkable-new-object-taken 43.7102+-3.2807 ? 44.1469+-3.0249 ? sinkable-new-object 28.7712+-3.1857 ? 29.5045+-0.6482 ? might be 1.0255x slower slow-array-profile-convergence 2.4437+-0.2614 ? 2.5587+-0.0775 ? might be 1.0471x slower slow-convergence 2.3522+-0.0854 ? 2.4958+-0.2624 ? might be 1.0610x slower slow-ternaries 18.2141+-1.4928 18.1375+-1.7024 sorting-benchmark 18.0172+-1.4326 17.6429+-0.4861 might be 1.0212x faster sparse-conditional 1.1039+-0.0554 ? 1.1941+-0.2476 ? might be 1.0817x slower splice-to-remove 11.8989+-0.5586 ? 12.2442+-0.3051 ? might be 1.0290x slower string-char-code-at 14.0967+-0.4399 ? 14.6918+-2.6883 ? might be 1.0422x slower string-concat-object 2.2388+-0.4343 2.2175+-0.3132 string-concat-pair-object 2.1353+-0.0848 ? 2.1555+-0.4185 ? string-concat-pair-simple 9.1825+-0.7683 ? 9.2115+-0.7593 ? string-concat-simple 9.2116+-1.1821 ? 9.3035+-0.4609 ? string-cons-repeat 6.6797+-0.4518 6.3618+-0.1584 might be 1.0500x faster string-cons-tower 6.8366+-0.3624 ? 6.8600+-0.5261 ? string-equality 19.7943+-4.3245 17.1720+-0.9496 might be 1.1527x faster string-get-by-val-big-char 6.9113+-0.7903 6.8423+-1.0166 might be 1.0101x faster string-get-by-val-out-of-bounds-insane 3.3632+-0.3231 3.3322+-0.4306 string-get-by-val-out-of-bounds 4.0046+-0.3663 ? 4.0200+-0.4001 ? string-get-by-val 2.7360+-0.0194 ? 3.0287+-1.1210 ? might be 1.1070x slower string-hash 1.9393+-0.3238 1.8900+-0.2144 might be 1.0261x faster string-long-ident-equality 14.0615+-1.3780 13.9047+-0.3378 might be 1.0113x faster string-out-of-bounds 10.0605+-0.5409 ? 10.0999+-0.6334 ? string-repeat-arith 28.4070+-4.6976 26.5959+-1.1468 might be 1.0681x faster string-sub 53.0390+-0.8340 52.8806+-3.9247 string-test 2.6434+-0.0343 ? 2.7994+-0.2331 ? might be 1.0590x slower string-var-equality 25.6909+-2.1330 ? 26.4015+-4.5916 ? might be 1.0277x slower structure-hoist-over-transitions 2.3082+-0.0396 ? 2.3344+-0.1542 ? might be 1.0113x slower substring-concat-weird 33.5953+-1.8156 ? 34.0253+-1.0464 ? might be 1.0128x slower substring-concat 37.1050+-1.3529 ? 38.9208+-3.3457 ? might be 1.0489x slower substring 41.0107+-1.3291 ? 41.2437+-0.7189 ? switch-char-constant 2.5257+-0.1254 ? 2.5321+-0.0993 ? switch-char 6.2152+-1.1412 5.2186+-0.6263 might be 1.1910x faster switch-constant 7.5717+-1.1959 7.5370+-0.1533 switch-string-basic-big-var 16.9940+-2.4283 16.9622+-2.5203 switch-string-basic-big 14.8027+-1.2009 13.8950+-0.5265 might be 1.0653x faster switch-string-basic-var 12.9443+-0.3617 ? 14.7078+-4.5090 ? might be 1.1362x slower switch-string-basic 13.5079+-2.1556 12.3632+-0.7100 might be 1.0926x faster switch-string-big-length-tower-var 17.2377+-0.6508 ? 17.5198+-0.5903 ? might be 1.0164x slower switch-string-length-tower-var 13.2106+-0.8525 ? 13.6190+-1.3559 ? might be 1.0309x slower switch-string-length-tower 12.1673+-2.8685 11.4551+-0.6497 might be 1.0622x faster switch-string-short 12.1490+-1.6562 11.2523+-0.2821 might be 1.0797x faster switch 11.3291+-0.7604 ? 12.4792+-2.9868 ? might be 1.1015x slower tear-off-arguments-simple 3.1520+-0.3476 3.0330+-0.2458 might be 1.0392x faster tear-off-arguments 4.1427+-0.4475 ? 4.6090+-0.8627 ? might be 1.1126x slower temporal-structure 12.4531+-2.0520 11.5954+-0.4841 might be 1.0740x faster to-int32-boolean 12.8026+-0.2932 ? 13.5478+-2.7636 ? might be 1.0582x slower try-catch-get-by-val-cloned-arguments 13.5313+-0.9898 ? 13.7702+-1.0602 ? might be 1.0177x slower try-catch-get-by-val-direct-arguments 6.0012+-0.6779 5.9724+-0.6138 try-catch-get-by-val-scoped-arguments 6.9931+-0.5837 6.9896+-0.6114 typed-array-get-set-by-val-profiling 29.2203+-1.5149 ? 30.9341+-2.7890 ? might be 1.0587x slower undefined-property-access 227.7643+-21.4784 ? 228.2510+-10.9044 ? undefined-test 2.8263+-0.1202 ? 2.9805+-0.4975 ? might be 1.0546x slower unprofiled-licm 14.0546+-0.6819 ? 14.5871+-1.6930 ? might be 1.0379x slower varargs-call 13.0043+-0.6971 ? 14.8909+-3.5842 ? might be 1.1451x slower varargs-construct-inline 21.2296+-0.7540 ? 24.1105+-7.3932 ? might be 1.1357x slower varargs-construct 20.3253+-1.9162 ? 20.5261+-1.1149 ? varargs-inline 8.4977+-0.9564 ? 8.5475+-0.5541 ? varargs-strict-mode 8.9849+-0.2622 ? 9.6145+-2.2145 ? might be 1.0701x slower varargs 9.0571+-0.8854 8.8757+-0.3692 might be 1.0204x faster weird-inlining-const-prop 2.0049+-0.0767 ? 2.0348+-0.2453 ? might be 1.0149x slower <geometric> 7.4012+-0.0544 7.3685+-0.0480 might be 1.0044x faster Baseline Patched Geomean of preferred means: <scaled-result> 29.9350+-0.4987 29.6418+-0.1473 might be 1.0099x faster
Yusuke Suzuki
Comment 24 2015-05-28 23:59:35 PDT
Comment on attachment 253895 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=253895&action=review Just nits. > Source/JavaScriptCore/builtins/Array.prototype.js:26 > +function reduce(callback /*, initialValue */) { Please break this line before `{`. > Source/JavaScriptCore/builtins/Array.prototype.js:62 > +function reduceRight(callback /*, initialValue */) { Ditto.
Jordan Harband
Comment 25 2015-05-29 00:01:35 PDT
Jordan Harband
Comment 26 2015-05-29 22:40:23 PDT
ping for rereview
Yusuke Suzuki
Comment 27 2015-05-29 23:19:17 PDT
Thanks for taking the performance results. I git-grepped the code in Kraken and Octane, and I was surprised that there's no performance tests about Array#reduce / Array#reduceRight in them... So I've added a test about Array#reduce in my working copy; copying js/regress/array-prototype-forEach test files. Replace forEach(...) => reduce(..., 0). And I've taken the performance results about this js regress tests. Seeing the results about array-prototype-reduce case, I've seen the significant performance improvements (I think this is due to inlining.) I suggest adding this test into your patch. Other part looks good to me. Benchmark report for JSRegress on gpgpu. VMs tested: "baseline" at /home/yusuke/dev/WebKit/WebKitBuild/checking-reduce/Release/bin/jsc "reduce" at /home/yusuke/dev/WebKit/WebKitBuild/check2/Release/bin/jsc Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. baseline reduce string-get-by-val-big-char 8.7237+-0.8994 ? 9.7000+-4.6192 ? might be 1.1119x slower slow-convergence 3.6596+-1.2487 ? 3.7767+-1.2757 ? might be 1.0320x slower int-or-other-abs-zero-then-get-by-val 24.5480+-1.4970 ? 24.9775+-1.7638 ? might be 1.0175x slower switch-string-basic 16.6286+-0.6355 16.2222+-2.1936 might be 1.0251x faster integer-modulo 3.9572+-2.7683 3.6342+-2.1530 might be 1.0889x faster fold-double-to-int 15.5027+-1.5622 ? 15.5137+-0.5286 ? is-object-or-null-trickier-internal-function 14.6808+-1.6214 14.5560+-0.8457 adapt-to-double-divide 16.4428+-1.0764 16.4262+-0.3810 tear-off-arguments 6.1683+-1.5351 ? 7.0384+-3.1448 ? might be 1.1411x slower polymorphic-get-by-id 5.6093+-3.2883 5.3023+-2.1065 might be 1.0579x faster is-object-or-null-fold-tricky 9.0627+-2.3373 ? 9.4164+-2.3461 ? might be 1.0390x slower inline-arguments-local-escape 5.5598+-0.8337 ? 5.6752+-0.5182 ? might be 1.0208x slower int-or-other-sub 5.6027+-0.6213 ? 5.7054+-1.1057 ? might be 1.0183x slower new-array-dead 19.7483+-7.1775 17.0896+-2.0479 might be 1.1556x faster rare-osr-exit-on-local 16.9916+-2.5043 ? 17.6210+-2.5715 ? might be 1.0370x slower obvious-sink-pathology 156.1099+-8.4427 153.4303+-14.2913 might be 1.0175x faster infer-one-time-closure 12.1742+-1.0512 11.9504+-0.8406 might be 1.0187x faster in-one-case-true 14.1694+-4.5413 11.8962+-0.3143 might be 1.1911x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 25.1882+-1.9044 ? 25.2300+-1.4446 ? infer-closure-const-then-reenter-no-inline 58.9125+-2.8954 57.0087+-3.5972 might be 1.0334x faster array-prototype-reduce 145.4251+-3.7086 ^ 91.1588+-26.3206 ^ definitely 1.5953x faster call-spread-apply 34.9207+-5.0826 31.5096+-1.3457 might be 1.1083x faster destructuring-arguments 19.1674+-1.7809 18.6682+-0.9342 might be 1.0267x faster string-concat-object 2.8558+-0.4395 ? 2.9998+-0.8555 ? might be 1.0504x slower arguments-named-and-reflective 11.8519+-0.7500 11.8475+-0.9936 singleton-scope 70.3254+-3.8662 ? 72.1369+-6.6672 ? might be 1.0258x slower sparse-conditional 2.8666+-2.2558 2.2102+-1.1951 might be 1.2970x faster is-string-fold-tricky 7.5220+-3.4432 ? 8.2283+-3.7968 ? might be 1.0939x slower splice-to-remove 16.8184+-0.3827 ? 16.9358+-0.8011 ? assign-custom-setter 5.9083+-0.6386 5.2786+-0.7518 might be 1.1193x faster slow-array-profile-convergence 3.6801+-1.2187 ? 3.7889+-0.9741 ? might be 1.0296x slower proto-getter-access 10.0264+-1.8415 10.0109+-1.7727 direct-arguments-getbyval 1.6990+-0.5422 ? 2.5142+-0.6403 ? might be 1.4798x slower fold-put-by-id-to-multi-put-by-offset 8.2425+-2.5861 ? 10.8762+-2.6578 ? might be 1.3195x slower to-int32-boolean 16.5840+-1.1857 ? 16.6609+-1.0884 ? is-object-or-null-fold-functions 5.2396+-0.8758 4.2154+-0.8302 might be 1.2430x faster Float32Array-matrix-mult 6.0396+-1.3424 5.8307+-0.7469 might be 1.0358x faster register-pressure-from-osr 24.2275+-4.6043 ? 25.1271+-4.4845 ? might be 1.0371x slower new-array-buffer-dead 136.1538+-11.2915 135.1930+-16.3280 infer-closure-const-then-put-to-scope-no-inline 13.3463+-0.9792 13.2606+-0.5116 ArrayBuffer-DataView-alloc-large-long-lived 42.0283+-7.3295 40.7844+-1.9889 might be 1.0305x faster double-to-int32-typed-array-no-inline 4.3554+-1.9697 ? 4.9465+-4.9742 ? might be 1.1357x slower getter-richards 117.7467+-7.4609 117.0281+-5.7642 new-array-push 5.8536+-0.8489 5.7315+-2.5946 might be 1.0213x faster infer-closure-const-then-put-to-scope 24.7246+-1.3955 23.9456+-0.4969 might be 1.0325x faster array-splice-contiguous 64.0351+-2.2799 62.7870+-1.8764 might be 1.0199x faster ftl-library-inlining-dataview 62.0908+-3.2241 ? 63.8255+-7.3976 ? might be 1.0279x slower indexed-properties-in-objects 4.7436+-2.6412 ? 5.1810+-2.2785 ? might be 1.0922x slower div-boolean-double 6.9834+-1.8252 ? 8.3558+-7.4618 ? might be 1.1965x slower is-boolean-fold 4.7805+-0.9783 ? 5.8435+-0.8362 ? might be 1.2224x slower int-or-other-neg-then-get-by-val 6.9229+-1.9492 6.1742+-1.2089 might be 1.1213x faster poly-stricteq 62.5505+-0.1100 ? 64.9110+-7.4002 ? might be 1.0377x slower polymorphic-put-by-id 32.4852+-3.0287 ? 33.1274+-2.3879 ? might be 1.0198x slower try-catch-get-by-val-cloned-arguments 15.9978+-2.3080 15.4012+-1.2815 might be 1.0387x faster polymorphic-array-call 1.9708+-0.8760 ? 2.2514+-1.2791 ? might be 1.1424x slower fold-multi-put-by-offset-to-poly-put-by-offset 9.0872+-4.3186 ? 11.4126+-6.3049 ? might be 1.2559x slower in-two-cases 12.4431+-0.5651 ? 13.3965+-1.4446 ? might be 1.0766x slower array-access-polymorphic-structure 7.4907+-1.2868 ? 8.2433+-1.4437 ? might be 1.1005x slower varargs-call 17.0160+-0.8735 ? 17.3626+-1.1171 ? might be 1.0204x slower poly-chain-access 3.8316+-1.6641 ? 4.8089+-1.8545 ? might be 1.2551x slower get_callee_polymorphic 4.2264+-0.9743 ? 4.4169+-0.8989 ? might be 1.0451x slower cmpeq-obj-to-obj-other 11.6608+-1.4756 ? 12.1058+-2.8062 ? might be 1.0382x slower cast-int-to-double 8.0272+-2.2844 7.6942+-2.6622 might be 1.0433x faster polyvariant-monomorphic-get-by-id 10.3016+-2.3512 9.8450+-1.7281 might be 1.0464x faster global-var-const-infer-fire-from-opt 1.9705+-1.4008 ? 2.3902+-1.7257 ? might be 1.2130x slower array-prototype-some 85.5728+-1.8154 ? 91.2447+-5.2044 ? might be 1.0663x slower logical-not-weird-types 4.5859+-0.7018 ? 4.9044+-1.4555 ? might be 1.0694x slower basic-set 11.4992+-1.4321 ? 13.8252+-4.6525 ? might be 1.2023x slower is-function-fold 4.8356+-1.4559 4.4887+-0.7820 might be 1.0773x faster switch-string-basic-var 17.7513+-3.0433 17.3613+-1.3564 might be 1.0225x faster assign-custom-setter-polymorphic 4.0357+-0.2037 ? 4.0600+-1.0234 ? put-by-val-direct 0.4410+-0.1721 0.3865+-0.0946 might be 1.1408x faster ArrayBuffer-Int8Array-alloc-large-long-lived 43.9429+-3.6665 39.4280+-4.4294 might be 1.1145x faster simple-activation-demo 28.1072+-1.5125 27.0354+-1.2648 might be 1.0396x faster string-concat-pair-simple 13.8118+-1.1409 ? 17.7993+-10.2821 ? might be 1.2887x slower get-by-val-out-of-bounds 6.1243+-0.8286 ? 6.7863+-0.9768 ? might be 1.1081x slower switch-string-length-tower-var 17.1844+-0.5414 16.9935+-1.0234 might be 1.0112x faster captured-assignments 0.6855+-0.2920 ? 0.7177+-0.1790 ? might be 1.0470x slower string-var-equality 33.7213+-0.1110 ? 33.9252+-0.5054 ? int-or-other-mod-then-get-by-val 7.0926+-3.5091 5.1849+-0.9394 might be 1.3679x faster Int32Array-alloc-large 28.5717+-1.1474 ? 28.9294+-1.8471 ? might be 1.0125x slower sin-boolean 13.8236+-0.9600 13.7455+-0.5257 string-concat-simple 15.9555+-1.3065 14.9969+-2.1362 might be 1.0639x faster getter-no-activation 7.1322+-2.3605 ? 7.2352+-0.8514 ? might be 1.0144x slower try-catch-get-by-val-direct-arguments 7.0253+-1.0074 ? 7.7495+-1.4017 ? might be 1.1031x slower infer-constant-property 4.6173+-0.7472 3.9078+-1.2246 might be 1.1816x faster div-boolean 9.6437+-1.7591 9.4539+-1.9967 might be 1.0201x faster large-int 15.9420+-1.5010 15.6647+-0.9714 might be 1.0177x faster external-arguments-putbyval 4.2540+-1.5922 3.8442+-1.5403 might be 1.1066x faster max-boolean 4.6111+-0.9632 4.4062+-1.1088 might be 1.0465x faster get-by-id-proto-or-self 18.4382+-2.3818 17.4687+-1.6764 might be 1.0555x faster get-by-id-bimorphic-check-structure-elimination 9.2124+-2.7056 ? 9.4256+-2.5609 ? might be 1.0231x slower string-equality 19.5379+-1.3846 ? 19.8094+-2.6791 ? might be 1.0139x slower getter 9.6389+-3.8149 8.4083+-1.2997 might be 1.1464x faster Int32Array-Int8Array-view-alloc 8.2897+-1.9291 7.4500+-0.1862 might be 1.1127x faster substring-concat 53.3195+-2.8266 ? 54.8062+-1.5992 ? might be 1.0279x slower is-boolean-fold-tricky 7.6059+-4.1296 7.1297+-3.1778 might be 1.0668x faster integer-divide 12.0111+-0.4755 ? 12.8677+-2.9887 ? might be 1.0713x slower cse-new-array 3.5690+-0.2022 3.4971+-1.2165 might be 1.0206x faster is-string-fold 5.3406+-1.3145 4.5643+-1.4165 might be 1.1701x faster object-closure-call 8.6454+-1.3821 7.5355+-2.0114 might be 1.1473x faster sinkable-new-object-dag 73.1767+-2.2898 71.5237+-8.1888 might be 1.0231x faster string-char-code-at 16.6472+-0.9666 16.3035+-0.2773 might be 1.0211x faster double-to-uint32-typed-array-no-inline 4.9535+-1.5822 4.0127+-1.9439 might be 1.2345x faster Int16Array-bubble-sort 22.5604+-1.7116 ? 23.1584+-2.3771 ? might be 1.0265x slower switch-char 9.5156+-5.9018 ? 11.5331+-4.7763 ? might be 1.2120x slower switch-char-constant 4.4026+-2.1312 4.1352+-1.5235 might be 1.0647x faster infer-one-time-closure-two-vars 11.6826+-0.8567 ? 12.2563+-0.6920 ? might be 1.0491x slower object-test 4.8787+-1.2003 4.7780+-1.0864 might be 1.0211x faster external-arguments-getbyval 2.4396+-0.4737 2.2172+-0.6453 might be 1.1003x faster plus-boolean 4.1367+-1.0407 3.9117+-0.2510 might be 1.0575x faster Int16Array-alloc-long-lived 68.4337+-14.0157 66.3136+-6.6898 might be 1.0320x faster fold-get-by-id-to-multi-get-by-offset 8.7517+-1.8245 ? 9.5350+-3.1157 ? might be 1.0895x slower infer-one-time-deep-closure 20.3054+-0.5593 ? 20.4953+-1.1750 ? new-array-buffer-push 7.1581+-0.1430 ? 7.7783+-1.5578 ? might be 1.0866x slower aliased-arguments-getbyval 3.0016+-1.4915 2.9485+-1.9001 might be 1.0180x faster by-val-generic 10.4650+-1.4751 10.3110+-0.8274 might be 1.0149x faster ArrayBuffer-Int8Array-alloc-long-lived 14.7706+-1.0619 ? 14.8583+-0.7630 ? exit-length-on-plain-object 15.6234+-3.0875 ? 16.6904+-5.2496 ? might be 1.0683x slower Int32Array-alloc 4.0677+-0.6824 3.6994+-0.3063 might be 1.0996x faster weird-inlining-const-prop 4.8498+-4.9838 4.8235+-0.9933 DataView-custom-properties 50.5095+-2.8770 47.9488+-2.2162 might be 1.0534x faster HashMap-string-put-get-iterate 33.8091+-5.7168 30.5224+-4.8276 might be 1.1077x faster get-by-id-bimorphic-check-structure-elimination-simple 3.5546+-1.2022 ? 4.0973+-1.2257 ? might be 1.1527x slower temporal-structure 18.4987+-3.6065 ? 19.8476+-4.3044 ? might be 1.0729x slower for-of-iterate-array-values 5.8018+-1.4654 ? 9.2687+-6.0821 ? might be 1.5976x slower varargs-construct 26.5723+-0.8619 ? 27.3697+-5.1807 ? might be 1.0300x slower double-to-uint32-typed-array 2.6732+-0.9438 ? 2.9745+-0.5515 ? might be 1.1127x slower int-or-other-mul-then-get-by-val 5.8188+-1.8001 ? 9.9722+-5.7005 ? might be 1.7138x slower put-by-val-machine-int 4.6715+-1.9926 4.3239+-1.2249 might be 1.0804x faster lots-of-fields 11.8992+-0.3162 ? 15.5871+-9.7765 ? might be 1.3099x slower infer-closure-const-then-mov-no-inline 5.7249+-2.5846 ? 6.2253+-2.1776 ? might be 1.0874x slower arguments 9.4756+-1.3633 9.3428+-0.9296 might be 1.0142x faster negative-zero-divide 0.3959+-0.1762 ? 0.4678+-0.1607 ? might be 1.1814x slower big-int-mul 6.9600+-3.6382 5.7886+-1.0060 might be 1.2024x faster is-object-or-null-tricky-function 5.6600+-1.7831 ? 9.1865+-2.7350 ? might be 1.6230x slower try-catch-get-by-val-scoped-arguments 9.1990+-1.3984 7.8943+-0.3584 might be 1.1653x faster is-undefined-fold-tricky 5.0547+-1.5616 ? 5.0804+-1.2644 ? setter 8.5793+-3.6327 7.8697+-3.1293 might be 1.0902x faster neg-boolean 7.1803+-6.3418 4.2950+-1.5306 might be 1.6718x faster poly-chain-access-simpler 5.3395+-1.4080 5.0878+-1.8696 might be 1.0495x faster slow-ternaries 26.7023+-3.2108 25.1263+-1.7928 might be 1.0627x faster put-by-id-slightly-polymorphic 3.9833+-0.7963 3.9418+-0.4661 might be 1.0105x faster arguments-out-of-bounds 15.1092+-0.6570 14.9901+-0.9164 sink-function 12.1559+-1.7425 11.8850+-2.5217 might be 1.0228x faster marsaglia-larger-ints 46.1566+-3.7006 ? 46.3276+-2.5420 ? undefined-test 6.3511+-3.5001 ? 6.5529+-5.5531 ? might be 1.0318x slower imul-mixed 8.0333+-2.1428 7.6112+-1.3895 might be 1.0555x faster global-var-const-infer 0.9865+-0.0998 0.7966+-0.1799 might be 1.2384x faster asmjs_bool_bug 8.2233+-0.9297 ? 10.5217+-1.6688 ? might be 1.2795x slower double-pollution-putbyoffset 6.9589+-3.5628 ? 7.0747+-1.6857 ? might be 1.0166x slower is-object-or-null-fold 5.5737+-1.8306 4.8656+-2.4119 might be 1.1455x faster cell-argument 9.0862+-0.8503 8.3936+-0.3333 might be 1.0825x faster int-or-other-add 7.9547+-2.9436 6.8779+-1.7915 might be 1.1566x faster plus-boolean-arith 5.0709+-2.7654 ? 5.5923+-2.2417 ? might be 1.1028x slower ArrayBuffer-Int32Array-byteOffset 5.5049+-0.8825 ? 5.9941+-1.6199 ? might be 1.0889x slower mod-boolean 9.8745+-1.7060 9.4896+-1.7459 might be 1.0406x faster infer-closure-const-then-mov 17.9988+-1.9135 ? 18.7522+-3.0013 ? might be 1.0419x slower large-int-neg 20.1788+-8.4547 16.9641+-0.5349 might be 1.1895x faster fround 18.8953+-1.0333 18.4796+-0.9270 might be 1.0225x faster elidable-new-object-dag 52.9552+-9.6337 ? 53.2982+-2.5523 ? make-indexed-storage 4.4695+-0.3147 4.0377+-0.9121 might be 1.1069x faster int-or-other-add-then-get-by-val 7.0979+-1.0585 6.9083+-1.9658 might be 1.0275x faster string-cons-repeat 8.9427+-1.1837 8.1000+-0.0596 might be 1.1040x faster logical-not 8.4673+-4.0941 ? 8.9393+-3.9092 ? might be 1.0557x slower poly-chain-access-different-prototypes-simple 6.6225+-1.6966 4.6721+-1.4395 might be 1.4175x faster fixed-typed-array-storage-var-index 1.7548+-0.7428 ? 2.8454+-2.2220 ? might be 1.6215x slower function-test 4.8754+-1.1440 ? 5.1973+-2.0313 ? might be 1.0660x slower string-cons-tower 8.2465+-0.0630 ? 8.3145+-0.4124 ? destructuring-swap 6.5972+-1.7637 ? 8.1477+-2.3554 ? might be 1.2350x slower is-function-fold-tricky 8.2085+-2.4127 6.5580+-2.9546 might be 1.2517x faster int-or-other-max-then-get-by-val 6.0703+-2.1613 5.9158+-1.4108 might be 1.0261x faster fold-multi-get-by-offset-to-get-by-offset 9.2517+-2.8279 ? 9.9143+-1.7608 ? might be 1.0716x slower method-on-number 23.7557+-4.9758 23.5717+-3.7308 put-by-id-replace-and-transition 11.8198+-2.6435 11.4363+-2.3293 might be 1.0335x faster int-or-other-neg-zero-then-get-by-val 24.9982+-2.0030 ? 25.6137+-1.1262 ? might be 1.0246x slower varargs-strict-mode 11.8137+-2.0839 ? 13.1041+-2.0446 ? might be 1.1092x slower string-get-by-val-out-of-bounds-insane 4.9637+-1.2080 4.5764+-1.5608 might be 1.0847x faster imul-double-only 7.7811+-0.9381 ? 7.8682+-1.4612 ? might be 1.0112x slower for-of-iterate-array-keys 8.9407+-4.4762 5.7545+-1.1647 might be 1.5537x faster string-get-by-val 6.5082+-2.6530 6.3985+-2.0470 might be 1.0172x faster nested-function-parsing 47.0643+-2.1849 ? 48.1733+-4.9711 ? might be 1.0236x slower string-repeat-arith 33.9853+-0.6032 ? 34.2635+-0.4027 ? inline-arguments-aliased-access 5.7248+-1.6339 ? 7.1923+-1.5319 ? might be 1.2563x slower allocate-big-object 3.9526+-0.9713 ? 4.6254+-1.1101 ? might be 1.1702x slower is-object-or-null-fold-less-tricky 6.4180+-1.6015 5.8872+-1.0787 might be 1.0902x faster elidable-new-object-tree 54.5893+-3.3704 ? 57.0565+-3.2476 ? might be 1.0452x slower ArrayBuffer-Int8Array-alloc 12.7703+-2.9125 11.8707+-0.3109 might be 1.0758x faster int52-spill 9.0103+-1.9544 8.5464+-2.5109 might be 1.0543x faster no-inline-constructor 48.6287+-2.5161 48.0029+-3.9066 might be 1.0130x faster hoist-make-rope 10.1753+-1.0694 ? 10.4042+-0.9380 ? might be 1.0225x slower arguments-strict-mode 10.5912+-1.4122 10.2409+-0.5867 might be 1.0342x faster function-with-eval 119.1827+-1.6606 ? 120.0358+-8.6264 ? ArrayBuffer-DataView-alloc-long-lived 16.9248+-1.0344 16.8046+-0.6020 simple-poly-call-nested 8.6672+-0.8238 ? 10.8288+-2.3141 ? might be 1.2494x slower switch-string-big-length-tower-var 22.3899+-2.7176 21.2952+-0.9903 might be 1.0514x faster number-test 6.1629+-4.3513 4.3727+-1.0893 might be 1.4094x faster Int16Array-load-int-mul 2.7545+-0.6284 2.3510+-1.1112 might be 1.1716x faster put-by-id 15.7625+-0.5857 ^ 14.6675+-0.3475 ^ definitely 1.0747x faster imul-int-only 10.2362+-0.8327 ? 12.6078+-7.2586 ? might be 1.2317x slower gcse 6.5404+-0.9986 ? 7.2551+-0.4785 ? might be 1.1093x slower create-lots-of-functions 12.9481+-1.0071 ? 14.1152+-1.8724 ? might be 1.0901x slower in-four-cases 22.5479+-1.7810 22.0986+-3.2669 might be 1.0203x faster elidable-new-object-then-call 43.9453+-3.9023 ? 45.2218+-2.9191 ? might be 1.0290x slower int-or-other-sub-then-get-by-val 7.1833+-2.0504 ? 7.5371+-2.0683 ? might be 1.0493x slower mul-boolean-double 6.9780+-3.8799 5.8865+-1.7442 might be 1.1854x faster mod-boolean-double 11.1987+-5.4544 10.5732+-2.2249 might be 1.0592x faster inline-arguments-access 6.5897+-1.9013 5.6948+-0.9979 might be 1.1571x faster substring-concat-weird 54.7836+-12.0956 52.0726+-5.0070 might be 1.0521x faster varargs-construct-inline 31.6785+-3.4875 ? 34.1192+-1.3318 ? might be 1.0770x slower HashMap-put-get-iterate 34.0947+-5.6344 33.0253+-5.3777 might be 1.0324x faster string-long-ident-equality 15.6637+-0.8171 ? 16.0711+-2.3712 ? might be 1.0260x slower mul-boolean 4.1768+-1.2351 3.5472+-1.2238 might be 1.1775x faster get-by-id-check-structure-elimination 8.0438+-3.0921 ? 8.5772+-2.1746 ? might be 1.0663x slower marsaglia-osr-entry 23.8403+-1.1762 23.3683+-1.1430 might be 1.0202x faster Float64Array-alloc-long-lived 96.8298+-11.3701 ? 99.8956+-8.4671 ? might be 1.0317x slower misc-strict-eq 38.6390+-5.8838 37.6578+-3.2677 might be 1.0261x faster make-rope-cse 4.6174+-0.0204 4.5800+-0.0356 array-with-double-sum 4.6282+-0.7274 ? 6.1640+-2.7480 ? might be 1.3318x slower substring 63.1255+-1.6872 61.6670+-2.1230 might be 1.0237x faster array-with-double-increment 7.6030+-1.1410 6.3142+-2.2925 might be 1.2041x faster is-object-or-null-trickier-function 8.0823+-2.6227 7.1418+-0.7360 might be 1.1317x faster for-of-iterate-array-entries 7.8913+-3.7777 ? 9.3710+-3.0149 ? might be 1.1875x slower array-nonarray-polymorhpic-access 33.8588+-1.3553 33.7005+-2.0344 varargs 12.2025+-2.6895 12.1212+-2.0506 string-out-of-bounds 15.0703+-0.5145 14.8633+-0.5892 might be 1.0139x faster inlined-put-by-id-transition 12.4658+-1.0606 ? 14.4789+-1.9917 ? might be 1.1615x slower minus-boolean-double 5.5605+-0.6891 5.1598+-1.2461 might be 1.0777x faster is-object-or-null-tricky-internal-function 10.7645+-2.5841 ? 12.3712+-2.8403 ? might be 1.1493x slower delay-tear-off-arguments-strictmode 15.4738+-2.1733 15.3405+-1.8490 array-prototype-every 84.9688+-1.5797 ? 90.4536+-6.8803 ? might be 1.0646x slower chain-getter-access 9.5942+-1.0657 ? 10.2708+-1.4402 ? might be 1.0705x slower int-or-other-min-then-get-by-val 7.0979+-1.9934 6.6736+-2.1818 might be 1.0636x faster HashMap-put-get-iterate-keys 32.6166+-6.7057 ? 33.0284+-1.2274 ? might be 1.0126x slower double-pollution-getbyval 10.1992+-1.7252 ? 11.1105+-1.7082 ? might be 1.0893x slower structure-hoist-over-transitions 3.8925+-1.3922 ? 5.5652+-3.4943 ? might be 1.4297x slower polymorphic-structure 19.8323+-1.7156 ? 19.9415+-1.3327 ? sorting-benchmark 23.7429+-4.8380 23.4484+-3.1260 might be 1.0126x faster fixed-typed-array-storage 1.8840+-1.9733 1.4536+-0.3558 might be 1.2961x faster load-varargs-elimination 25.7203+-1.4438 ? 29.4060+-11.9079 ? might be 1.1433x slower switch-string-length-tower 17.1992+-7.0785 14.1382+-0.6479 might be 1.2165x faster fold-multi-get-by-offset-to-poly-get-by-offset 8.2316+-2.4199 ? 11.5649+-6.4438 ? might be 1.4049x slower Int8Array-load-with-byteLength 5.9202+-2.5212 5.8020+-1.8187 might be 1.0204x faster Float64Array-to-Int16Array-set 80.8888+-0.0690 ? 81.2938+-2.8136 ? infer-constant-global-property 11.2943+-4.9621 9.3959+-1.6791 might be 1.2020x faster int-overflow-local 7.3888+-2.9489 ? 7.7682+-1.3546 ? might be 1.0514x slower min-boolean 4.3464+-0.9029 ? 4.9523+-0.6115 ? might be 1.1394x slower simple-getter-access 12.1953+-0.6315 ? 12.5222+-0.8394 ? might be 1.0268x slower string-hash 4.7565+-5.0978 3.6462+-0.3920 might be 1.3045x faster arity-mismatch-inlining 1.4781+-0.3387 ? 1.6665+-1.7246 ? might be 1.1275x slower obviously-elidable-new-object 37.3594+-4.0911 ? 38.0291+-4.5759 ? might be 1.0179x slower deltablue-varargs 250.2565+-13.8643 243.6049+-17.1690 might be 1.0273x faster gcse-poly-get 22.9980+-2.9706 21.8203+-4.2891 might be 1.0540x faster hoist-poly-check-structure-effectful-loop 7.6160+-0.5192 7.2459+-0.4286 might be 1.0511x faster minus-boolean 4.2348+-0.7533 3.9355+-0.3680 might be 1.0761x faster gcse-poly-get-less-obvious 20.5714+-1.4489 20.0095+-1.5150 might be 1.0281x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 12.6566+-1.3069 10.9324+-2.6487 might be 1.1577x faster branch-fold 6.3164+-2.1605 5.2607+-1.1742 might be 1.2007x faster double-to-int32-typed-array 3.2770+-1.9404 3.1276+-0.9763 might be 1.0478x faster plus-boolean-double 4.6697+-1.5240 ? 4.7291+-1.0495 ? might be 1.0127x slower hoist-poly-check-structure 5.3572+-0.8104 ? 5.4576+-1.9307 ? might be 1.0187x slower infer-one-time-closure-ten-vars 12.9818+-1.0616 12.2173+-0.8742 might be 1.0626x faster is-function-fold-tricky-internal-function 12.3780+-1.1325 12.3216+-0.5352 array-with-double-mul-add 8.7850+-2.0390 8.5738+-4.6250 might be 1.0246x faster array-prototype-map 93.8560+-1.5469 ! 99.6648+-1.2146 ! definitely 1.0619x slower varargs-inline 11.1921+-1.4431 10.0687+-0.9253 might be 1.1116x faster sink-huge-activation 18.0062+-1.8352 17.7236+-1.9988 might be 1.0159x faster undefined-property-access 351.4200+-2.4585 350.6940+-1.6602 array-with-int32-add-sub 9.0258+-1.1452 ? 11.1035+-2.9605 ? might be 1.2302x slower function-dot-apply 4.3010+-1.2025 3.6113+-1.7376 might be 1.1910x faster string-sub 69.8506+-4.5120 68.5233+-3.2559 might be 1.0194x faster boolean-test 5.1558+-0.7020 4.9907+-0.7992 might be 1.0331x faster emscripten-cube2hash 39.5210+-3.4421 37.4302+-4.5469 might be 1.0559x faster Int32Array-alloc-long-lived 91.4318+-17.0202 74.4957+-16.0606 might be 1.2273x faster get-by-id-self-or-proto 19.0886+-5.1090 18.1528+-2.8029 might be 1.0516x faster cse-new-array-buffer 3.3290+-0.8747 ? 3.4014+-0.6259 ? might be 1.0217x slower sinkable-new-object 42.0057+-8.4493 ? 42.3528+-8.3678 ? put-by-val-large-index-blank-indexing-type 6.8049+-0.8843 ? 7.5267+-1.4145 ? might be 1.1061x slower Int8Array-load 5.7086+-0.8288 ? 6.0030+-2.9884 ? might be 1.0516x slower int-or-other-abs-then-get-by-val 7.6673+-1.3250 7.2314+-2.1157 might be 1.0603x faster abs-boolean 4.9238+-2.0014 3.8214+-1.0379 might be 1.2885x faster call-spread-call 26.2910+-5.4057 ? 27.3833+-4.8404 ? might be 1.0415x slower unprofiled-licm 21.4268+-0.3302 ? 22.6802+-1.5736 ? might be 1.0585x slower constant-test 7.5938+-0.3994 ? 8.1403+-3.8266 ? might be 1.0720x slower cfg-simplify 4.4039+-1.1825 ? 4.4490+-1.4819 ? might be 1.0102x slower get-by-id-quadmorphic-check-structure-elimination-simple 5.0717+-2.2459 ? 5.3369+-1.7224 ? might be 1.0523x slower fold-put-structure 6.6812+-0.7619 ? 7.0009+-2.3392 ? might be 1.0479x slower get-by-id-chain-from-try-block 7.5861+-0.5483 ? 7.6273+-1.3297 ? poly-chain-access-different-prototypes 5.2591+-3.7525 4.2839+-0.4665 might be 1.2276x faster is-number-fold-tricky 8.3326+-7.3816 7.2484+-2.4599 might be 1.1496x faster get_callee_monomorphic 4.8942+-1.2761 4.3144+-0.8070 might be 1.1344x faster deconstructing-parameters-overridden-by-function 0.6175+-0.1943 0.6102+-0.2261 might be 1.0120x faster empty-string-plus-int 7.5922+-2.2039 ? 8.0364+-1.5014 ? might be 1.0585x slower Float32Array-to-Float64Array-set 65.9405+-0.0753 ? 66.3104+-2.5288 ? switch-string-short 14.5782+-1.2375 14.2700+-0.5700 might be 1.0216x faster switch-string-basic-big 19.4939+-0.5303 19.0100+-0.3114 might be 1.0255x faster double-get-by-val-out-of-bounds 5.9601+-0.8163 ? 6.2715+-1.3758 ? might be 1.0523x slower large-int-captured 7.3231+-2.0013 6.3019+-1.6734 might be 1.1620x faster elidable-new-object-roflcopter 57.4022+-3.4878 ? 60.2643+-1.3658 ? might be 1.0499x slower string-get-by-val-out-of-bounds 7.9369+-2.7812 ? 8.2036+-2.7591 ? might be 1.0336x slower array-with-double-add 7.1480+-2.0880 5.9515+-0.9696 might be 1.2010x faster math-with-out-of-bounds-array-values 37.1856+-4.1498 ? 39.3407+-4.2249 ? might be 1.0580x slower string-test 4.9500+-2.7086 ? 5.4564+-1.0702 ? might be 1.1023x slower is-undefined-fold 4.9568+-0.9494 ? 5.1312+-1.2667 ? might be 1.0352x slower switch 16.3920+-2.1189 15.1998+-2.9663 might be 1.0784x faster inline-get-scoped-var 7.7410+-3.6877 7.1135+-1.2682 might be 1.0882x faster tear-off-arguments-simple 5.4454+-0.6198 4.8415+-1.8003 might be 1.1247x faster negative-zero-modulo 0.6182+-0.2141 0.4742+-0.2307 might be 1.3036x faster infer-closure-const-then-reenter 25.4058+-1.3591 25.1704+-1.3386 array-prototype-forEach 82.1766+-2.2679 ? 85.7826+-1.7473 ? might be 1.0439x slower switch-constant 11.8506+-2.0230 10.5495+-1.5404 might be 1.1233x faster negative-zero-negate 0.6365+-0.5446 0.4124+-0.0901 might be 1.5437x faster fold-get-by-id-to-multi-get-by-offset-rare-int 9.3127+-0.8422 ? 10.6398+-2.3064 ? might be 1.1425x slower in-one-case-false 13.5490+-1.2724 12.5512+-1.6485 might be 1.0795x faster int-or-other-div-then-get-by-val 6.3170+-2.0535 ? 9.0204+-7.9216 ? might be 1.4280x slower typed-array-get-set-by-val-profiling 33.4012+-1.4198 ? 33.5062+-0.7540 ? Int8Array-alloc-long-lived 68.3145+-10.5629 57.3865+-13.7553 might be 1.1904x faster simple-poly-call 2.3720+-1.1259 1.7653+-0.4649 might be 1.3437x faster fold-multi-put-by-offset-to-put-by-offset 8.9150+-7.0137 6.6733+-3.0205 might be 1.3359x faster switch-string-basic-big-var 22.4404+-0.1921 ? 22.7070+-1.7166 ? might be 1.0119x slower Int16Array-to-Int32Array-set 64.7462+-0.4967 64.6060+-0.1969 sinkable-new-object-taken 61.4186+-1.8324 ? 61.9340+-3.1375 ? string-concat-pair-object 3.1947+-0.4522 2.9547+-0.1827 might be 1.0812x faster branch-on-string-as-boolean 17.9920+-0.8076 ? 18.6877+-1.5901 ? might be 1.0387x slower is-number-fold 5.7957+-0.6212 ? 6.3052+-3.8313 ? might be 1.0879x slower obvious-sink-pathology-taken 170.1662+-2.2544 166.5267+-9.4316 might be 1.0219x faster ftl-library-inlining 68.5070+-1.9206 67.9995+-1.3111 array-with-int32-or-double-sum 5.1815+-1.1452 4.7099+-1.2033 might be 1.1001x faster Int16Array-bubble-sort-with-byteLength 22.8265+-1.0132 ? 25.3017+-8.4822 ? might be 1.1084x slower <geometric> 10.9925+-0.1463 10.9346+-0.1426 might be 1.0053x faster
Jordan Harband
Comment 28 2015-05-30 10:57:32 PDT
Jordan Harband
Comment 29 2015-05-30 10:58:12 PDT
Relevant new benchmark results: array-prototype-reduce 109.6757+-9.0183 ^ 72.9084+-4.1290 ^ definitely 1.5043x faster array-prototype-reduceRight 107.6423+-4.3030 ^ 74.5804+-6.6558 ^ definitely 1.4433x faster
WebKit Commit Bot
Comment 30 2015-05-31 02:29:16 PDT
Comment on attachment 253961 [details] Patch Clearing flags on attachment: 253961 Committed r185038: <http://trac.webkit.org/changeset/185038>
WebKit Commit Bot
Comment 31 2015-05-31 02:29:24 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.