| Summary: | [ES6] Implement tail calls in the LLInt and Baseline JIT | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | WebKit | Reporter: | Basile Clement <basile_clement> | ||||||||||||||||
| Component: | JavaScriptCore | Assignee: | Basile Clement <basile_clement> | ||||||||||||||||
| Status: | RESOLVED FIXED | ||||||||||||||||||
| Severity: | Normal | CC: | buildbot, commit-queue, msaboff, ossy, rniwa, sukolsak | ||||||||||||||||
| Priority: | P2 | ||||||||||||||||||
| Version: | WebKit Nightly Build | ||||||||||||||||||
| Hardware: | Unspecified | ||||||||||||||||||
| OS: | Unspecified | ||||||||||||||||||
| Bug Depends on: | 148658, 148659, 148665, 148666, 149162 | ||||||||||||||||||
| Bug Blocks: | 148662 | ||||||||||||||||||
| Attachments: |
|
||||||||||||||||||
|
Description
Basile Clement
2015-08-31 17:43:41 PDT
*** Bug 147195 has been marked as a duplicate of this bug. *** Created attachment 260617 [details]
Patch (there is a bug in there)
Comment on attachment 260617 [details] Patch (there is a bug in there) View in context: https://bugs.webkit.org/attachment.cgi?id=260617&action=review > Source/JavaScriptCore/ChangeLog:177 > +2015-08-27 Basile Clement <basile_clement@apple.com> > + > + Don't waste stack space when arity fixup was performed > + Need the bug URL (OOPS!). I'll remove that bogus ChangeLog entry. Comment on attachment 260617 [details]
Patch (there is a bug in there)
Looks good to me (though not ready to land).
Created attachment 260624 [details]
Patch
Updated patch, enable adequate ES6 tests
Created attachment 260970 [details]
Rebased patch with Windows 64 bit fix
Attachment 260970 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:87: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:88: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:88: Should have only a single space after a punctuation in a comment. [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:89: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:90: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:91: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:92: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:93: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:94: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:95: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:96: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:97: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:98: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:99: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:100: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:102: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:103: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:104: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:108: Tab found; better to use spaces [whitespace/tab] [1]
ERROR: Source/JavaScriptCore/jit/ThunkGenerators.cpp:109: Tab found; better to use spaces [whitespace/tab] [1]
Total errors found: 20 in 54 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 260971 [details]
Prior patch with tabs removed.
Looks neutral on performance.
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on msaboff-pro (MacPro5,1).
VMs tested:
"Baseline" at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/jsc
"TailCallLLintBaseline" at /Volumes/Data/src/webkit/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/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 TailCallLLintBaseline
SunSpider:
3d-cube 7.9900+-0.5392 ? 8.2051+-0.4886 ? might be 1.0269x slower
3d-morph 8.1512+-0.1119 ? 8.1757+-0.1670 ?
3d-raytrace 8.6974+-0.2520 ? 8.6988+-0.2690 ?
access-binary-trees 3.0598+-0.0975 ? 3.1104+-0.2954 ? might be 1.0165x slower
access-fannkuch 8.4940+-0.1779 ? 8.5927+-0.2508 ? might be 1.0116x slower
access-nbody 4.3290+-0.1465 4.2594+-0.2278 might be 1.0163x faster
access-nsieve 4.5695+-0.1461 ? 4.5700+-0.1469 ?
bitops-3bit-bits-in-byte 1.7109+-0.0826 ? 1.8132+-0.0737 ? might be 1.0598x slower
bitops-bits-in-byte 5.5978+-0.1075 ? 5.6358+-0.1258 ?
bitops-bitwise-and 2.8273+-0.1274 ? 2.8729+-0.1387 ? might be 1.0161x slower
bitops-nsieve-bits 4.3372+-0.2291 4.3363+-0.1237
controlflow-recursive 3.3355+-0.0900 ? 3.3741+-0.2464 ? might be 1.0116x slower
crypto-aes 6.3621+-0.2557 6.2751+-0.3727 might be 1.0139x faster
crypto-md5 4.1255+-0.2256 4.1180+-0.2030
crypto-sha1 3.3990+-0.1185 ? 3.4265+-0.1266 ?
date-format-tofte 12.7264+-0.6881 ? 12.7905+-0.4982 ?
date-format-xparb 7.7400+-0.3098 7.6136+-0.3692 might be 1.0166x faster
math-cordic 4.3574+-0.2295 ? 4.4665+-0.1137 ? might be 1.0250x slower
math-partial-sums 9.6602+-0.2923 ? 9.9313+-0.2142 ? might be 1.0281x slower
math-spectral-norm 3.0410+-0.0671 3.0308+-0.0605
regexp-dna 9.6045+-0.3334 ? 9.6887+-0.2189 ?
string-base64 6.7166+-0.3200 6.4955+-0.3161 might be 1.0340x faster
string-fasta 9.2414+-0.2604 ? 9.2773+-0.1319 ?
string-tagcloud 12.9885+-0.1990 12.9555+-0.2202
string-unpack-code 27.2217+-0.5889 26.9775+-1.8750
string-validate-input 6.8607+-0.3022 6.8123+-0.1394
<arithmetic> 7.1979+-0.0428 ? 7.2117+-0.0811 ? might be 1.0019x slower
Baseline TailCallLLintBaseline
LongSpider:
3d-cube 1167.3314+-38.6808 ? 1181.5132+-27.9042 ? might be 1.0121x slower
3d-morph 1888.1689+-13.9212 ? 1893.4813+-26.1817 ?
3d-raytrace 1024.7347+-1.6894 ? 1028.3860+-16.2314 ?
access-binary-trees 1394.1152+-25.3902 1391.3838+-3.4955
access-fannkuch 443.1098+-6.9629 ? 447.1206+-11.9273 ?
access-nbody 1014.7333+-2.2810 ? 1022.7019+-10.0302 ?
access-nsieve 675.7314+-1.1357 ? 682.8737+-14.8059 ? might be 1.0106x slower
bitops-3bit-bits-in-byte 44.5345+-0.3753 44.4144+-0.2661
bitops-bits-in-byte 341.9902+-2.3509 ? 345.1937+-6.0364 ?
bitops-nsieve-bits 618.1560+-5.8417 ? 619.2817+-7.3145 ?
controlflow-recursive 749.5283+-11.3946 ^ 731.4562+-1.3053 ^ definitely 1.0247x faster
crypto-aes 879.4976+-6.0170 877.3869+-4.0433
crypto-md5 791.2980+-11.6898 788.1599+-10.7560
crypto-sha1 1055.1870+-1.2140 ^ 1052.0834+-1.3899 ^ definitely 1.0029x faster
date-format-tofte 973.3914+-29.0969 ? 992.1632+-21.2524 ? might be 1.0193x slower
date-format-xparb 1070.6765+-15.6300 ? 1073.7831+-20.8172 ?
hash-map 231.2808+-0.5143 ? 233.0270+-1.5212 ?
math-cordic 645.8419+-5.6784 639.4562+-4.8900
math-partial-sums 1130.4283+-4.4214 ! 1141.8686+-3.3339 ! definitely 1.0101x slower
math-spectral-norm 1065.3986+-1.6932 ? 1065.6096+-2.2225 ?
string-base64 534.5762+-6.1064 ? 541.6856+-17.2722 ? might be 1.0133x slower
string-fasta 594.0465+-17.2904 585.0918+-5.5062 might be 1.0153x faster
string-tagcloud 295.3430+-12.7914 294.5233+-9.6551
<geometric> 666.0062+-1.7595 ? 667.2731+-2.2467 ? might be 1.0019x slower
Baseline TailCallLLintBaseline
V8Spider:
crypto 70.6442+-1.0758 70.6392+-1.2695
deltablue 91.4703+-4.5412 90.2460+-2.2554 might be 1.0136x faster
earley-boyer 63.9042+-0.8657 63.4375+-0.8762
raytrace 39.1057+-0.9802 39.0158+-1.4216
regexp 104.0843+-3.6457 ? 105.0150+-2.7282 ?
richards 83.4481+-2.7716 82.0284+-0.7802 might be 1.0173x faster
splay 53.7968+-4.2957 ? 54.0759+-3.6323 ?
<geometric> 69.1128+-0.3484 68.8625+-1.0014 might be 1.0036x faster
Baseline TailCallLLintBaseline
Octane:
encrypt 0.31256+-0.00350 0.30655+-0.00855 might be 1.0196x faster
decrypt 5.72514+-0.02609 ? 5.72600+-0.03726 ?
deltablue x2 0.26328+-0.01554 0.25789+-0.00586 might be 1.0209x faster
earley 0.51232+-0.00352 ? 0.51331+-0.00989 ?
boyer 8.71021+-0.12578 8.58319+-0.06698 might be 1.0148x faster
navier-stokes x2 6.44600+-0.15610 6.40907+-0.05772
raytrace x2 1.70879+-0.06502 ? 1.71104+-0.11954 ?
richards x2 0.17134+-0.00153 ? 0.17161+-0.00089 ?
splay x2 0.52050+-0.00779 0.51794+-0.01144
regexp x2 38.61531+-2.10099 38.59521+-1.26724
pdfjs x2 59.60857+-0.33258 ! 63.38079+-0.94768 ! definitely 1.0633x slower
mandreel x2 67.83837+-0.93595 ? 68.02840+-0.68689 ?
gbemu x2 60.53964+-1.29477 ? 60.73393+-0.83395 ?
closure 0.93254+-0.01836 ? 0.93894+-0.02689 ?
jquery 11.91034+-0.15297 11.85166+-0.15302
box2d x2 17.41933+-0.18837 ? 17.50016+-0.20662 ?
zlib x2 573.26906+-2.99829 ? 576.13025+-10.13746 ?
typescript x2 1107.51038+-15.77511 ? 1108.42169+-31.16583 ?
<geometric> 9.12764+-0.09009 ? 9.14814+-0.05360 ? might be 1.0022x slower
Baseline TailCallLLintBaseline
Kraken:
ai-astar 332.120+-6.812 324.425+-6.545 might be 1.0237x faster
audio-beat-detection 80.738+-1.740 ? 80.784+-0.600 ?
audio-dft 128.894+-2.589 ? 131.466+-6.226 ? might be 1.0200x slower
audio-fft 59.573+-0.355 ? 60.030+-2.385 ?
audio-oscillator 102.750+-1.514 ? 102.940+-0.526 ?
imaging-darkroom 96.049+-0.315 ? 96.116+-0.232 ?
imaging-desaturate 89.974+-1.279 89.317+-0.812
imaging-gaussian-blur 144.117+-1.001 ? 148.869+-15.116 ? might be 1.0330x slower
json-parse-financial 70.556+-0.444 ^ 68.909+-1.087 ^ definitely 1.0239x faster
json-stringify-tinderbox 40.847+-0.134 ? 41.279+-1.377 ? might be 1.0106x slower
stanford-crypto-aes 64.787+-3.057 ? 66.920+-2.934 ? might be 1.0329x slower
stanford-crypto-ccm 60.246+-3.297 ! 72.178+-2.895 ! definitely 1.1981x slower
stanford-crypto-pbkdf2 141.327+-1.641 ! 147.057+-3.799 ! definitely 1.0405x slower
stanford-crypto-sha256-iterative 57.052+-0.085 ! 58.820+-1.018 ! definitely 1.0310x slower
<arithmetic> 104.931+-0.644 ? 106.365+-1.488 ? might be 1.0137x slower
Baseline TailCallLLintBaseline
JSRegress:
abc-forward-loop-equal 55.5932+-1.9680 55.3093+-1.0146
abc-postfix-backward-loop 54.5142+-0.0546 54.4483+-0.7278
abc-simple-backward-loop 54.2937+-0.2200 54.2530+-0.1774
abc-simple-forward-loop 54.5640+-0.1446 54.2796+-0.3768
abc-skippy-loop 37.4628+-0.0743 ? 37.6884+-0.7390 ?
abs-boolean 3.8348+-0.1280 3.7986+-0.1218
adapt-to-double-divide 17.3724+-0.3986 17.2817+-0.6030
aliased-arguments-getbyval 1.8135+-0.1808 1.6430+-0.2259 might be 1.1038x faster
allocate-big-object 3.9569+-0.4486 3.7980+-0.1805 might be 1.0418x faster
arguments-named-and-reflective 14.3909+-0.6931 ? 14.5040+-0.4930 ?
arguments-out-of-bounds 14.4586+-0.3478 14.2245+-0.2076 might be 1.0165x faster
arguments-strict-mode 12.5959+-0.2492 ? 12.7986+-0.8980 ? might be 1.0161x slower
arguments 11.0512+-0.4502 ? 11.3985+-0.6568 ? might be 1.0314x slower
arity-mismatch-inlining 1.2859+-0.1502 1.2822+-0.1000
array-access-polymorphic-structure 9.3504+-0.3995 ? 9.5931+-0.1889 ? might be 1.0260x slower
array-nonarray-polymorhpic-access 40.7702+-0.8141 ? 40.9650+-0.8621 ?
array-prototype-every 127.3831+-3.7812 123.5865+-0.4346 might be 1.0307x faster
array-prototype-forEach 125.5991+-3.0541 122.9905+-4.6534 might be 1.0212x faster
array-prototype-map 135.6763+-2.0407 134.6779+-2.5429
array-prototype-reduce 114.0757+-1.7158 ? 114.8637+-0.8291 ?
array-prototype-reduceRight 112.2315+-0.3933 ! 114.9570+-1.7643 ! definitely 1.0243x slower
array-prototype-some 126.7886+-1.2037 ^ 123.2098+-0.9777 ^ definitely 1.0290x faster
array-splice-contiguous 33.2841+-1.2506 ? 33.6624+-1.0461 ? might be 1.0114x slower
array-with-double-add 5.4307+-0.1070 ? 5.4903+-0.1078 ? might be 1.0110x slower
array-with-double-increment 4.1762+-0.1659 4.1736+-0.1189
array-with-double-mul-add 7.2952+-0.1308 ? 7.4238+-0.1953 ? might be 1.0176x slower
array-with-double-sum 4.3933+-0.1109 ? 4.4780+-0.0630 ? might be 1.0193x slower
array-with-int32-add-sub 9.5535+-0.0814 9.4297+-0.2632 might be 1.0131x faster
array-with-int32-or-double-sum 4.4473+-0.1486 ? 4.5443+-0.1374 ? might be 1.0218x slower
ArrayBuffer-DataView-alloc-large-long-lived
45.4503+-0.5405 45.0729+-0.3230
ArrayBuffer-DataView-alloc-long-lived 17.9761+-0.5979 ? 18.3361+-0.0652 ? might be 1.0200x slower
ArrayBuffer-Int32Array-byteOffset 5.5547+-0.1129 ? 5.6166+-0.0558 ? might be 1.0111x slower
ArrayBuffer-Int8Array-alloc-large-long-lived
45.8250+-1.7149 ? 46.8060+-0.6234 ? might be 1.0214x slower
ArrayBuffer-Int8Array-alloc-long-lived-buffer
29.6412+-1.3931 29.3428+-1.0517 might be 1.0102x faster
ArrayBuffer-Int8Array-alloc-long-lived 16.8812+-0.2245 ? 16.9222+-0.1876 ?
ArrayBuffer-Int8Array-alloc 14.1391+-0.4199 ? 14.4715+-0.7032 ? might be 1.0235x slower
arrowfunction-call 15.0475+-0.2563 14.9440+-0.0696
asmjs_bool_bug 9.8116+-0.2511 9.7906+-0.4757
assign-custom-setter-polymorphic 4.2182+-0.2352 4.1331+-0.0585 might be 1.0206x faster
assign-custom-setter 5.6968+-0.1344 ? 5.8862+-0.4884 ? might be 1.0332x slower
basic-set 11.5295+-0.3181 11.3514+-0.0774 might be 1.0157x faster
big-int-mul 5.9429+-0.1306 5.8491+-0.0444 might be 1.0160x faster
boolean-test 4.4153+-0.2146 ? 4.4373+-0.1690 ?
branch-fold 4.8162+-0.2028 ? 4.9061+-0.0704 ? might be 1.0187x slower
branch-on-string-as-boolean 22.4008+-0.4707 22.3793+-0.9253
by-val-generic 3.7415+-0.1884 3.7126+-0.2472
call-spread-apply 39.4160+-2.8711 ? 40.1526+-0.6694 ? might be 1.0187x slower
call-spread-call 31.8911+-0.9712 ? 33.8477+-2.7202 ? might be 1.0614x slower
captured-assignments 0.7646+-0.1242 0.7278+-0.1483 might be 1.0506x faster
cast-int-to-double 8.6705+-0.0589 8.5461+-0.2169 might be 1.0146x faster
cell-argument 8.6838+-0.3988 8.5636+-0.3862 might be 1.0140x faster
cfg-simplify 3.8201+-0.1051 ? 3.8303+-0.0797 ?
chain-getter-access 10.2377+-0.3685 ? 10.2497+-0.2608 ?
cmpeq-obj-to-obj-other 14.7891+-0.4545 14.6385+-0.3323 might be 1.0103x faster
constant-test 8.1891+-0.1982 8.0837+-0.0963 might be 1.0130x faster
create-lots-of-functions 16.6671+-0.3138 16.6431+-0.4926
cse-new-array-buffer 3.2567+-0.2686 ? 3.3768+-0.2297 ? might be 1.0369x slower
cse-new-array 3.4226+-0.1615 3.4147+-0.1294
DataView-custom-properties 52.4323+-1.4553 ? 53.3127+-1.1655 ? might be 1.0168x slower
delay-tear-off-arguments-strictmode 18.3430+-0.0745 ? 18.7626+-0.4880 ? might be 1.0229x slower
deltablue-varargs 272.8372+-6.0251 ? 273.0087+-3.6219 ?
destructuring-arguments 243.1577+-6.7181 240.3514+-3.6544 might be 1.0117x faster
destructuring-parameters-overridden-by-function
0.6934+-0.0865 ? 0.8030+-0.1295 ? might be 1.1580x slower
destructuring-swap 7.7818+-0.3133 ? 7.9366+-0.1902 ? might be 1.0199x slower
direct-arguments-getbyval 1.7236+-0.0773 1.7027+-0.2854 might be 1.0123x faster
div-boolean-double 5.5505+-0.1400 ? 5.6351+-0.1424 ? might be 1.0153x slower
div-boolean 9.9814+-0.1240 ? 10.1425+-0.1539 ? might be 1.0161x slower
double-get-by-val-out-of-bounds 6.1537+-0.2660 ? 6.1862+-0.1238 ?
double-pollution-getbyval 9.7312+-0.3615 ? 9.8408+-0.1945 ? might be 1.0113x slower
double-pollution-putbyoffset 5.6418+-0.3223 ? 5.7512+-0.1569 ? might be 1.0194x slower
double-real-use 39.2555+-0.3936 ? 39.6169+-0.7129 ?
double-to-int32-typed-array-no-inline 3.0451+-0.1491 ? 3.1473+-0.0865 ? might be 1.0336x slower
double-to-int32-typed-array 2.9482+-0.1652 2.9474+-0.1794
double-to-uint32-typed-array-no-inline 3.1115+-0.1482 ? 3.1973+-0.2006 ? might be 1.0276x slower
double-to-uint32-typed-array 2.8963+-0.1748 ? 2.9418+-0.1223 ? might be 1.0157x slower
elidable-new-object-dag 54.0412+-1.0622 ? 54.2830+-1.2758 ?
elidable-new-object-roflcopter 53.7482+-1.0681 ? 54.2342+-1.7990 ?
elidable-new-object-then-call 48.9013+-1.5729 ? 49.5427+-1.2354 ? might be 1.0131x slower
elidable-new-object-tree 62.7503+-0.8147 ! 65.2486+-0.8248 ! definitely 1.0398x slower
empty-string-plus-int 7.6225+-0.2046 7.5997+-0.2584
emscripten-cube2hash 45.1840+-0.7248 ? 45.5240+-0.4390 ?
exit-length-on-plain-object 18.6739+-0.4114 ? 19.2262+-1.2302 ? might be 1.0296x slower
external-arguments-getbyval 1.7640+-0.1286 ? 1.8151+-0.2030 ? might be 1.0290x slower
external-arguments-putbyval 3.2260+-0.1751 ? 3.2866+-0.2276 ? might be 1.0188x slower
fixed-typed-array-storage-var-index 1.6381+-0.1005 ? 1.7199+-0.0868 ? might be 1.0500x slower
fixed-typed-array-storage 1.2908+-0.0564 ? 1.3683+-0.1229 ? might be 1.0600x slower
Float32Array-matrix-mult 6.2230+-0.2717 ? 6.2550+-0.3331 ?
Float32Array-to-Float64Array-set 78.9798+-0.2140 78.6758+-1.1631
Float64Array-alloc-long-lived 94.3184+-1.6927 ? 94.8424+-3.1267 ?
Float64Array-to-Int16Array-set 93.7504+-3.0805 93.6881+-2.7074
fold-double-to-int 19.0367+-0.4022 ? 19.1760+-0.6585 ?
fold-get-by-id-to-multi-get-by-offset-rare-int
11.7715+-0.4970 ? 11.8060+-0.9742 ?
fold-get-by-id-to-multi-get-by-offset 9.6276+-0.2620 9.6132+-0.4834
fold-multi-get-by-offset-to-get-by-offset
9.3300+-0.6834 9.2772+-0.6616
fold-multi-get-by-offset-to-poly-get-by-offset
9.0733+-0.6307 ? 9.3145+-0.0645 ? might be 1.0266x slower
fold-multi-put-by-offset-to-poly-put-by-offset
9.7032+-0.1788 9.4863+-0.2358 might be 1.0229x faster
fold-multi-put-by-offset-to-put-by-offset
8.4797+-0.0798 8.4417+-0.2765
fold-multi-put-by-offset-to-replace-or-transition-put-by-offset
14.0189+-1.0837 ? 14.2297+-0.9740 ? might be 1.0150x slower
fold-put-by-id-to-multi-put-by-offset 10.2213+-0.1674 ? 10.3617+-0.6758 ? might be 1.0137x slower
fold-put-by-val-with-string-to-multi-put-by-offset
10.4869+-0.3102 ? 10.5432+-0.8574 ?
fold-put-by-val-with-symbol-to-multi-put-by-offset
10.7365+-0.4590 10.7050+-0.8155
fold-put-structure 7.8827+-0.8118 7.6942+-0.1282 might be 1.0245x faster
for-of-iterate-array-entries 16.6826+-0.6140 16.5429+-0.1666
for-of-iterate-array-keys 5.1823+-0.2120 5.1562+-0.1789
for-of-iterate-array-values 5.1611+-0.1357 ? 5.2052+-0.3852 ?
fround 18.8640+-0.8719 ? 19.2764+-1.0672 ? might be 1.0219x slower
ftl-library-inlining-dataview 93.0921+-0.6410 ? 94.2582+-2.7856 ? might be 1.0125x slower
ftl-library-inlining 129.5355+-32.7734 ? 131.9037+-13.6040 ? might be 1.0183x slower
function-call 15.0218+-0.3822 ? 15.1019+-0.2137 ?
function-dot-apply 3.1340+-0.3376 3.1036+-0.0761
function-test 4.4845+-0.1250 ? 4.9783+-1.7245 ? might be 1.1101x slower
function-with-eval 146.3682+-1.4935 ? 147.1374+-4.2266 ?
gcse-poly-get-less-obvious 24.8766+-0.1747 24.6876+-0.5344
gcse-poly-get 24.5870+-0.1933 ? 24.7530+-0.5955 ?
gcse 6.4228+-0.1070 6.3810+-0.0980
get-by-id-bimorphic-check-structure-elimination-simple
3.2191+-0.1702 3.1902+-0.1420
get-by-id-bimorphic-check-structure-elimination
8.2577+-0.1826 ? 8.4214+-0.0839 ? might be 1.0198x slower
get-by-id-chain-from-try-block 6.9084+-0.0416 6.7780+-0.2250 might be 1.0192x faster
get-by-id-check-structure-elimination 8.0172+-0.1950 ? 8.0704+-0.1440 ?
get-by-id-proto-or-self 20.9142+-2.5010 ? 21.1453+-2.6810 ? might be 1.0110x slower
get-by-id-quadmorphic-check-structure-elimination-simple
3.8829+-0.1625 ? 3.9500+-0.0751 ? might be 1.0173x slower
get-by-id-self-or-proto 21.4286+-3.6963 20.9987+-3.1180 might be 1.0205x faster
get-by-val-out-of-bounds 5.8392+-0.4038 ? 5.8917+-0.2262 ?
get-by-val-with-string-bimorphic-check-structure-elimination-simple
4.2742+-0.1284 ? 4.3142+-0.1782 ?
get-by-val-with-string-bimorphic-check-structure-elimination
10.1437+-0.2924 10.1345+-0.2469
get-by-val-with-string-chain-from-try-block
7.7554+-0.1515 7.7073+-0.2146
get-by-val-with-string-check-structure-elimination
9.2551+-0.2208 9.2445+-0.3326
get-by-val-with-string-proto-or-self 20.0782+-0.8870 ? 20.9498+-3.6699 ? might be 1.0434x slower
get-by-val-with-string-quadmorphic-check-structure-elimination-simple
4.7977+-0.1413 ? 4.8262+-0.1067 ?
get-by-val-with-string-self-or-proto 20.8973+-1.9607 ? 21.5134+-3.2013 ? might be 1.0295x slower
get-by-val-with-symbol-bimorphic-check-structure-elimination-simple
4.7748+-0.1371 4.7612+-0.1095
get-by-val-with-symbol-bimorphic-check-structure-elimination
19.3663+-0.4450 ? 19.5701+-0.4871 ? might be 1.0105x slower
get-by-val-with-symbol-chain-from-try-block
7.8145+-0.3819 ? 8.0042+-0.4132 ? might be 1.0243x slower
get-by-val-with-symbol-check-structure-elimination
18.5794+-0.2509 18.3350+-0.4655 might be 1.0133x faster
get-by-val-with-symbol-proto-or-self 20.3610+-1.3665 ? 21.6561+-2.9897 ? might be 1.0636x slower
get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple
5.7035+-0.1168 ? 5.7230+-0.1606 ?
get-by-val-with-symbol-self-or-proto 21.1887+-2.8359 20.4617+-0.2199 might be 1.0355x faster
get_callee_monomorphic 3.7474+-0.2068 3.6798+-0.1071 might be 1.0184x faster
get_callee_polymorphic 4.7731+-0.2831 4.7596+-0.1015
getter-no-activation 5.8510+-0.3127 ? 5.8790+-0.0862 ?
getter-prototype 14.2033+-0.4373 14.1389+-0.2406
getter-richards 130.1267+-4.4292 127.6689+-6.3784 might be 1.0193x faster
getter 7.4402+-0.1331 ? 7.4572+-0.1166 ?
global-object-access-with-mutating-structure
7.5618+-0.2010 ? 7.6537+-0.3098 ? might be 1.0122x slower
global-var-const-infer-fire-from-opt 1.4100+-0.2977 1.3825+-0.2350 might be 1.0199x faster
global-var-const-infer 1.0599+-0.1280 ? 1.1152+-0.1087 ? might be 1.0522x slower
hard-overflow-check-equal 60.4600+-0.4826 ? 60.8538+-1.8088 ?
hard-overflow-check 60.2836+-1.7588 ? 60.3361+-1.8415 ?
HashMap-put-get-iterate-keys 33.8110+-0.7541 ? 33.9781+-0.5562 ?
HashMap-put-get-iterate 33.6450+-0.8278 33.2700+-0.6203 might be 1.0113x faster
HashMap-string-put-get-iterate 36.9426+-2.4992 ? 37.4179+-1.7641 ? might be 1.0129x slower
hoist-make-rope 13.0765+-1.5219 12.1495+-0.8763 might be 1.0763x faster
hoist-poly-check-structure-effectful-loop
6.6782+-0.1737 ? 6.6833+-0.2162 ?
hoist-poly-check-structure 5.0175+-0.2020 ? 5.1312+-0.1272 ? might be 1.0227x slower
imul-double-only 8.7800+-0.2944 ? 9.1215+-0.3723 ? might be 1.0389x slower
imul-int-only 10.5558+-0.3867 ? 10.6564+-0.6530 ?
imul-mixed 7.8847+-0.1479 ? 8.5661+-0.9432 ? might be 1.0864x slower
in-four-cases 25.2771+-0.4533 ? 25.3773+-0.1168 ?
in-one-case-false 14.8396+-0.2734 14.7167+-0.1469
in-one-case-true 14.9918+-0.9301 14.9078+-0.0656
in-two-cases 15.4725+-0.3908 15.4370+-0.2689
indexed-properties-in-objects 3.8207+-0.0599 ? 3.8942+-0.0742 ? might be 1.0192x slower
infer-closure-const-then-mov-no-inline 4.8735+-0.0286 ? 4.9064+-0.0954 ?
infer-closure-const-then-mov 21.5792+-0.3400 ? 22.0696+-1.6182 ? might be 1.0227x slower
infer-closure-const-then-put-to-scope-no-inline
15.6147+-0.2048 ? 15.7830+-0.1540 ? might be 1.0108x slower
infer-closure-const-then-put-to-scope 28.0709+-0.2021 ? 28.2794+-0.7872 ?
infer-closure-const-then-reenter-no-inline
70.7915+-0.2727 ? 70.9719+-0.3063 ?
infer-closure-const-then-reenter 32.7182+-0.4137 32.3308+-1.5897 might be 1.0120x faster
infer-constant-global-property 4.8712+-0.1624 ? 4.9017+-0.1474 ?
infer-constant-property 3.4046+-0.1113 3.3521+-0.1851 might be 1.0157x faster
infer-one-time-closure-ten-vars 11.4140+-0.3681 11.3251+-0.3175
infer-one-time-closure-two-vars 10.8627+-0.5122 10.6718+-0.6652 might be 1.0179x faster
infer-one-time-closure 10.7178+-0.1775 ? 10.8133+-0.3497 ?
infer-one-time-deep-closure 18.2063+-0.5893 17.9438+-0.6596 might be 1.0146x faster
inline-arguments-access 5.9609+-0.1595 ? 6.1211+-0.1870 ? might be 1.0269x slower
inline-arguments-aliased-access 6.0837+-0.2128 ? 6.2505+-0.2303 ? might be 1.0274x slower
inline-arguments-local-escape 6.1401+-0.1727 ? 6.1685+-0.4340 ?
inline-get-scoped-var 5.7383+-0.1515 5.7112+-0.0457
inlined-put-by-id-transition 17.1307+-0.3459 ? 17.1511+-0.1765 ?
inlined-put-by-val-with-string-transition
114.3830+-6.4419 ? 117.9223+-5.7117 ? might be 1.0309x slower
inlined-put-by-val-with-symbol-transition
109.5823+-6.1014 ? 113.1262+-4.8190 ? might be 1.0323x slower
int-or-other-abs-then-get-by-val 6.5796+-0.1552 ? 6.6555+-0.1339 ? might be 1.0115x slower
int-or-other-abs-zero-then-get-by-val 27.5446+-0.4873 ? 27.7777+-0.8846 ?
int-or-other-add-then-get-by-val 6.0157+-0.1155 ? 6.1085+-0.0462 ? might be 1.0154x slower
int-or-other-add 8.2922+-0.1273 8.2055+-0.1984 might be 1.0106x faster
int-or-other-div-then-get-by-val 5.0861+-0.0717 5.0529+-0.2277
int-or-other-max-then-get-by-val 5.0404+-0.0990 ? 5.1484+-0.1040 ? might be 1.0214x slower
int-or-other-min-then-get-by-val 5.1449+-0.1694 ? 5.1847+-0.1172 ?
int-or-other-mod-then-get-by-val 5.0728+-0.2710 4.9891+-0.1989 might be 1.0168x faster
int-or-other-mul-then-get-by-val 5.0888+-0.1690 ? 5.1559+-0.0353 ? might be 1.0132x slower
int-or-other-neg-then-get-by-val 5.6775+-0.0913 ? 5.7433+-0.0780 ? might be 1.0116x slower
int-or-other-neg-zero-then-get-by-val 27.6607+-0.4035 ? 27.9297+-0.6148 ?
int-or-other-sub-then-get-by-val 6.1187+-0.0402 6.1034+-0.0579
int-or-other-sub 5.3409+-0.2102 5.3207+-0.1465
int-overflow-local 6.0917+-0.0884 ? 6.2495+-0.3135 ? might be 1.0259x slower
Int16Array-alloc-long-lived 65.4407+-0.6280 ? 65.9910+-0.4964 ?
Int16Array-bubble-sort-with-byteLength 35.0176+-0.3453 ? 35.7781+-1.5192 ? might be 1.0217x slower
Int16Array-bubble-sort 34.9700+-0.1391 ? 35.0272+-0.2580 ?
Int16Array-load-int-mul 1.9973+-0.0738 ? 2.0782+-0.1583 ? might be 1.0405x slower
Int16Array-to-Int32Array-set 71.9913+-0.8145 ? 72.6465+-1.2069 ?
Int32Array-alloc-large 32.8768+-1.0092 ? 33.8290+-2.6778 ? might be 1.0290x slower
Int32Array-alloc-long-lived 75.3970+-3.3213 74.7645+-0.7745
Int32Array-alloc 4.4984+-0.0660 ? 4.6203+-0.2741 ? might be 1.0271x slower
Int32Array-Int8Array-view-alloc 9.3253+-0.4487 9.1780+-0.1329 might be 1.0160x faster
int52-spill 7.1403+-0.2436 ? 7.2697+-0.1474 ? might be 1.0181x slower
Int8Array-alloc-long-lived 58.2586+-1.2810 ? 58.3925+-1.1054 ?
Int8Array-load-with-byteLength 4.8538+-0.1546 ? 4.8808+-0.1958 ?
Int8Array-load 4.8267+-0.1046 ? 4.8339+-0.0705 ?
integer-divide 14.1480+-0.1135 13.9567+-0.0822 might be 1.0137x faster
integer-modulo 2.7315+-0.0792 ? 2.8090+-0.1162 ? might be 1.0284x slower
is-boolean-fold-tricky 5.6492+-0.2014 ? 5.6583+-0.1570 ?
is-boolean-fold 4.0565+-0.0920 4.0261+-0.0917
is-function-fold-tricky-internal-function
15.1768+-0.7153 14.8912+-0.1649 might be 1.0192x faster
is-function-fold-tricky 5.7668+-0.1513 ? 5.8277+-0.1530 ? might be 1.0106x slower
is-function-fold 4.0627+-0.1606 4.0580+-0.1062
is-number-fold-tricky 5.6876+-0.1414 ? 5.6945+-0.1246 ?
is-number-fold 4.0385+-0.1321 ? 4.1057+-0.0907 ? might be 1.0166x slower
is-object-or-null-fold-functions 4.1446+-0.1846 ? 4.1472+-0.1345 ?
is-object-or-null-fold-less-tricky 5.8080+-0.1104 5.7712+-0.1857
is-object-or-null-fold-tricky 7.4338+-0.1782 ? 7.4620+-0.1432 ?
is-object-or-null-fold 4.0812+-0.1433 4.0163+-0.0449 might be 1.0162x faster
is-object-or-null-trickier-function 5.8040+-0.0482 ? 5.8326+-0.0781 ?
is-object-or-null-trickier-internal-function
15.5937+-0.1726 ? 15.6030+-0.2450 ?
is-object-or-null-tricky-function 5.8270+-0.0685 5.7928+-0.1258
is-object-or-null-tricky-internal-function
11.4726+-0.1932 11.3204+-0.2569 might be 1.0134x faster
is-string-fold-tricky 5.7000+-0.0526 5.6727+-0.1572
is-string-fold 4.0598+-0.0507 4.0576+-0.1196
is-undefined-fold-tricky 4.8572+-0.0729 4.8502+-0.1989
is-undefined-fold 3.9895+-0.1178 ? 4.0062+-0.0833 ?
JSONP-negative-0 0.4133+-0.0742 ? 0.4587+-0.0402 ? might be 1.1099x slower
large-int-captured 6.4138+-0.6668 ? 6.7441+-0.2263 ? might be 1.0515x slower
large-int-neg 19.8516+-0.3593 19.6356+-0.4744 might be 1.0110x faster
large-int 17.8601+-0.4099 17.7438+-1.1059
load-varargs-elimination 29.8640+-1.0257 ? 30.3342+-1.8685 ? might be 1.0157x slower
logical-not-weird-types 5.1385+-0.2365 ? 5.1612+-0.1272 ?
logical-not 6.6078+-0.3135 ? 6.6868+-0.3499 ? might be 1.0120x slower
lots-of-fields 16.1671+-0.4559 ? 16.2050+-0.3527 ?
make-indexed-storage 4.1417+-0.4605 ? 4.3248+-0.1302 ? might be 1.0442x slower
make-rope-cse 6.6580+-0.1481 6.6235+-0.2081
marsaglia-larger-ints 53.5493+-0.8255 ? 54.2161+-2.4547 ? might be 1.0125x slower
marsaglia-osr-entry 31.1308+-15.7311 26.2458+-0.4494 might be 1.1861x faster
math-with-out-of-bounds-array-values 33.2242+-1.9253 32.3027+-0.4613 might be 1.0285x faster
max-boolean 3.3350+-0.1026 ? 3.3630+-0.2236 ?
method-on-number 23.0524+-0.8926 23.0385+-0.8280
min-boolean 3.3583+-0.1683 ? 3.4529+-0.1220 ? might be 1.0282x slower
minus-boolean-double 4.3516+-0.1767 4.2438+-0.1137 might be 1.0254x faster
minus-boolean 3.4257+-0.1479 3.3100+-0.0671 might be 1.0350x faster
misc-strict-eq 46.2297+-1.3723 45.8906+-1.1330
mod-boolean-double 11.9110+-0.3685 ? 11.9793+-0.2826 ?
mod-boolean 9.0388+-0.4352 ? 9.2078+-0.1053 ? might be 1.0187x slower
mul-boolean-double 4.9370+-0.1819 ? 4.9413+-0.0530 ?
mul-boolean 3.6316+-0.0667 3.6168+-0.0787
neg-boolean 4.2172+-0.1181 ? 4.2320+-0.1103 ?
negative-zero-divide 0.6102+-0.1636 0.5792+-0.1328 might be 1.0534x faster
negative-zero-modulo 0.5063+-0.0202 ? 0.5460+-0.1367 ? might be 1.0785x slower
negative-zero-negate 0.5721+-0.1412 0.5478+-0.0978 might be 1.0443x faster
nested-function-parsing 72.0728+-0.4219 ? 72.3958+-0.4105 ?
new-array-buffer-dead 146.2168+-2.2701 145.1675+-1.4281
new-array-buffer-push 9.8545+-0.1700 ? 10.1403+-0.1619 ? might be 1.0290x slower
new-array-dead 19.0963+-1.8893 18.3168+-1.0613 might be 1.0426x faster
new-array-push 5.5561+-0.1481 5.4167+-0.2667 might be 1.0257x faster
no-inline-constructor 50.7375+-0.8967 50.2914+-0.3864
number-test 4.4644+-0.1121 4.4392+-0.1615
object-closure-call 7.8126+-0.1458 ? 7.8765+-0.0700 ?
object-get-own-property-symbols-on-large-array
5.1237+-0.5919 5.0742+-0.2733
object-test 4.2249+-0.2312 4.2098+-0.0991
obvious-sink-pathology-taken 172.8404+-4.0011 172.4941+-2.1343
obvious-sink-pathology 158.3254+-1.4669 ? 159.7570+-1.7128 ?
obviously-elidable-new-object 43.2120+-1.5581 ? 43.4961+-1.4111 ?
plus-boolean-arith 3.3420+-0.1929 3.3252+-0.1405
plus-boolean-double 4.3015+-0.0999 4.2901+-0.1269
plus-boolean 3.2446+-0.1412 3.1965+-0.1338 might be 1.0150x faster
poly-chain-access-different-prototypes-simple
5.0810+-0.1166 5.0374+-0.0825
poly-chain-access-different-prototypes 5.1033+-0.1141 ? 5.1947+-0.0884 ? might be 1.0179x slower
poly-chain-access-simpler 5.1234+-0.1584 5.1129+-0.0789
poly-chain-access 4.9783+-0.1343 4.9636+-0.1530
poly-stricteq 80.1172+-3.5774 79.6475+-2.3682
polymorphic-array-call 1.9498+-0.3202 ? 1.9592+-0.0953 ?
polymorphic-get-by-id 3.8221+-0.0784 ? 3.8912+-0.2038 ? might be 1.0181x slower
polymorphic-put-by-id 37.2547+-1.2830 36.0667+-2.2726 might be 1.0329x faster
polymorphic-put-by-val-with-string 38.0490+-4.9596 37.7552+-3.7658
polymorphic-put-by-val-with-symbol 39.6910+-3.9243 ? 40.2683+-1.7645 ? might be 1.0145x slower
polymorphic-structure 23.6878+-0.2442 23.4798+-0.2981
polyvariant-monomorphic-get-by-id 11.5134+-0.0756 ? 11.6885+-0.1888 ? might be 1.0152x slower
proto-getter-access 10.3953+-0.5266 10.2810+-0.3991 might be 1.0111x faster
prototype-access-with-mutating-prototype 7.5663+-0.4764 7.5572+-0.2775
put-by-id-replace-and-transition 12.6980+-0.5678 12.6730+-0.3493
put-by-id-slightly-polymorphic 3.5540+-0.0970 3.5434+-0.0790
put-by-id 18.4845+-0.8375 ? 18.9078+-0.8021 ? might be 1.0229x slower
put-by-val-direct 0.6017+-0.0945 ? 0.6047+-0.1298 ?
put-by-val-large-index-blank-indexing-type
8.4907+-0.3128 ? 8.6899+-0.5692 ? might be 1.0235x slower
put-by-val-machine-int 3.6626+-0.1386 ? 3.7459+-0.2997 ? might be 1.0227x slower
put-by-val-with-string-replace-and-transition
18.8735+-0.4719 ? 19.5501+-0.4321 ? might be 1.0359x slower
put-by-val-with-string-slightly-polymorphic
4.6506+-0.0434 4.6218+-0.0812
put-by-val-with-string 19.4742+-0.4781 19.3607+-0.2616
put-by-val-with-symbol-replace-and-transition
20.8197+-0.5530 ? 20.9518+-0.5820 ?
put-by-val-with-symbol-slightly-polymorphic
4.6487+-0.1842 ? 4.6762+-0.1238 ?
put-by-val-with-symbol 19.3850+-0.4845 ? 19.3936+-0.7593 ?
rare-osr-exit-on-local 16.8043+-0.5209 16.7222+-0.2299
register-pressure-from-osr 27.0998+-0.1271 ? 27.1456+-0.1920 ?
repeat-multi-get-by-offset 29.4512+-0.3222 29.0771+-0.3966 might be 1.0129x faster
setter-prototype 11.1748+-0.4941 ? 11.2009+-0.4376 ?
setter 6.8228+-0.1663 ? 6.9048+-0.1356 ? might be 1.0120x slower
simple-activation-demo 33.5602+-0.0627 33.4155+-0.1937
simple-getter-access 14.0812+-0.5172 ? 14.2283+-0.3098 ? might be 1.0104x slower
simple-poly-call-nested 9.0899+-0.2475 ? 9.2321+-0.3667 ? might be 1.0156x slower
simple-poly-call 1.8206+-0.0868 ? 1.8574+-0.1426 ? might be 1.0202x slower
sin-boolean 20.8203+-0.7948 ? 21.1702+-0.7888 ? might be 1.0168x slower
singleton-scope 84.4256+-1.3345 ? 84.9225+-2.8574 ?
sink-function 13.5368+-0.5343 13.5246+-0.4149
sink-huge-activation 20.2505+-0.9823 ? 20.6418+-1.3189 ? might be 1.0193x slower
sinkable-new-object-dag 84.5868+-0.6755 84.2952+-0.5284
sinkable-new-object-taken 67.0085+-1.2592 ? 67.4115+-1.3893 ?
sinkable-new-object 48.0883+-3.4321 47.6657+-4.0284
slow-array-profile-convergence 3.9409+-0.0954 3.9258+-0.2226
slow-convergence 3.8490+-0.1508 3.8125+-0.2461
slow-ternaries 33.2820+-0.5048 32.7756+-1.0019 might be 1.0155x faster
sorting-benchmark 25.3578+-0.8161 ? 25.4520+-1.0394 ?
sparse-conditional 1.7038+-0.0677 ? 1.7442+-0.1229 ? might be 1.0237x slower
splice-to-remove 19.1769+-0.2828 ? 19.1800+-0.1084 ?
string-char-code-at 20.8522+-0.2118 20.7590+-0.2139
string-concat-object 3.2493+-0.0870 3.1763+-0.1073 might be 1.0230x faster
string-concat-pair-object 3.1715+-0.1328 ? 3.1948+-0.1924 ?
string-concat-pair-simple 17.0702+-0.3368 16.9003+-0.2907 might be 1.0101x faster
string-concat-simple 17.4120+-0.4866 ? 17.5608+-0.7066 ?
string-cons-repeat 11.5793+-0.7387 11.5240+-0.1351
string-cons-tower 10.3281+-0.0970 ! 10.8531+-0.1027 ! definitely 1.0508x slower
string-equality 22.8758+-0.5852 ? 23.1566+-0.4394 ? might be 1.0123x slower
string-get-by-val-big-char 11.0356+-0.1645 10.9299+-0.1516
string-get-by-val-out-of-bounds-insane 5.0178+-0.1928 4.9861+-0.2782
string-get-by-val-out-of-bounds 6.9396+-0.0893 6.9014+-0.1616
string-get-by-val 4.7939+-0.1256 ? 4.8410+-0.1491 ?
string-hash 2.7419+-0.0736 ? 2.8688+-0.0706 ? might be 1.0463x slower
string-long-ident-equality 18.8074+-0.0862 18.7390+-0.1929
string-out-of-bounds 15.0411+-0.4715 ? 15.2696+-0.6961 ? might be 1.0152x slower
string-repeat-arith 42.7178+-1.3654 ? 42.9442+-0.4371 ?
string-sub 84.4343+-3.0118 ? 86.0114+-1.0327 ? might be 1.0187x slower
string-test 4.4930+-0.1272 4.4663+-0.0886
string-var-equality 59.5635+-2.9001 ? 60.2244+-1.6241 ? might be 1.0111x slower
structure-hoist-over-transitions 3.6000+-0.2475 ? 3.7130+-0.0466 ? might be 1.0314x slower
substring-concat-weird 58.0670+-0.2876 ? 58.9647+-2.4670 ? might be 1.0155x slower
substring-concat 62.3072+-0.2284 ! 62.7437+-0.1889 ! definitely 1.0070x slower
substring 69.2201+-0.3329 ? 69.3810+-0.9940 ?
switch-char-constant 3.4011+-0.1456 ? 3.4210+-0.1559 ?
switch-char 7.9564+-0.1473 ? 7.9640+-0.0499 ?
switch-constant 13.3135+-2.0429 ? 14.6697+-1.5656 ? might be 1.1019x slower
switch-string-basic-big-var 31.8267+-0.9428 ? 31.9996+-0.3666 ?
switch-string-basic-big 29.4371+-1.2160 ? 29.7672+-0.7792 ? might be 1.0112x slower
switch-string-basic-var 31.6559+-1.0026 ? 32.3504+-0.6846 ? might be 1.0219x slower
switch-string-basic 20.5031+-1.4892 20.0071+-1.0090 might be 1.0248x faster
switch-string-big-length-tower-var 28.1355+-0.9756 27.8248+-0.9752 might be 1.0112x faster
switch-string-length-tower-var 20.7993+-0.2221 ? 20.8152+-0.1714 ?
switch-string-length-tower 14.9489+-0.2551 ? 14.9540+-0.3016 ?
switch-string-short 15.2338+-0.2888 15.0000+-0.2771 might be 1.0156x faster
switch 16.2444+-1.5457 ? 16.7495+-1.9505 ? might be 1.0311x slower
tear-off-arguments-simple 4.4763+-0.2081 4.4656+-0.1902
tear-off-arguments 6.2977+-0.2889 ? 6.3038+-0.2952 ?
temporal-structure 16.6071+-0.4085 16.4213+-0.0995 might be 1.0113x faster
to-int32-boolean 21.3875+-0.6480 21.2475+-0.1689
try-catch-get-by-val-cloned-arguments 20.6373+-0.4093 20.6047+-0.6839
try-catch-get-by-val-direct-arguments 9.9358+-0.2242 ? 10.0714+-0.4843 ? might be 1.0136x slower
try-catch-get-by-val-scoped-arguments 11.4075+-0.2331 11.2610+-0.1621 might be 1.0130x faster
typed-array-get-set-by-val-profiling 32.4664+-1.6927 ? 32.5465+-0.7885 ?
undefined-property-access 469.5744+-8.8029 463.1611+-2.7299 might be 1.0138x faster
undefined-test 4.7151+-0.1559 4.6427+-0.1701 might be 1.0156x faster
unprofiled-licm 23.7433+-0.1846 23.6940+-0.6978
varargs-call 18.5705+-0.2302 18.4597+-0.2212
varargs-construct-inline 36.1083+-0.9512 36.0655+-0.3023
varargs-construct 30.1324+-0.9117 29.7595+-0.1950 might be 1.0125x faster
varargs-inline 12.4796+-0.2342 12.3530+-0.2095 might be 1.0103x faster
varargs-strict-mode 14.6041+-0.1320 ! 241.2838+-9.0598 ! definitely 16.5217x slower
varargs 14.5745+-0.2275 ? 14.5799+-0.1586 ?
weird-inlining-const-prop 3.1784+-0.0634 ? 3.2510+-0.1277 ? might be 1.0229x slower
<geometric> 11.7445+-0.0365 ! 11.8852+-0.0214 ! definitely 1.0120x slower
Baseline TailCallLLintBaseline
AsmBench:
bigfib.cpp 677.4565+-8.2618 673.8677+-32.1066
cray.c 618.7600+-9.8398 ? 621.1315+-1.9756 ?
dry.c 638.7906+-90.4474 ? 662.5519+-78.3183 ? might be 1.0372x slower
FloatMM.c 918.8600+-2.1928 917.6738+-1.6431
gcc-loops.cpp 5984.3683+-52.0262 5960.7186+-22.2085
n-body.c 1686.1657+-30.7672 1679.4186+-31.3262
Quicksort.c 568.8926+-12.4465 567.8512+-13.8601
stepanov_container.cpp 4848.8120+-79.3638 4843.8467+-18.5891
Towers.c 397.2208+-1.4369 ^ 394.4124+-0.7819 ^ definitely 1.0071x faster
<geometric> 1117.2533+-16.8660 ? 1119.2870+-16.8775 ? might be 1.0018x slower
Baseline TailCallLLintBaseline
CompressionBench:
huffman 80.1432+-1.3473 80.1425+-0.9337
arithmetic-simple 431.2031+-2.9249 ? 432.0532+-0.9470 ?
arithmetic-precise 359.8757+-1.2113 ? 361.7055+-3.9750 ?
arithmetic-complex-precise 363.4456+-6.6797 361.0577+-6.7346
arithmetic-precise-order-0 441.0519+-3.4260 440.1137+-2.0113
arithmetic-precise-order-1 416.1600+-2.3150 ? 422.9104+-6.1984 ? might be 1.0162x slower
arithmetic-precise-order-2 485.2374+-6.1892 ? 485.5505+-3.6091 ?
arithmetic-simple-order-1 494.8174+-2.0553 ? 500.0624+-8.3118 ? might be 1.0106x slower
arithmetic-simple-order-2 552.2460+-2.2475 ? 553.2711+-5.5514 ?
lz-string 446.0264+-20.1157 431.0753+-4.3037 might be 1.0347x faster
<geometric> 370.7313+-0.9445 370.4938+-0.8587 might be 1.0006x faster
Baseline TailCallLLintBaseline
Geomean of preferred means:
<scaled-result> 79.1708+-0.1081 ? 79.4588+-0.2945 ? might be 1.0036x slower
Comment on attachment 260971 [details] Prior patch with tabs removed. Attachment 260971 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/158658 New failing tests: js/dfg-strict-mode-to-this.html Created attachment 260976 [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
Comment on attachment 260971 [details] Prior patch with tabs removed. Attachment 260971 [details] did not pass mac-ews (mac): Output: http://webkit-queues.webkit.org/results/158696 New failing tests: js/dfg-strict-mode-to-this.html Created attachment 260978 [details]
Archive of layout-test-results from ews103 for mac-mavericks
The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103 Port: mac-mavericks Platform: Mac OS X 10.9.5
Created attachment 260985 [details] Updated patch Speculative fix for linux build. Turned LayoutTests/js/dfg-strict-mode-to-this.html into a simple test as it will never terminate without tail calls enabled for the DFG. Will restore and re-enable the test as part of https://bugs.webkit.org/show_bug.cgi?id=148663. Comment on attachment 260985 [details]
Updated patch
Seems super dangerous to land this, unless we also disable use of op_tail_call and op_tail_call_varargs. This is because this patch disables DFG/FTL when those opcodes are in use. Prior to this patch, such code would end up in the DFG/FTL just fine, because it would be using op_call/op_call_varargs instead. Otherwise, LGTM.
Is it possible to create an Options thing that disables this for now, say by not emitting op_tail_call in BytecodeGenerator? The new tests could be made to run with --enableTailCalls=true. When the DFG and FTL support is landed, we can turn it on. Anyway, such an option will be super useful in the future - if anyone claims to find a regression due to tail calls, we can just flip the switch to check if tail calls are at fault.
(In reply to comment #15) > Comment on attachment 260985 [details] > Updated patch > > Seems super dangerous to land this, unless we also disable use of > op_tail_call and op_tail_call_varargs. This is because this patch disables > DFG/FTL when those opcodes are in use. Prior to this patch, such code would > end up in the DFG/FTL just fine, because it would be using > op_call/op_call_varargs instead. Otherwise, LGTM. > > Is it possible to create an Options thing that disables this for now, say by > not emitting op_tail_call in BytecodeGenerator? The new tests could be made > to run with --enableTailCalls=true. When the DFG and FTL support is landed, > we can turn it on. Anyway, such an option will be super useful in the > future - if anyone claims to find a regression due to tail calls, we can > just flip the switch to check if tail calls are at fault. The patch already adds the enableTailCalls option. I changed its default value to false and modified the new tests accordingly. Updated performance results with tail calls disabled by default.
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, and Kraken on msaboff-pro (MacPro5,1).
VMs tested:
"Baseline" at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/jsc
"EnableTailCall" at /Volumes/Data/src/webkit/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/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 EnableTailCall
SunSpider:
3d-cube 7.9787+-0.3502 ? 8.1906+-0.3744 ? might be 1.0266x slower
3d-morph 8.1746+-0.3164 8.0234+-0.1431 might be 1.0188x faster
3d-raytrace 8.8362+-0.3590 ? 8.8875+-0.2331 ?
access-binary-trees 3.1159+-0.2532 3.0709+-0.2360 might be 1.0147x faster
access-fannkuch 8.7685+-0.2219 8.5602+-0.2567 might be 1.0243x faster
access-nbody 4.4216+-0.1088 4.2797+-0.0487 might be 1.0332x faster
access-nsieve 4.5527+-0.1635 4.4366+-0.1155 might be 1.0262x faster
bitops-3bit-bits-in-byte 1.7042+-0.1716 ? 1.7542+-0.1749 ? might be 1.0293x slower
bitops-bits-in-byte 5.6108+-0.0857 5.6000+-0.1137
bitops-bitwise-and 2.8146+-0.1993 2.7955+-0.2204
bitops-nsieve-bits 4.2871+-0.1013 ? 4.3180+-0.0781 ?
controlflow-recursive 3.3831+-0.0668 3.3395+-0.0341 might be 1.0131x faster
crypto-aes 6.3668+-0.3041 ? 6.5012+-0.1836 ? might be 1.0211x slower
crypto-md5 4.1866+-0.1507 ^ 3.8560+-0.1752 ^ definitely 1.0858x faster
crypto-sha1 3.4173+-0.1180 3.4067+-0.2076
date-format-tofte 12.6700+-1.1440 ? 13.1775+-0.8491 ? might be 1.0401x slower
date-format-xparb 7.8401+-0.1879 ? 7.8452+-0.2632 ?
math-cordic 4.4442+-0.2025 ? 4.5212+-0.1422 ? might be 1.0173x slower
math-partial-sums 9.9587+-0.1533 ? 10.0480+-0.1347 ?
math-spectral-norm 3.0797+-0.2335 ? 3.1287+-0.0763 ? might be 1.0159x slower
regexp-dna 10.3685+-0.3506 9.8422+-0.3228 might be 1.0535x faster
string-base64 6.8195+-0.1605 6.7132+-0.1649 might be 1.0158x faster
string-fasta 9.3681+-0.1838 9.1815+-0.1937 might be 1.0203x faster
string-tagcloud 12.9913+-0.5309 12.9171+-0.4813
string-unpack-code 27.2876+-0.5922 ? 27.9875+-0.6440 ? might be 1.0256x slower
string-validate-input 6.7988+-0.2010 ? 6.9005+-0.1366 ? might be 1.0150x slower
<arithmetic> 7.2787+-0.0503 ? 7.2801+-0.0688 ? might be 1.0002x slower
Baseline EnableTailCall
LongSpider:
3d-cube 1167.1637+-15.7118 1160.9732+-10.8831
3d-morph 1885.5887+-5.6235 ? 1888.7269+-4.5676 ?
3d-raytrace 1000.0950+-6.4235 ? 1001.0823+-19.5209 ?
access-binary-trees 1419.8430+-20.5413 ? 1422.2787+-17.1661 ?
access-fannkuch 451.7099+-22.5342 450.1942+-14.9763
access-nbody 1034.4722+-39.6714 1014.9007+-2.3640 might be 1.0193x faster
access-nsieve 684.3599+-19.7313 681.8265+-11.5708
bitops-3bit-bits-in-byte 44.8321+-0.5736 ? 44.9542+-0.5128 ?
bitops-bits-in-byte 340.5080+-9.0539 340.2966+-7.6170
bitops-nsieve-bits 624.3997+-20.1850 ? 628.6476+-23.1317 ?
controlflow-recursive 748.5463+-3.0073 743.8698+-3.2913
crypto-aes 907.0733+-28.1384 906.2454+-11.7713
crypto-md5 800.1708+-27.7225 792.1677+-17.4619 might be 1.0101x faster
crypto-sha1 1061.4943+-10.4350 ? 1061.6551+-12.9467 ?
date-format-tofte 1001.1060+-54.8127 990.3685+-7.6843 might be 1.0108x faster
date-format-xparb 1172.7764+-60.3822 ^ 1076.2301+-28.4371 ^ definitely 1.0897x faster
hash-map 233.0875+-2.0525 ? 234.2341+-1.5749 ?
math-cordic 646.3778+-5.3533 642.2267+-3.4693
math-partial-sums 1137.4988+-8.2042 ? 1141.1158+-10.4139 ?
math-spectral-norm 1077.2220+-34.7370 1065.6173+-3.6566 might be 1.0109x faster
string-base64 546.2556+-18.4637 539.5311+-7.9793 might be 1.0125x faster
string-fasta 583.9337+-10.6510 ? 586.0088+-12.0577 ?
string-tagcloud 284.1082+-5.3042 ? 290.3342+-7.3244 ? might be 1.0219x slower
<geometric> 672.1641+-3.1432 668.4708+-3.2632 might be 1.0055x faster
Baseline EnableTailCall
V8Spider:
crypto 72.1465+-1.3158 71.7795+-2.0447
deltablue 92.2687+-4.5636 91.3663+-0.9497
earley-boyer 64.4252+-1.4015 64.3504+-1.1525
raytrace 39.2795+-0.9601 39.0566+-1.0349
regexp 104.2842+-0.9249 ? 104.8156+-4.9734 ?
richards 83.3737+-0.8321 ? 83.4599+-1.6499 ?
splay 50.9180+-1.4405 ! 53.3694+-0.6103 ! definitely 1.0481x slower
<geometric> 69.0082+-0.2851 ? 69.3184+-0.3781 ? might be 1.0045x slower
Baseline EnableTailCall
Octane:
encrypt 0.30970+-0.00137 0.30709+-0.00646
decrypt 5.75351+-0.03406 ? 5.76574+-0.04003 ?
deltablue x2 0.26619+-0.01426 ? 0.26991+-0.01606 ? might be 1.0140x slower
earley 0.52744+-0.00658 0.52560+-0.01222
boyer 8.83008+-0.07762 ? 8.95108+-0.17284 ? might be 1.0137x slower
navier-stokes x2 6.39343+-0.02680 6.38559+-0.02329
raytrace x2 1.59858+-0.01950 ? 1.63518+-0.12742 ? might be 1.0229x slower
richards x2 0.17490+-0.00757 0.17275+-0.00129 might be 1.0124x faster
splay x2 0.52325+-0.01017 ! 0.57145+-0.01468 ! definitely 1.0921x slower
regexp x2 39.59903+-1.29465 39.37680+-1.75011
pdfjs x2 60.28340+-0.92062 ? 60.99022+-0.90931 ? might be 1.0117x slower
mandreel x2 68.88702+-0.91604 68.54950+-1.52330
gbemu x2 61.55142+-2.14390 ? 61.63182+-1.70110 ?
closure 0.92961+-0.01382 0.92818+-0.01003
jquery 12.11622+-0.31260 11.97052+-0.11198 might be 1.0122x faster
box2d x2 17.87444+-0.22994 17.69194+-0.08294 might be 1.0103x faster
zlib x2 561.83974+-39.47269 ? 579.08148+-9.27994 ? might be 1.0307x slower
typescript x2 1074.07153+-19.45717 ? 1081.31104+-29.93094 ?
<geometric> 9.14651+-0.09145 ? 9.22919+-0.08132 ? might be 1.0090x slower
Baseline EnableTailCall
Kraken:
ai-astar 332.627+-5.083 331.841+-1.412
audio-beat-detection 81.369+-2.814 80.468+-0.384 might be 1.0112x faster
audio-dft 132.461+-7.311 ? 133.882+-7.323 ? might be 1.0107x slower
audio-fft 58.759+-0.741 ? 59.308+-1.775 ?
audio-oscillator 102.651+-0.883 102.517+-0.961
imaging-darkroom 96.495+-1.032 96.354+-0.922
imaging-desaturate 90.172+-3.322 89.900+-1.002
imaging-gaussian-blur 144.685+-1.062 ? 144.884+-1.959 ?
json-parse-financial 69.946+-1.008 69.765+-2.538
json-stringify-tinderbox 40.982+-1.049 40.879+-0.192
stanford-crypto-aes 64.921+-1.095 ? 65.021+-2.253 ?
stanford-crypto-ccm 59.481+-3.459 59.009+-3.346
stanford-crypto-pbkdf2 145.604+-1.968 143.560+-4.133 might be 1.0142x faster
stanford-crypto-sha256-iterative 58.433+-2.225 57.320+-0.830 might be 1.0194x faster
<arithmetic> 105.613+-0.222 105.336+-0.645 might be 1.0026x faster
Baseline EnableTailCall
Geomean of preferred means:
<scaled-result> 50.4289+-0.2223 ? 50.4848+-0.2794 ? might be 1.0011x slower
Committed r189774: <http://trac.webkit.org/changeset/189774> This broke CLOOP build with many errors: https://build.webkit.org/builders/Apple%20Yosemite%20LLINT%20CLoop%20%28BuildAndTest%29/builds/9168/steps/compile-webkit/logs/stdio A buildfix landed in http://trac.webkit.org/changeset/189805 .. but the CLOOP build is still broken, I assume it fixed an other issue. (In reply to comment #18) > Committed r189774: <http://trac.webkit.org/changeset/189774> It made Speedometer/Full.html crash, see bug149162 for details. (In reply to comment #19) > This broke CLOOP build with many errors: > > https://build.webkit.org/builders/ > Apple%20Yosemite%20LLINT%20CLoop%20%28BuildAndTest%29/builds/9168/steps/ > compile-webkit/logs/stdio Tracked in https://bugs.webkit.org/show_bug.cgi?id=149171. Patch in the works. Comment on attachment 260985 [details] Updated patch View in context: https://bugs.webkit.org/attachment.cgi?id=260985&action=review > Source/JavaScriptCore/jit/JITOperations.cpp:856 > - return reinterpret_cast<char*>(vm->getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress()); > + return encodeResult( > + vm->getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress(), > + reinterpret_cast<void*>(KeepTheFrame)); > } > } else { > #if ENABLE(WEBASSEMBLY) Please also update the code in #if ENABLE(WEBASSEMBLY) to use encodeResult(). Rolled out in r189848 <http://trac.webkit.org/changeset/189848> Committed r189884: <http://trac.webkit.org/changeset/189884> |