| Summary: | Array#reduce and reduceRight don't follow ToLength | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | WebKit | Reporter: | Jordan Harband <ljharb> | ||||||||||||||||||||||||||
| Component: | JavaScriptCore | Assignee: | 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
Jordan Harband
2015-05-24 21:19:40 PDT
Created attachment 253671 [details]
Patch
Created attachment 253672 [details]
Patch
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. 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
I'm not sure how to deal with the EWS issues. Any help would be appreciated. (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. (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. (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. 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. 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
(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. (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. I decided to just rewrite the functions in JS. Patch incoming. Created attachment 253676 [details]
Patch
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 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
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 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
Created attachment 253680 [details]
Patch
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? Created attachment 253832 [details]
Patch
Created attachment 253895 [details]
Patch
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
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. Created attachment 253896 [details]
Patch
ping for rereview 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
Created attachment 253961 [details]
Patch
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 Comment on attachment 253961 [details] Patch Clearing flags on attachment: 253961 Committed r185038: <http://trac.webkit.org/changeset/185038> All reviewed patches have been landed. Closing bug. |