| Summary: | [ES6] Implement @@search | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | WebKit | Reporter: | Yusuke Suzuki <ysuzuki> | ||||||||||||||||||||||
| Component: | JavaScriptCore | Assignee: | Yusuke Suzuki <ysuzuki> | ||||||||||||||||||||||
| Status: | RESOLVED FIXED | ||||||||||||||||||||||||
| Severity: | Normal | CC: | benjamin, buildbot, commit-queue, darin, fpizlo, ggaren, joepeck, keith_miller, mark.lam, msaboff, rniwa, saam | ||||||||||||||||||||||
| Priority: | P2 | ||||||||||||||||||||||||
| Version: | 528+ (Nightly build) | ||||||||||||||||||||||||
| Hardware: | Unspecified | ||||||||||||||||||||||||
| OS: | Unspecified | ||||||||||||||||||||||||
| Bug Depends on: | 140855, 143923, 153544 | ||||||||||||||||||||||||
| Bug Blocks: | |||||||||||||||||||||||||
| Attachments: |
|
||||||||||||||||||||||||
|
Description
Yusuke Suzuki
2015-04-17 11:47:42 PDT
Created attachment 251091 [details]
Patch
Comment on attachment 251091 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=251091&action=review Added comments. > Source/JavaScriptCore/builtins/String.prototype.js:39 > + return @RegExp(regexp, undefined)[@symbolSearch](string); Before looking up @symbolSearch, ToString(this) should be called. So we use `var string` variable. > Source/JavaScriptCore/runtime/RegExpPrototype.cpp:177 > + return JSValue::encode(result ? jsNumber(result.start) : jsNumber(-1)); Just move the actual matching code from String.prototype.search to RegExp.prototype[@@search]. Attachment 251091 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/runtime/StringPrototype.cpp:96: Bad include order. Mixing system and custom headers. [build/include_order] [4]
Total errors found: 1 in 14 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 251092 [details]
Patch
Attachment 251092 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/runtime/StringPrototype.cpp:96: Bad include order. Mixing system and custom headers. [build/include_order] [4]
Total errors found: 1 in 15 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 251092 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=251092&action=review > Source/JavaScriptCore/builtins/String.prototype.js:38 > + var string = this + ''; Before looking up @symbolSearch, ToString(this) should be called. So we use `var string` variable. > Source/JavaScriptCore/runtime/RegExpPrototype.cpp:177 > + return JSValue::encode(result ? jsNumber(result.start) : jsNumber(-1)); Just move the actual matching code from String.prototype.search to RegExp.prototype[@@search]. Comment on attachment 251092 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=251092&action=review >> Source/JavaScriptCore/runtime/RegExpPrototype.cpp:177 >> + return JSValue::encode(result ? jsNumber(result.start) : jsNumber(-1)); > > Just move the actual matching code from String.prototype.search to RegExp.prototype[@@search]. To follow the spec more precisely, we need to call "exec" method in this @@search. (RegExpExec) http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexpexec But here, in this patch, I just moved the implementation of String.prototype.search to RegExp.prototype[@@search]. I'm now considering implement it in the subsequent patch. And at that time, I think we can extract this method into JS implementation. (calling exec) Comment on attachment 251092 [details] Patch Attachment 251092 [details] did not pass mac-ews (mac): Output: http://webkit-queues.appspot.com/results/5613486746894336 New failing tests: js/dom/string-prototype-properties.html sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A7.html sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T5.html js/Object-getOwnPropertyNames.html sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T3.html Created attachment 251095 [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 251092 [details] Patch Attachment 251092 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.appspot.com/results/4638089137881088 New failing tests: js/dom/string-prototype-properties.html sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A7.html sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T3.html js/Object-getOwnPropertyNames.html sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T5.html Created attachment 251096 [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
In sputnik tests, it requires that String.prototype.search cannot be used as constructor. When defining builtin functions with builtins/*.js, we need to reify the function with no [[Construct]]. After https://bugs.webkit.org/show_bug.cgi?id=140855 is done, we can implement it by extending that JSArrowFunction implementation. (by extending it to JSNonConstructibleFunction) And it seems that there's a breaking change from ES5. Maybe, it's spec issue I think. I've reported. https://mail.mozilla.org/pipermail/es-discuss/2015-April/042617.html Confirmed as a spec issue. Filed. https://bugs.ecmascript.org/show_bug.cgi?id=4327 (In reply to comment #14) > Confirmed as a spec issue. Filed. > https://bugs.ecmascript.org/show_bug.cgi?id=4327 Seems the spec issue was resolved! (In reply to comment #15) > (In reply to comment #14) > > Confirmed as a spec issue. Filed. > > https://bugs.ecmascript.org/show_bug.cgi?id=4327 > > Seems the spec issue was resolved! Yay! I'll restart this issue :) Created attachment 270819 [details]
Patch
Comment on attachment 270819 [details] Patch Attachment 270819 [details] did not pass mac-ews (mac): Output: http://webkit-queues.webkit.org/results/796276 New failing tests: sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T3.html js/Object-getOwnPropertyNames.html js/dom/string-prototype-properties.html Created attachment 270821 [details]
Archive of layout-test-results from ews102 for mac-yosemite
The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews102 Port: mac-yosemite Platform: Mac OS X 10.10.5
Comment on attachment 270819 [details] Patch Attachment 270819 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/796282 New failing tests: sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T3.html js/Object-getOwnPropertyNames.html js/dom/string-prototype-properties.html Created attachment 270822 [details]
Archive of layout-test-results from ews106 for mac-yosemite-wk2
The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews106 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Comment on attachment 270819 [details] Patch Attachment 270819 [details] did not pass mac-debug-ews (mac): Output: http://webkit-queues.webkit.org/results/796277 New failing tests: sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A1_T3.html js/Object-getOwnPropertyNames.html js/dom/string-prototype-properties.html Created attachment 270823 [details]
Archive of layout-test-results from ews116 for mac-yosemite
The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews116 Port: mac-yosemite Platform: Mac OS X 10.10.5
Created attachment 270834 [details]
Patch
Performance result.
I added crafted benchmark, v8-regexp-search. It utilizes String.prototype.search.
v8-regexp-search 65.5460+-5.2629 ? 66.4523+-5.5161 ? might be 1.0138x slower
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on yusuke (MacBookPro8,2).
VMs tested:
"Baseline" at /Users/yusuke/dev/WebKit/WebKitBuild/search-master/Release/jsc
"Mine" at /Users/yusuke/dev/WebKit/WebKitBuild/search/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 Mine
SunSpider:
3d-cube 6.3377+-0.2235 ? 6.4638+-0.4606 ? might be 1.0199x slower
3d-morph 7.6943+-2.6682 6.8605+-1.4441 might be 1.1215x faster
3d-raytrace 7.8534+-0.4472 7.7148+-0.1262 might be 1.0180x faster
access-binary-trees 3.0305+-1.0342 2.6845+-0.0758 might be 1.1289x faster
access-fannkuch 7.4172+-0.1247 7.3678+-0.0693
access-nbody 3.4612+-0.1348 3.4247+-0.0779 might be 1.0106x faster
access-nsieve 3.5342+-0.2578 ? 3.9200+-1.5287 ? might be 1.1092x slower
bitops-3bit-bits-in-byte 1.6829+-0.3769 ? 1.8923+-0.4474 ? might be 1.1245x slower
bitops-bits-in-byte 3.7626+-0.1522 ? 3.8180+-0.1111 ? might be 1.0147x slower
bitops-bitwise-and 2.5804+-0.0530 ? 3.1833+-2.1904 ? might be 1.2336x slower
bitops-nsieve-bits 3.7141+-0.1435 3.6872+-0.1723
controlflow-recursive 2.9236+-0.0850 2.8967+-0.1171
crypto-aes 5.1791+-0.0489 5.1736+-0.0341
crypto-md5 3.2570+-0.1208 3.2500+-0.0777
crypto-sha1 3.3605+-1.2852 3.1961+-0.8394 might be 1.0514x faster
date-format-tofte 10.8261+-0.4348 10.7884+-0.4399
date-format-xparb 7.2274+-1.9578 5.9661+-0.4108 might be 1.2114x faster
math-cordic 3.5789+-0.1219 ? 3.6296+-0.1025 ? might be 1.0142x slower
math-partial-sums 6.3834+-0.2472 6.2631+-0.1853 might be 1.0192x faster
math-spectral-norm 3.1851+-1.1141 2.9590+-0.3508 might be 1.0764x faster
regexp-dna 7.6841+-0.1113 ? 7.8148+-0.6419 ? might be 1.0170x slower
string-base64 5.5702+-0.1637 ? 5.5867+-0.1884 ?
string-fasta 7.7756+-0.8972 7.4633+-0.5687 might be 1.0419x faster
string-tagcloud 10.2697+-1.0098 ? 11.1000+-3.5441 ? might be 1.0808x slower
string-unpack-code 21.8528+-0.9652 ? 21.9866+-0.6721 ?
string-validate-input 5.4295+-0.2027 ? 5.5059+-0.2942 ? might be 1.0141x slower
<arithmetic> 5.9835+-0.1762 5.9460+-0.2162 might be 1.0063x faster
Baseline Mine
LongSpider:
3d-cube 961.8753+-19.0548 959.8923+-20.6039
3d-morph 710.2819+-4.1610 ? 711.7387+-16.7087 ?
3d-raytrace 799.2826+-9.7448 ? 803.7628+-11.5439 ?
access-binary-trees 1133.1356+-22.2851 ? 1134.3456+-31.0891 ?
access-fannkuch 340.3119+-39.5925 339.6675+-34.3127
access-nbody 783.0571+-9.6523 777.0840+-15.8945
access-nsieve 532.6365+-10.4188 523.7375+-11.3638 might be 1.0170x faster
bitops-3bit-bits-in-byte 40.5703+-2.5895 39.6874+-0.5150 might be 1.0222x faster
bitops-bits-in-byte 132.6360+-3.5928 132.3947+-6.7776
bitops-nsieve-bits 441.6688+-7.3704 436.6715+-3.4507 might be 1.0114x faster
controlflow-recursive 548.7934+-4.4869 544.6309+-8.7549
crypto-aes 866.6176+-19.6105 861.7650+-19.6179
crypto-md5 778.9880+-45.3174 770.4333+-9.7262 might be 1.0111x faster
crypto-sha1 917.8370+-13.3402 917.3574+-9.3456
date-format-tofte 914.9749+-16.0226 ? 917.2009+-38.8062 ?
date-format-xparb 909.4414+-23.9299 907.6409+-28.4740
hash-map 197.9110+-9.0362 193.8398+-6.0086 might be 1.0210x faster
math-cordic 600.5258+-41.0736 584.7380+-8.7319 might be 1.0270x faster
math-partial-sums 595.5457+-6.6708 593.2845+-8.8296
math-spectral-norm 912.0503+-5.3180 ? 920.2176+-14.7817 ?
string-base64 514.3540+-26.0966 505.8887+-13.3387 might be 1.0167x faster
string-fasta 453.8118+-5.6626 450.4297+-7.4505
string-tagcloud 210.3441+-1.3165 ? 214.2868+-6.6618 ? might be 1.0187x slower
<geometric> 509.8006+-3.7612 507.0247+-2.4585 might be 1.0055x faster
Baseline Mine
V8Spider:
crypto 49.5759+-1.6866 49.0425+-1.1998 might be 1.0109x faster
deltablue 61.8783+-0.5511 ? 63.1576+-2.2484 ? might be 1.0207x slower
earley-boyer 51.0607+-2.9537 50.2505+-0.7942 might be 1.0161x faster
raytrace 33.8643+-0.5983 32.9429+-0.7423 might be 1.0280x faster
regexp 81.2093+-4.8233 ? 81.4660+-3.2933 ?
richards 53.8290+-5.1249 51.9135+-0.8268 might be 1.0369x faster
splay 46.7820+-4.2093 ? 49.6263+-6.8097 ? might be 1.0608x slower
<geometric> 52.3732+-0.5288 52.3156+-0.5747 might be 1.0011x faster
Baseline Mine
Octane:
encrypt 0.21799+-0.00203 0.21326+-0.00275 might be 1.0222x faster
decrypt 3.78600+-0.05754 3.76094+-0.04593
deltablue x2 0.19223+-0.01318 ? 0.19442+-0.01486 ? might be 1.0114x slower
earley 0.41899+-0.01621 0.41369+-0.00901 might be 1.0128x faster
boyer 6.22753+-0.06272 6.20198+-0.13791
navier-stokes x2 5.35526+-0.09130 5.30427+-0.04931
raytrace x2 1.30747+-0.04423 1.30138+-0.02271
richards x2 0.10597+-0.00255 ? 0.10646+-0.00254 ?
splay x2 0.46204+-0.00856 0.45739+-0.00619 might be 1.0102x faster
regexp x2 32.37924+-0.75149 ? 32.43183+-0.54203 ?
pdfjs x2 48.79846+-0.58440 48.43458+-1.44202
mandreel x2 55.07352+-1.48369 ? 55.07784+-0.94528 ?
gbemu x2 34.60350+-0.38175 34.25497+-0.49267 might be 1.0102x faster
closure 0.74423+-0.00624 0.73978+-0.00973
jquery 9.60755+-0.11236 9.49980+-0.03268 might be 1.0113x faster
box2d x2 12.33089+-0.12719 12.32590+-0.25490
zlib x2 451.80149+-3.43066 ? 452.99402+-5.24321 ?
typescript x2 885.80792+-13.04573 ? 886.03223+-27.67804 ?
<geometric> 6.90132+-0.01967 6.87687+-0.04940 might be 1.0036x faster
Baseline Mine
Kraken:
ai-astar 114.969+-10.008 110.578+-5.058 might be 1.0397x faster
audio-beat-detection 63.522+-1.706 ? 63.848+-1.427 ?
audio-dft 113.292+-3.347 109.908+-0.512 might be 1.0308x faster
audio-fft 48.307+-0.080 ? 48.643+-0.501 ?
audio-oscillator 66.677+-3.398 ? 68.342+-4.972 ? might be 1.0250x slower
imaging-darkroom 73.737+-0.447 ? 77.010+-6.094 ? might be 1.0444x slower
imaging-desaturate 64.531+-0.513 ? 66.128+-5.497 ? might be 1.0247x slower
imaging-gaussian-blur 101.371+-4.476 ? 101.996+-8.953 ?
json-parse-financial 50.719+-2.450 ? 52.615+-5.516 ? might be 1.0374x slower
json-stringify-tinderbox 28.306+-0.283 ? 30.396+-4.073 ? might be 1.0739x slower
stanford-crypto-aes 49.368+-1.394 49.224+-1.196
stanford-crypto-ccm 46.402+-1.911 ? 47.814+-4.155 ? might be 1.0304x slower
stanford-crypto-pbkdf2 121.471+-1.847 ? 122.880+-4.081 ? might be 1.0116x slower
stanford-crypto-sha256-iterative 47.410+-0.948 ? 47.982+-1.268 ? might be 1.0121x slower
<arithmetic> 70.720+-0.609 ? 71.240+-0.562 ? might be 1.0074x slower
Baseline Mine
JSRegress:
abc-forward-loop-equal 45.9144+-3.8331 44.8073+-0.1870 might be 1.0247x faster
abc-postfix-backward-loop 58.3082+-0.5690 ? 58.4792+-0.4698 ?
abc-simple-backward-loop 44.7940+-0.3019 ? 46.0756+-3.8970 ? might be 1.0286x slower
abc-simple-forward-loop 46.0388+-5.1634 ? 46.4542+-5.3091 ?
abc-skippy-loop 31.3318+-1.2968 ? 32.2386+-4.2413 ? might be 1.0289x slower
abs-boolean 3.9437+-2.1754 3.5319+-0.3725 might be 1.1166x faster
adapt-to-double-divide 17.7616+-4.0334 15.0942+-0.4231 might be 1.1767x faster
aliased-arguments-getbyval 1.4296+-0.3191 ? 1.4691+-0.3191 ? might be 1.0276x slower
allocate-big-object 3.1992+-1.2071 3.1479+-1.0653 might be 1.0163x faster
arguments-named-and-reflective 9.4660+-0.2455 ? 9.8094+-1.1772 ? might be 1.0363x slower
arguments-out-of-bounds 10.7474+-0.1445 ? 10.8221+-0.2083 ?
arguments-strict-mode 8.7465+-0.1236 ? 8.7874+-0.3822 ?
arguments 8.3173+-0.1701 ? 8.3727+-0.3851 ?
arity-mismatch-inlining 1.2753+-0.2481 1.1095+-0.0306 might be 1.1494x faster
array-access-polymorphic-structure 9.1152+-0.2795 ? 9.2460+-0.2152 ? might be 1.0143x slower
array-nonarray-polymorhpic-access 29.2675+-0.3909 28.9053+-0.3534 might be 1.0125x faster
array-prototype-every 85.0281+-2.9808 82.6253+-2.5261 might be 1.0291x faster
array-prototype-forEach 83.5175+-0.2286 ^ 80.1199+-0.3068 ^ definitely 1.0424x faster
array-prototype-map 95.8123+-7.5487 95.7619+-7.5263
array-prototype-reduce 79.3527+-5.1163 ? 80.8514+-3.8119 ? might be 1.0189x slower
array-prototype-reduceRight 98.7382+-0.6015 ! 100.6700+-0.7289 ! definitely 1.0196x slower
array-prototype-some 85.7610+-6.4462 82.0185+-1.0542 might be 1.0456x faster
array-splice-contiguous 31.6597+-4.4734 28.7911+-1.5254 might be 1.0996x faster
array-with-double-add 4.9948+-1.4205 4.5840+-0.0786 might be 1.0896x faster
array-with-double-increment 4.4542+-1.4948 3.8741+-0.1148 might be 1.1497x faster
array-with-double-mul-add 5.6306+-0.1935 5.4868+-0.0768 might be 1.0262x faster
array-with-double-sum 3.6602+-0.2816 3.6345+-0.2542
array-with-int32-add-sub 8.1110+-0.1718 8.0800+-0.2796
array-with-int32-or-double-sum 4.5610+-1.6168 3.6005+-0.1390 might be 1.2668x faster
ArrayBuffer-DataView-alloc-large-long-lived
40.1167+-5.1758 ? 40.9768+-5.1927 ? might be 1.0214x slower
ArrayBuffer-DataView-alloc-long-lived 15.7653+-0.4414 ? 15.9228+-0.4259 ?
ArrayBuffer-Int32Array-byteOffset 4.9546+-1.4802 4.4870+-0.1562 might be 1.1042x faster
ArrayBuffer-Int8Array-alloc-large-long-lived
36.9379+-1.0129 36.5206+-0.4893 might be 1.0114x faster
ArrayBuffer-Int8Array-alloc-long-lived-buffer
25.1810+-2.2308 24.5692+-0.9533 might be 1.0249x faster
ArrayBuffer-Int8Array-alloc-long-lived 14.5302+-0.8984 14.3114+-0.2124 might be 1.0153x faster
ArrayBuffer-Int8Array-alloc 12.3480+-0.5075 12.1368+-0.1440 might be 1.0174x faster
arrowfunction-call 13.0112+-2.7029 12.3696+-0.3716 might be 1.0519x faster
asmjs_bool_bug 8.8652+-0.2063 8.7480+-0.1653 might be 1.0134x faster
assign-custom-setter-polymorphic 3.1810+-0.0371 ? 3.2148+-0.0323 ? might be 1.0106x slower
assign-custom-setter 5.8908+-3.6955 5.1753+-0.8089 might be 1.1383x faster
basic-set 9.8190+-2.4499 ? 10.0048+-2.5180 ? might be 1.0189x slower
big-int-mul 4.0755+-0.3950 3.9321+-0.1075 might be 1.0365x faster
boolean-test 3.9764+-0.3142 ? 4.1077+-0.3035 ? might be 1.0330x slower
branch-fold 4.6345+-0.9483 ? 4.7312+-1.3956 ? might be 1.0209x slower
branch-on-string-as-boolean 16.7437+-0.2500 ? 17.8929+-3.4343 ? might be 1.0686x slower
by-val-generic 5.4260+-0.3441 5.4094+-0.1557
call-spread-apply 31.0558+-0.7738 ? 32.1918+-6.0056 ? might be 1.0366x slower
call-spread-call 24.4682+-0.5951 ? 27.1597+-4.2637 ? might be 1.1100x slower
captured-assignments 0.7026+-0.2542 0.6842+-0.2670 might be 1.0269x faster
cast-int-to-double 5.8727+-0.2859 5.8457+-0.2838
cell-argument 4.4800+-0.1414 ? 4.5225+-0.2059 ?
cfg-simplify 3.7212+-1.1831 3.4025+-0.2743 might be 1.0937x faster
chain-getter-access 13.3802+-2.8238 ? 14.0152+-3.2267 ? might be 1.0475x slower
cmpeq-obj-to-obj-other 10.6517+-0.3444 10.5920+-0.3336
constant-test 5.4205+-1.5333 ? 6.3593+-3.4076 ? might be 1.1732x slower
create-lots-of-functions 9.7372+-1.6268 ? 11.3406+-2.3863 ? might be 1.1647x slower
cse-new-array-buffer 3.1985+-0.9694 2.8305+-0.0553 might be 1.1300x faster
cse-new-array 2.9902+-0.2188 ? 3.1428+-0.4838 ? might be 1.0510x slower
custom-setter-getter-as-put-get-by-id 0.8748+-0.3454 0.6885+-0.0964 might be 1.2706x faster
DataView-custom-properties 42.8818+-1.0114 ? 44.7820+-5.3853 ? might be 1.0443x slower
delay-tear-off-arguments-strictmode 15.9352+-0.2849 15.6786+-0.7579 might be 1.0164x faster
deltablue-varargs 225.2510+-9.1102 219.7664+-8.3048 might be 1.0250x faster
destructuring-arguments 211.0270+-11.9631 205.2657+-9.0152 might be 1.0281x faster
destructuring-parameters-overridden-by-function
0.7636+-0.2775 ? 0.7997+-0.3102 ? might be 1.0472x slower
destructuring-swap 5.2733+-0.0702 ? 5.2858+-0.0370 ?
direct-arguments-getbyval 1.4465+-0.2532 1.3715+-0.0959 might be 1.0547x faster
div-boolean-double 5.2042+-0.3054 4.9440+-0.0164 might be 1.0526x faster
div-boolean 8.5955+-2.0113 7.8979+-0.3106 might be 1.0883x faster
double-get-by-val-out-of-bounds 5.0531+-0.0881 ? 5.6095+-1.4503 ? might be 1.1101x slower
double-pollution-getbyval 8.9530+-0.3617 ? 8.9538+-0.1834 ?
double-pollution-putbyoffset 4.4011+-0.0613 ? 4.5032+-0.2173 ? might be 1.0232x slower
double-real-use 31.1172+-0.2339 ? 31.1347+-0.3749 ?
double-to-int32-typed-array-no-inline 2.5727+-0.2543 2.5269+-0.0674 might be 1.0181x faster
double-to-int32-typed-array 2.4421+-0.1305 ? 2.4738+-0.1557 ? might be 1.0130x slower
double-to-uint32-typed-array-no-inline 2.7175+-0.3154 ? 2.8832+-0.4184 ? might be 1.0610x slower
double-to-uint32-typed-array 2.5593+-0.2483 2.5113+-0.0994 might be 1.0191x faster
elidable-new-object-dag 44.4377+-6.2804 43.3427+-3.3645 might be 1.0253x faster
elidable-new-object-roflcopter 48.4294+-2.6287 47.7241+-6.3061 might be 1.0148x faster
elidable-new-object-then-call 34.6505+-0.7048 ? 34.8970+-0.8503 ?
elidable-new-object-tree 49.9383+-3.8477 ? 52.5785+-5.9149 ? might be 1.0529x slower
empty-string-plus-int 7.0276+-2.5269 ? 7.1671+-2.7757 ? might be 1.0199x slower
emscripten-cube2hash 41.8528+-0.6071 ? 41.8691+-0.6444 ?
exit-length-on-plain-object 20.4089+-4.4861 19.3256+-0.5428 might be 1.0561x faster
external-arguments-getbyval 1.4261+-0.0744 ? 1.6151+-0.4511 ? might be 1.1325x slower
external-arguments-putbyval 2.9096+-0.1981 2.7971+-0.0472 might be 1.0402x faster
fixed-typed-array-storage-var-index 1.5399+-0.1357 ? 1.8077+-0.3294 ? might be 1.1739x slower
fixed-typed-array-storage 1.1334+-0.0595 ? 1.2596+-0.3105 ? might be 1.1114x slower
Float32Array-matrix-mult 5.2906+-0.0769 ? 5.7694+-1.6663 ? might be 1.0905x slower
Float32Array-to-Float64Array-set 58.8690+-2.2788 57.1833+-3.9583 might be 1.0295x faster
Float64Array-alloc-long-lived 85.7731+-3.1996 ? 88.7636+-7.9739 ? might be 1.0349x slower
Float64Array-to-Int16Array-set 73.0713+-4.1162 72.3896+-5.2715
fold-double-to-int 19.5237+-4.3154 18.2813+-4.8467 might be 1.0680x faster
fold-get-by-id-to-multi-get-by-offset-rare-int
12.0187+-2.4399 11.8695+-1.8497 might be 1.0126x faster
fold-get-by-id-to-multi-get-by-offset 9.0234+-0.9233 ? 9.0695+-0.8380 ?
fold-multi-get-by-offset-to-get-by-offset
9.5501+-3.0005 ? 9.5579+-2.9269 ?
fold-multi-get-by-offset-to-poly-get-by-offset
9.0745+-3.1976 8.9458+-3.0167 might be 1.0144x faster
fold-multi-put-by-offset-to-poly-put-by-offset
10.0566+-2.1095 ? 11.3542+-1.0934 ? might be 1.1290x slower
fold-multi-put-by-offset-to-put-by-offset
11.0385+-4.9694 8.7928+-1.9367 might be 1.2554x faster
fold-multi-put-by-offset-to-replace-or-transition-put-by-offset
13.3180+-1.7122 12.8644+-0.3568 might be 1.0353x faster
fold-put-by-id-to-multi-put-by-offset 10.9088+-1.0928 10.3010+-0.2231 might be 1.0590x faster
fold-put-by-val-with-string-to-multi-put-by-offset
10.6429+-0.2567 ? 11.6247+-2.8442 ? might be 1.0922x slower
fold-put-by-val-with-symbol-to-multi-put-by-offset
10.8399+-0.6365 10.7727+-0.6007
fold-put-structure 6.5237+-0.2826 6.4946+-0.4541
for-of-iterate-array-entries 12.2953+-0.3558 12.0726+-0.3873 might be 1.0184x faster
for-of-iterate-array-keys 4.3207+-0.4062 ? 4.6379+-1.5208 ? might be 1.0734x slower
for-of-iterate-array-values 4.1431+-0.1753 4.1008+-0.0966 might be 1.0103x faster
fround 13.5975+-0.9469 12.8182+-0.6857 might be 1.0608x faster
ftl-library-inlining-dataview 74.2597+-4.6407 ? 74.8317+-4.9425 ?
ftl-library-inlining 28.4824+-0.1086 ? 29.3502+-2.9454 ? might be 1.0305x slower
ftl-polymorphic-bitand 151.1527+-9.9623 150.5075+-1.2611
ftl-polymorphic-bitor 152.0515+-10.3988 ? 152.1948+-5.0920 ?
ftl-polymorphic-bitxor 149.5263+-2.7904 ? 156.3403+-4.9558 ? might be 1.0456x slower
ftl-polymorphic-div 484.0727+-4.2256 ? 487.0164+-14.0763 ?
ftl-polymorphic-lshift 160.0480+-6.1362 ? 160.2780+-5.2555 ?
ftl-polymorphic-mul 241.8993+-5.6418 240.8753+-4.4293
ftl-polymorphic-rshift 161.4678+-9.9140 161.4056+-5.8523
ftl-polymorphic-StringFromCharCode 229.7033+-1.4594 ? 233.9083+-8.7358 ? might be 1.0183x slower
ftl-polymorphic-sub 183.7428+-1.0405 ? 185.6884+-4.4118 ? might be 1.0106x slower
ftl-polymorphic-urshift 175.1663+-4.2631 ? 175.2616+-1.3680 ?
function-call 12.4506+-0.1830 ? 14.5626+-4.1935 ? might be 1.1696x slower
function-dot-apply 3.0528+-1.4129 ? 3.1935+-1.3134 ? might be 1.0461x slower
function-test 3.9698+-0.3635 3.8599+-0.2147 might be 1.0285x faster
function-with-eval 124.0721+-8.3749 118.3466+-4.8874 might be 1.0484x faster
gcse-poly-get-less-obvious 21.2520+-3.5317 21.1284+-4.7531
gcse-poly-get 20.7524+-0.6595 20.2148+-0.4941 might be 1.0266x faster
gcse 4.5854+-0.1932 4.5178+-0.0691 might be 1.0150x faster
generator-create 1.2500+-0.6579 ? 1.2903+-0.3595 ? might be 1.0323x slower
generator-fib 130.8721+-23.0563 121.5987+-3.0477 might be 1.0763x faster
generator-function-create 6.5162+-0.9725 5.5835+-1.0869 might be 1.1671x faster
generator-sunspider-access-nsieve 6.9479+-0.0792 6.7545+-0.2059 might be 1.0286x faster
generator-with-several-types 413.7298+-17.2431 402.5157+-16.0698 might be 1.0279x faster
get-by-id-bimorphic-check-structure-elimination-simple
3.0513+-0.3685 2.9655+-0.1468 might be 1.0289x faster
get-by-id-bimorphic-check-structure-elimination
6.0131+-0.1824 5.9337+-0.0913 might be 1.0134x faster
get-by-id-chain-from-try-block 2.4901+-0.1543 2.4016+-0.0637 might be 1.0369x faster
get-by-id-check-structure-elimination 5.7067+-1.6553 4.8572+-0.1793 might be 1.1749x faster
get-by-id-proto-or-self 15.0183+-1.4275 14.6051+-1.3612 might be 1.0283x faster
get-by-id-quadmorphic-check-structure-elimination-simple
3.6300+-0.4431 3.5925+-0.4334 might be 1.0104x faster
get-by-id-self-or-proto 17.4030+-3.1625 15.2188+-2.1096 might be 1.1435x faster
get-by-val-out-of-bounds 5.1852+-0.6394 5.0617+-0.1795 might be 1.0244x faster
get-by-val-with-string-bimorphic-check-structure-elimination-simple
3.4835+-0.1425 ? 4.0372+-1.3772 ? might be 1.1590x slower
get-by-val-with-string-bimorphic-check-structure-elimination
7.8461+-0.7474 7.7827+-0.2414
get-by-val-with-string-chain-from-try-block
2.4683+-0.0889 ? 2.7994+-0.2486 ? might be 1.1342x slower
get-by-val-with-string-check-structure-elimination
6.9091+-0.5420 6.6290+-0.0990 might be 1.0423x faster
get-by-val-with-string-proto-or-self 15.2878+-1.3386 15.1003+-0.5832 might be 1.0124x faster
get-by-val-with-string-quadmorphic-check-structure-elimination-simple
3.9960+-0.2191 ? 4.4756+-1.4112 ? might be 1.1200x slower
get-by-val-with-string-self-or-proto 16.7213+-1.7736 15.8577+-0.2360 might be 1.0545x faster
get-by-val-with-symbol-bimorphic-check-structure-elimination-simple
4.0945+-0.2211 ^ 3.7783+-0.0663 ^ definitely 1.0837x faster
get-by-val-with-symbol-bimorphic-check-structure-elimination
14.6909+-1.6166 ? 15.9989+-5.5726 ? might be 1.0890x slower
get-by-val-with-symbol-chain-from-try-block
2.5698+-0.2750 ? 2.6143+-0.2660 ? might be 1.0173x slower
get-by-val-with-symbol-check-structure-elimination
13.8110+-0.2433 13.6171+-0.3983 might be 1.0142x faster
get-by-val-with-symbol-proto-or-self 15.8453+-3.6967 14.9894+-0.4583 might be 1.0571x faster
get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple
4.7875+-0.1918 ? 5.0873+-1.3489 ? might be 1.0626x slower
get-by-val-with-symbol-self-or-proto 16.5363+-1.2949 16.4496+-1.3241
get_callee_monomorphic 3.2662+-0.9363 ? 3.3309+-0.9986 ? might be 1.0198x slower
get_callee_polymorphic 4.1663+-0.3201 ? 4.8932+-1.4384 ? might be 1.1745x slower
getter-no-activation 4.5213+-0.1501 4.4681+-0.0865 might be 1.0119x faster
getter-prototype 7.9773+-0.4015 ? 8.7505+-2.2723 ? might be 1.0969x slower
getter-richards-try-catch 1308.7883+-14.4938 ? 1357.9363+-54.8224 ? might be 1.0376x slower
getter-richards 87.4506+-4.4891 84.9151+-4.0916 might be 1.0299x faster
getter 5.3493+-0.3744 5.2017+-0.2247 might be 1.0284x faster
global-object-access-with-mutating-structure
5.8431+-1.2226 ? 5.8983+-0.8512 ?
global-var-const-infer-fire-from-opt 1.0612+-0.2642 0.9748+-0.2638 might be 1.0886x faster
global-var-const-infer 0.9181+-0.2780 0.8364+-0.0428 might be 1.0976x faster
hard-overflow-check-equal 36.5839+-0.3549 36.1660+-0.1497 might be 1.0116x faster
hard-overflow-check 36.2505+-0.8441 36.2340+-0.6007
HashMap-put-get-iterate-keys 27.6500+-0.1939 ? 27.7352+-0.4369 ?
HashMap-put-get-iterate 27.8759+-1.2606 27.7290+-0.3276
HashMap-string-put-get-iterate 31.3319+-1.0829 30.9941+-0.5131 might be 1.0109x faster
hoist-make-rope 5.6232+-1.7045 4.9998+-0.1478 might be 1.1247x faster
hoist-poly-check-structure-effectful-loop
4.4017+-0.0344 ? 4.4581+-0.1964 ? might be 1.0128x slower
hoist-poly-check-structure 2.8162+-0.2046 2.6726+-0.0921 might be 1.0537x faster
imul-double-only 3.9450+-0.3051 ? 3.9466+-0.1982 ?
imul-int-only 6.2465+-0.6762 6.0150+-0.3640 might be 1.0385x faster
imul-mixed 4.7853+-1.5112 4.6305+-1.4899 might be 1.0334x faster
in-four-cases 20.1219+-2.7891 19.5275+-0.4904 might be 1.0304x faster
in-one-case-false 11.0905+-0.2682 ? 11.2197+-0.5195 ? might be 1.0117x slower
in-one-case-true 12.6767+-1.8095 11.2310+-0.4580 might be 1.1287x faster
in-two-cases 11.0530+-0.3179 ? 11.1452+-0.2511 ?
indexed-properties-in-objects 3.3083+-0.3433 ? 3.3112+-0.3844 ?
infer-closure-const-then-mov-no-inline 3.4887+-0.1622 3.4543+-0.2603
infer-closure-const-then-mov 10.1241+-0.1586 ? 11.2705+-3.7162 ? might be 1.1132x slower
infer-closure-const-then-put-to-scope-no-inline
14.5217+-3.8580 14.3928+-3.6191
infer-closure-const-then-put-to-scope 26.4589+-4.5095 24.2115+-0.0915 might be 1.0928x faster
infer-closure-const-then-reenter-no-inline
65.6696+-0.3239 ? 67.2125+-4.9944 ? might be 1.0235x slower
infer-closure-const-then-reenter 25.3560+-3.0174 ? 26.4175+-3.6642 ? might be 1.0419x slower
infer-constant-global-property 3.7549+-0.1036 3.7080+-0.0559 might be 1.0126x faster
infer-constant-property 3.7046+-1.9408 3.1223+-0.2433 might be 1.1865x faster
infer-one-time-closure-ten-vars 8.9175+-1.9967 8.1883+-0.0805 might be 1.0891x faster
infer-one-time-closure-two-vars 7.6218+-0.1671 ? 8.8898+-4.5271 ? might be 1.1664x slower
infer-one-time-closure 7.5728+-0.4530 7.4331+-0.0583 might be 1.0188x faster
infer-one-time-deep-closure 15.7299+-6.6916 15.2615+-4.5600 might be 1.0307x faster
inline-arguments-access 4.5811+-0.0143 ? 4.6867+-0.1194 ? might be 1.0231x slower
inline-arguments-aliased-access 4.7357+-0.2045 4.7257+-0.0270
inline-arguments-local-escape 4.6268+-0.0442 ! 4.7560+-0.0844 ! definitely 1.0279x slower
inline-get-scoped-var 3.9123+-0.1812 ? 4.0052+-0.2231 ? might be 1.0238x slower
inlined-put-by-id-transition 13.2477+-0.6322 ? 14.2612+-2.9355 ? might be 1.0765x slower
inlined-put-by-val-with-string-transition
56.3472+-5.2299 56.1547+-2.1138
inlined-put-by-val-with-symbol-transition
58.6595+-4.1758 57.8829+-3.0701 might be 1.0134x faster
instanceof-bound 22.9105+-0.4712 22.5967+-0.3768 might be 1.0139x faster
int-or-other-abs-then-get-by-val 5.3981+-0.1233 ? 5.4749+-0.2323 ? might be 1.0142x slower
int-or-other-abs-zero-then-get-by-val 20.6302+-1.9659 ? 22.7703+-5.1177 ? might be 1.1037x slower
int-or-other-add-then-get-by-val 5.9503+-0.8429 5.8180+-0.2384 might be 1.0227x faster
int-or-other-add 6.0054+-1.3561 5.6324+-0.2546 might be 1.0662x faster
int-or-other-div-then-get-by-val 4.8535+-1.4025 4.4070+-0.1015 might be 1.1013x faster
int-or-other-max-then-get-by-val 4.6750+-0.2764 ? 5.5473+-1.3692 ? might be 1.1866x slower
int-or-other-min-then-get-by-val 5.2548+-1.3613 ? 5.5328+-1.5869 ? might be 1.0529x slower
int-or-other-mod-then-get-by-val 4.6701+-1.2654 4.1495+-0.0546 might be 1.1255x faster
int-or-other-mul-then-get-by-val 4.2162+-0.1424 ? 5.0927+-1.5830 ? might be 1.2079x slower
int-or-other-neg-then-get-by-val 5.2538+-1.4396 5.1588+-1.3850 might be 1.0184x faster
int-or-other-neg-zero-then-get-by-val 19.7846+-0.4758 ? 19.8734+-0.1148 ?
int-or-other-sub-then-get-by-val 6.0208+-0.1634 ? 6.0917+-0.4701 ? might be 1.0118x slower
int-or-other-sub 4.9527+-1.3963 4.6443+-0.2378 might be 1.0664x faster
int-overflow-local 5.8382+-2.1774 5.5333+-1.6018 might be 1.0551x faster
Int16Array-alloc-long-lived 60.3386+-3.3816 60.3162+-2.6997
Int16Array-bubble-sort-with-byteLength 23.7524+-1.0889 ? 24.0829+-2.7922 ? might be 1.0139x slower
Int16Array-bubble-sort 21.6329+-3.4537 21.4202+-3.1549
Int16Array-load-int-mul 1.9468+-0.1961 ? 2.0336+-0.3690 ? might be 1.0445x slower
Int16Array-to-Int32Array-set 57.2671+-3.9542 54.2258+-0.3303 might be 1.0561x faster
Int32Array-alloc-large 28.4954+-2.6548 ? 29.1605+-2.8788 ? might be 1.0233x slower
Int32Array-alloc-long-lived 65.3981+-5.2254 ? 67.1017+-5.8837 ? might be 1.0261x slower
Int32Array-alloc 3.9786+-0.1080 3.9662+-0.0537
Int32Array-Int8Array-view-alloc 8.3052+-2.0882 7.6147+-0.2786 might be 1.0907x faster
int52-spill 6.0898+-0.5727 ? 6.3278+-1.2135 ? might be 1.0391x slower
Int8Array-alloc-long-lived 55.1894+-2.6362 54.5510+-2.7253 might be 1.0117x faster
Int8Array-load-with-byteLength 4.6470+-2.2191 ? 4.6772+-1.5445 ?
Int8Array-load 3.9377+-0.1406 ? 4.0344+-0.2100 ? might be 1.0246x slower
integer-divide 11.8014+-0.3214 ? 12.6174+-2.5055 ? might be 1.0691x slower
integer-modulo 2.2968+-0.0453 ? 2.3379+-0.0822 ? might be 1.0179x slower
is-boolean-fold-tricky 4.6316+-0.8449 ? 4.9431+-1.3459 ? might be 1.0672x slower
is-boolean-fold 4.8237+-2.6584 3.5448+-0.1367 might be 1.3608x faster
is-function-fold-tricky-internal-function
12.7017+-0.2189 ? 13.1133+-0.6269 ? might be 1.0324x slower
is-function-fold-tricky 4.5900+-0.1325 ? 4.9407+-0.9957 ? might be 1.0764x slower
is-function-fold 4.2617+-2.2311 4.0114+-0.1116 might be 1.0624x faster
is-number-fold-tricky 4.4229+-0.0837 ? 4.7910+-0.7572 ? might be 1.0832x slower
is-number-fold 3.4639+-0.0325 ? 3.4731+-0.0218 ?
is-object-or-null-fold-functions 3.6995+-0.1787 ? 5.4135+-1.6646 ? might be 1.4633x slower
is-object-or-null-fold-less-tricky 4.9782+-1.3567 ? 5.0588+-1.7034 ? might be 1.0162x slower
is-object-or-null-fold-tricky 6.2265+-0.3391 6.0272+-0.1517 might be 1.0331x faster
is-object-or-null-fold 4.2118+-1.8139 4.2032+-1.8005
is-object-or-null-trickier-function 5.7512+-1.2662 4.6641+-0.2451 might be 1.2331x faster
is-object-or-null-trickier-internal-function
20.5293+-4.5457 18.9985+-3.6406 might be 1.0806x faster
is-object-or-null-tricky-function 5.3751+-1.5337 4.5861+-0.1125 might be 1.1720x faster
is-object-or-null-tricky-internal-function
9.1747+-0.3515 ? 9.2267+-0.1982 ?
is-string-fold-tricky 4.4413+-0.1727 ? 5.3276+-1.5328 ? might be 1.1996x slower
is-string-fold 3.6294+-0.3497 ? 3.6920+-0.4256 ? might be 1.0172x slower
is-undefined-fold-tricky 3.8825+-0.1369 3.8686+-0.3007
is-undefined-fold 3.9559+-1.4266 3.4840+-0.1032 might be 1.1355x faster
JSONP-negative-0 0.4417+-0.1799 0.4094+-0.1773 might be 1.0790x faster
large-int-captured 3.7228+-0.0766 ? 4.1211+-1.2785 ? might be 1.1070x slower
large-int-neg 15.8687+-0.3451 15.6216+-0.4207 might be 1.0158x faster
large-int 14.8334+-4.1495 ? 16.5755+-4.7756 ? might be 1.1174x slower
load-varargs-elimination 24.3578+-4.7374 22.5225+-0.2660 might be 1.0815x faster
logical-not-weird-types 3.1910+-0.2040 ? 3.3063+-0.1624 ? might be 1.0361x slower
logical-not 4.6838+-0.1813 ? 4.8309+-0.4126 ? might be 1.0314x slower
lots-of-fields 13.5646+-0.2092 ? 13.6165+-1.3011 ?
make-indexed-storage 3.7242+-0.2673 3.6544+-0.1544 might be 1.0191x faster
make-rope-cse 5.1388+-0.1010 ? 5.2335+-0.1993 ? might be 1.0184x slower
map-for-each 6.7289+-1.3953 6.3618+-0.1103 might be 1.0577x faster
map-for-of 20.9565+-0.8627 ? 22.5366+-2.9605 ? might be 1.0754x slower
marsaglia-larger-ints 44.6020+-2.6732 ? 44.7546+-2.6291 ?
marsaglia-osr-entry 21.4074+-1.4969 ? 23.2797+-5.0350 ? might be 1.0875x slower
math-random 18.9503+-4.8990 16.7411+-0.5084 might be 1.1320x faster
math-with-out-of-bounds-array-values 31.3365+-4.7744 30.9017+-3.7242 might be 1.0141x faster
max-boolean 3.1035+-0.0283 ? 3.2017+-0.4813 ? might be 1.0316x slower
method-on-number 20.3855+-4.1152 19.2170+-0.4690 might be 1.0608x faster
min-boolean 3.0490+-0.1513 ? 3.1882+-0.3795 ? might be 1.0456x slower
minus-boolean-double 3.4485+-0.1205 ? 3.5327+-0.2915 ? might be 1.0244x slower
minus-boolean 2.9255+-0.0397 ? 3.0829+-0.4761 ? might be 1.0538x slower
misc-strict-eq 26.8630+-1.0841 ? 28.2942+-2.9709 ? might be 1.0533x slower
mod-boolean-double 10.1806+-0.2278 10.1320+-0.2821
mod-boolean 7.6649+-0.2719 7.6357+-0.1916
mul-boolean-double 4.0403+-0.2543 3.8814+-0.1564 might be 1.0409x faster
mul-boolean 3.8517+-1.5800 3.3097+-0.3907 might be 1.1638x faster
neg-boolean 3.8635+-1.4281 ? 3.9567+-1.3453 ? might be 1.0241x slower
negative-zero-divide 0.6824+-0.6333 0.4846+-0.0195 might be 1.4082x faster
negative-zero-modulo 0.4783+-0.0310 ? 0.6779+-0.1858 ? might be 1.4171x slower
negative-zero-negate 0.4787+-0.0172 ? 0.6315+-0.1823 ? might be 1.3193x slower
nested-function-parsing 43.5880+-0.5339 ? 46.6725+-5.4110 ? might be 1.0708x slower
new-array-buffer-dead 129.2833+-10.1718 126.6422+-11.5901 might be 1.0209x faster
new-array-buffer-push 8.0419+-0.2198 ? 8.1750+-0.1399 ? might be 1.0166x slower
new-array-dead 12.4172+-0.8011 12.1561+-0.2351 might be 1.0215x faster
new-array-push 5.0342+-0.1446 ? 5.4208+-1.0582 ? might be 1.0768x slower
no-inline-constructor 44.6799+-1.0832 42.1201+-3.5131 might be 1.0608x faster
number-test 4.0063+-0.2770 3.9038+-0.1009 might be 1.0263x faster
object-closure-call 6.3235+-0.1842 ? 6.3754+-0.0985 ?
object-get-own-property-symbols-on-large-array
3.9044+-0.4160 3.8047+-0.2844 might be 1.0262x faster
object-test 4.3492+-1.9064 3.9050+-0.3512 might be 1.1138x faster
obvious-sink-pathology-taken 175.2243+-6.9298 ? 181.2844+-8.8406 ? might be 1.0346x slower
obvious-sink-pathology 34.1396+-0.5052 ? 35.1399+-3.1791 ? might be 1.0293x slower
obviously-elidable-new-object 34.5126+-5.0571 34.3471+-5.7205
plus-boolean-arith 3.8575+-1.6406 3.1643+-0.4062 might be 1.2191x faster
plus-boolean-double 3.6715+-0.2952 3.4168+-0.0258 might be 1.0745x faster
plus-boolean 3.2177+-0.3016 ? 3.2429+-0.3343 ?
poly-chain-access-different-prototypes-simple
3.3145+-0.2069 ? 3.9797+-1.3229 ? might be 1.2007x slower
poly-chain-access-different-prototypes 3.1267+-0.2318 3.0833+-0.1503 might be 1.0141x faster
poly-chain-access-simpler 3.4172+-0.2829 3.3451+-0.4825 might be 1.0215x faster
poly-chain-access 3.1255+-0.1880 ? 3.2977+-0.4958 ? might be 1.0551x slower
poly-stricteq 67.0137+-0.3358 ? 68.7154+-5.2392 ? might be 1.0254x slower
polymorphic-array-call 1.8750+-0.3591 1.8250+-0.4345 might be 1.0274x faster
polymorphic-get-by-id 2.8193+-0.3684 2.7803+-0.4490 might be 1.0140x faster
polymorphic-put-by-id 40.3580+-4.2662 39.0742+-0.3282 might be 1.0329x faster
polymorphic-put-by-val-with-string 40.3372+-0.8315 ? 41.4992+-4.2521 ? might be 1.0288x slower
polymorphic-put-by-val-with-symbol 42.9221+-8.7846 40.4642+-0.2389 might be 1.0607x faster
polymorphic-structure 14.9194+-0.6779 ? 15.1796+-0.5914 ? might be 1.0174x slower
polyvariant-monomorphic-get-by-id 6.9932+-1.5748 6.4175+-0.2652 might be 1.0897x faster
proto-getter-access 12.3226+-0.5278 ? 13.3326+-3.0692 ? might be 1.0820x slower
prototype-access-with-mutating-prototype 6.0760+-1.1152 5.2134+-0.2111 might be 1.1654x faster
put-by-id-replace-and-transition 10.4940+-1.3285 10.3367+-0.6936 might be 1.0152x faster
put-by-id-slightly-polymorphic 3.2827+-0.4048 ? 4.5415+-2.3684 ? might be 1.3835x slower
put-by-id 14.7377+-0.3001 14.7272+-0.5739
put-by-val-direct 0.6468+-0.2390 0.6198+-0.2080 might be 1.0436x faster
put-by-val-large-index-blank-indexing-type
7.3632+-2.4355 ? 7.3707+-2.3260 ?
put-by-val-machine-int 3.2435+-0.3519 3.1602+-0.1475 might be 1.0264x faster
put-by-val-with-string-replace-and-transition
15.6642+-0.6405 15.5521+-0.2721
put-by-val-with-string-slightly-polymorphic
4.0231+-1.5446 ? 4.0760+-1.5148 ? might be 1.0132x slower
put-by-val-with-string 15.1320+-0.4363 ? 15.2078+-0.5765 ?
put-by-val-with-symbol-replace-and-transition
15.4695+-0.6858 ? 16.6473+-3.0413 ? might be 1.0761x slower
put-by-val-with-symbol-slightly-polymorphic
5.1766+-1.3051 4.4091+-0.2017 might be 1.1741x faster
put-by-val-with-symbol 16.1478+-2.6145 15.1014+-0.4621 might be 1.0693x faster
rare-osr-exit-on-local 15.5885+-0.2303 ? 16.9069+-5.1340 ? might be 1.0846x slower
raytrace-with-empty-try-catch 7.9399+-0.2155 ? 8.0419+-0.4673 ? might be 1.0128x slower
raytrace-with-try-catch 12.7618+-0.4459 12.5267+-0.4217 might be 1.0188x faster
register-pressure-from-osr 21.4111+-0.6675 ? 22.5865+-4.0033 ? might be 1.0549x slower
repeat-multi-get-by-offset 22.6672+-0.4582 ? 22.7719+-0.4116 ?
richards-empty-try-catch 57.7472+-1.3311 57.1085+-0.4806 might be 1.0112x faster
richards-try-catch 260.6153+-9.2064 259.6835+-3.3312
set-for-each 5.5795+-0.0443 ? 5.7759+-0.7536 ? might be 1.0352x slower
set-for-of 9.6125+-0.3073 ? 9.9287+-0.3667 ? might be 1.0329x slower
setter-prototype 5.4252+-0.2280 5.2555+-0.0696 might be 1.0323x faster
setter 4.9117+-0.4082 4.8956+-0.4256
simple-activation-demo 26.1304+-1.0868 ? 26.4150+-3.3006 ? might be 1.0109x slower
simple-getter-access 18.8338+-0.3054 ? 19.0862+-0.1962 ? might be 1.0134x slower
simple-poly-call-nested 6.5120+-0.1079 ? 6.5162+-0.2029 ?
simple-poly-call 1.7004+-0.4130 1.6818+-0.3801 might be 1.0111x faster
sin-boolean 16.8758+-4.2773 15.7277+-1.1214 might be 1.0730x faster
singleton-scope 69.8553+-4.8627 69.7791+-5.1187
sink-function 7.9984+-0.9077 7.9556+-0.3068
sink-huge-activation 13.9438+-0.3758 ? 17.0767+-4.9183 ? might be 1.2247x slower
sinkable-new-object-dag 75.2836+-7.9866 73.1263+-6.0409 might be 1.0295x faster
sinkable-new-object-taken 52.6679+-1.0660 ? 55.0977+-3.4868 ? might be 1.0461x slower
sinkable-new-object 35.6310+-4.9092 ? 35.9168+-5.0193 ?
slow-array-profile-convergence 3.2302+-0.0254 3.1068+-0.1893 might be 1.0397x faster
slow-convergence 3.2706+-0.1544 3.2185+-0.0683 might be 1.0162x faster
slow-ternaries 23.1718+-2.6988 ? 24.0948+-6.6882 ? might be 1.0398x slower
sorting-benchmark 21.8116+-0.4792 ? 22.2559+-0.3333 ? might be 1.0204x slower
sparse-conditional 1.6921+-0.4123 1.5535+-0.1290 might be 1.0892x faster
splice-to-remove 18.2661+-0.6729 18.1450+-0.3296
string-char-code-at 18.1546+-4.6478 16.5355+-0.3907 might be 1.0979x faster
string-concat-object 2.7867+-0.0278 ? 2.8766+-0.1216 ? might be 1.0323x slower
string-concat-pair-object 2.7407+-0.1032 ? 2.8025+-0.0471 ? might be 1.0226x slower
string-concat-pair-simple 15.0487+-3.6312 13.9468+-0.2601 might be 1.0790x faster
string-concat-simple 15.5327+-3.3919 15.5115+-3.5342
string-cons-repeat 9.3359+-0.2263 ? 9.4012+-0.3673 ?
string-cons-tower 8.9661+-0.6964 ? 9.0884+-0.5217 ? might be 1.0136x slower
string-equality 23.3770+-3.8641 22.8825+-1.4704 might be 1.0216x faster
string-get-by-val-big-char 8.3481+-0.1147 ? 8.3778+-0.5562 ?
string-get-by-val-out-of-bounds-insane 4.3362+-0.1948 ? 4.4177+-0.2479 ? might be 1.0188x slower
string-get-by-val-out-of-bounds 6.1733+-0.0646 6.1590+-0.0784
string-get-by-val 3.8340+-0.2655 3.5715+-0.0990 might be 1.0735x faster
string-hash 2.4343+-0.0082 ? 2.4927+-0.1257 ? might be 1.0240x slower
string-long-ident-equality 19.5653+-3.2347 18.0723+-0.5928 might be 1.0826x faster
string-out-of-bounds 10.6774+-0.1295 10.6584+-0.2165
string-repeat-arith 28.3017+-0.5239 28.1490+-1.2803
string-rope-with-object 19.2009+-0.4154 ? 19.6953+-3.1798 ? might be 1.0257x slower
string-sub 46.9995+-3.9552 ? 47.7580+-5.6896 ? might be 1.0161x slower
string-test 3.9005+-0.3258 3.8896+-0.3961
string-var-equality 37.7332+-0.1458 ? 38.1619+-0.5010 ? might be 1.0114x slower
structure-hoist-over-transitions 3.2962+-0.9666 3.0762+-0.1707 might be 1.0715x faster
substring-concat-weird 47.5778+-0.8573 ? 50.3661+-5.2322 ? might be 1.0586x slower
substring-concat 50.8561+-0.7681 ? 54.4593+-4.4190 ? might be 1.0708x slower
substring 57.9759+-5.0258 ? 60.3404+-8.6676 ? might be 1.0408x slower
switch-char-constant 3.1508+-0.0800 ? 3.1660+-0.2693 ?
switch-char 6.5039+-0.0698 ? 6.5241+-0.0769 ?
switch-constant 7.3502+-0.2625 ? 7.8865+-0.9136 ? might be 1.0730x slower
switch-string-basic-big-var 17.2408+-0.4896 ? 17.2560+-0.3572 ?
switch-string-basic-big 16.4601+-4.0348 15.1204+-0.4305 might be 1.0886x faster
switch-string-basic-var 17.7498+-1.4795 ? 18.7797+-4.8802 ? might be 1.0580x slower
switch-string-basic 13.8227+-0.3772 ? 15.4050+-4.0945 ? might be 1.1145x slower
switch-string-big-length-tower-var 22.7927+-1.8445 ? 23.8972+-5.4587 ? might be 1.0485x slower
switch-string-length-tower-var 19.9096+-1.5860 ? 20.5298+-2.6830 ? might be 1.0311x slower
switch-string-length-tower 15.0771+-4.5682 13.9407+-0.9931 might be 1.0815x faster
switch-string-short 13.5551+-0.3229 ? 16.3199+-4.7605 ? might be 1.2040x slower
switch 12.7095+-1.0945 12.1990+-1.1371 might be 1.0419x faster
symbol-tostringtag 4.4880+-0.0852 ^ 4.0040+-0.1516 ^ definitely 1.1209x faster
tear-off-arguments-simple 3.0312+-0.0580 3.0205+-0.1063
tear-off-arguments 4.2335+-0.3501 ? 4.5953+-1.5855 ? might be 1.0855x slower
temporal-structure 16.0226+-3.7092 15.4543+-3.6144 might be 1.0368x faster
to-int32-boolean 17.3375+-0.0540 17.2897+-0.1980
try-catch-get-by-val-cloned-arguments 9.5041+-3.6457 8.5356+-0.2493 might be 1.1135x faster
try-catch-get-by-val-direct-arguments 2.7798+-0.2355 ? 2.9136+-0.3731 ? might be 1.0481x slower
try-catch-get-by-val-scoped-arguments 5.3685+-0.3451 ? 5.5353+-0.0881 ? might be 1.0311x slower
typed-array-get-set-by-val-profiling 24.1422+-2.6232 ? 26.2556+-5.6394 ? might be 1.0875x slower
undefined-property-access 358.8409+-5.3188 ? 360.6043+-7.5940 ?
undefined-test 5.0988+-2.1935 3.9750+-0.1458 might be 1.2827x faster
unprofiled-licm 10.6015+-0.3323 10.5646+-0.2120
v8-raytrace-with-empty-try-catch 64.4231+-1.0883 64.4160+-0.4384
v8-raytrace-with-try-catch-high-frequency-throws
486.9270+-5.3440 ? 494.2635+-7.5229 ? might be 1.0151x slower
v8-raytrace-with-try-catch 82.2313+-2.1009 ? 83.0652+-3.2745 ? might be 1.0101x slower
v8-regexp-search 65.5460+-5.2629 ? 66.4523+-5.5161 ? might be 1.0138x slower
varargs-call 16.8983+-4.6123 16.3692+-3.9307 might be 1.0323x faster
varargs-construct-inline 25.5988+-0.7835 ? 25.6328+-0.3715 ?
varargs-construct 22.5040+-0.3617 ? 22.7267+-0.3682 ?
varargs-inline 9.6373+-0.1363 ? 10.4307+-2.3949 ? might be 1.0823x slower
varargs-strict-mode 11.3320+-0.1889 ? 11.4775+-0.6145 ? might be 1.0128x slower
varargs 12.3315+-1.7773 ? 12.8074+-3.6838 ? might be 1.0386x slower
weird-inlining-const-prop 2.6505+-0.0825 ? 2.6802+-0.0676 ? might be 1.0112x slower
<geometric> 10.7471+-0.0920 10.7314+-0.0751 might be 1.0015x faster
Baseline Mine
Geomean of preferred means:
<scaled-result> 30.7039+-0.1449 30.6498+-0.1823 might be 1.0018x faster
Comment on attachment 270834 [details]
Patch
Can we enable a few of the es6 test suite tests for Symbol.search?
Source/JavaScriptCore/tests/es6.yaml
Changing the :fail to :normal
The ones I'm guessing we can enable:
- path: es6/well-known_symbols_Symbol.search.js
cmd: runES6 :fail
- path: es6/RegExp.prototype_properties_RegExp.prototype[Symbol.search].js
cmd: runES6 :fail
(In reply to comment #26) > Comment on attachment 270834 [details] > Patch > > Can we enable a few of the es6 test suite tests for Symbol.search? > Source/JavaScriptCore/tests/es6.yaml > Changing the :fail to :normal > > The ones I'm guessing we can enable: > > - path: es6/well-known_symbols_Symbol.search.js > cmd: runES6 :fail > - path: es6/RegExp.prototype_properties_RegExp.prototype[Symbol.search].js > cmd: runES6 :fail Thanks! I'll add them :) Created attachment 270898 [details]
Patch
Comment on attachment 270898 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=270898&action=review > Source/JavaScriptCore/builtins/StringPrototype.js:73 > + if (regexp != null) { Any reason this is != rather than !==? Comment on attachment 270898 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=270898&action=review >> Source/JavaScriptCore/builtins/StringPrototype.js:73 >> + if (regexp != null) { > > Any reason this is != rather than !==? To ensure that regexp is neither null nor undefined. http://ecma-international.org/ecma-262/6.0/#sec-string.prototype.search "If regexp is neither undefined nor null, then" Comment on attachment 270898 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=270898&action=review > Source/JavaScriptCore/builtins/StringPrototype.js:68 > + throw new @TypeError("String.prototype.search requires that |this| not be null"); Is this really the format we want for our error strings? I’d like us to be more consistent with these. It seems like we make a unique decision each time we implement a function about what kinds of checks we’ll do, what the error messages are, and what the format is. Little things like what the function calls itself, how we refer to the this object, whether we put a period at the end, etc. Might be good to have a test file that concentrates on generating and dumping the error messages from exceptions so we can see them all side by side. >>> Source/JavaScriptCore/builtins/StringPrototype.js:73 >>> + if (regexp != null) { >> >> Any reason this is != rather than !==? > > To ensure that regexp is neither null nor undefined. > http://ecma-international.org/ecma-262/6.0/#sec-string.prototype.search > "If regexp is neither undefined nor null, then" If that technique is a good one, then I would have thought you’d want to use that above to make the common case have one less branch: if (this == null) { if (this === null) throw new @TypeError("String.prototype.search requires that |this| not be null"); throw new @TypeError("String.prototype.search requires that |this| not be undefined"); } > LayoutTests/js/regress/script-tests/v8-regexp-search.js:38 > +function runRegExpBenchmark() { If this is a benchmark, then why land it as a correctness test? Maybe it should go into our benchmarks instead? Comment on attachment 270898 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=270898&action=review >> LayoutTests/js/regress/script-tests/v8-regexp-search.js:38 >> +function runRegExpBenchmark() { > > If this is a benchmark, then why land it as a correctness test? Maybe it should go into our benchmarks instead? I think for whatever legacy reasons LayoutTests/js/regress/script-tests contains all of our benchmarks that we don't have in a larger suite. I never really understood why they were put in regress to begin with. (In reply to comment #32) > I think for whatever legacy reasons LayoutTests/js/regress/script-tests > contains all of our benchmarks that we don't have in a larger suite. I never > really understood why they were put in regress to begin with. OK, would be great to get rid of the “fear, uncertainty, and doubt” and figure out what we want to do in the future. If that’s the right place for benchmarks, that’s fine, but doesn’t seem super clear naming then. Comment on attachment 270898 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=270898&action=review Thanks for your reviews! >> Source/JavaScriptCore/builtins/StringPrototype.js:68 >> + throw new @TypeError("String.prototype.search requires that |this| not be null"); > > Is this really the format we want for our error strings? I’d like us to be more consistent with these. It seems like we make a unique decision each time we implement a function about what kinds of checks we’ll do, what the error messages are, and what the format is. Little things like what the function calls itself, how we refer to the this object, whether we put a period at the end, etc. Might be good to have a test file that concentrates on generating and dumping the error messages from exceptions so we can see them all side by side. Yeah, at least, this format is consistent with builtin JS code. For example, `String.prototype.localeCompare` has the very similar error message. As a first step, I think creating "XXX requires that |this| not be null / undefined" error tests seems nice. Opened https://bugs.webkit.org/show_bug.cgi?id=154182 >>>> Source/JavaScriptCore/builtins/StringPrototype.js:73 >>>> + if (regexp != null) { >>> >>> Any reason this is != rather than !==? >> >> To ensure that regexp is neither null nor undefined. >> http://ecma-international.org/ecma-262/6.0/#sec-string.prototype.search >> "If regexp is neither undefined nor null, then" > > If that technique is a good one, then I would have thought you’d want to use that above to make the common case have one less branch: > > if (this == null) { > if (this === null) > throw new @TypeError("String.prototype.search requires that |this| not be null"); > throw new @TypeError("String.prototype.search requires that |this| not be undefined"); > } OK, I've changed. But in practice, these guards are typically removed in the DFG phase because the DFG emits edge filtering to this value in the typical use cases :) >>> LayoutTests/js/regress/script-tests/v8-regexp-search.js:38 >>> +function runRegExpBenchmark() { >> >> If this is a benchmark, then why land it as a correctness test? Maybe it should go into our benchmarks instead? > > I think for whatever legacy reasons LayoutTests/js/regress/script-tests contains all of our benchmarks that we don't have in a larger suite. I never really understood why they were put in regress to begin with. Yeah. More explicit, non LayoutTests related benchmark directory is useful. I've opened the bug. https://bugs.webkit.org/show_bug.cgi?id=154105 Committed r196498: <http://trac.webkit.org/changeset/196498> |