RESOLVED FIXED 143889
[ES6] Implement @@search
https://bugs.webkit.org/show_bug.cgi?id=143889
Summary [ES6] Implement @@search
Yusuke Suzuki
Reported 2015-04-17 11:47:42 PDT
Implement 1. RegExp.prototype[@@search] and move the String.prototype.search implementation here. 2. Change String.prototype.search implementation to conform to ES6 spec.
Attachments
Patch (26.39 KB, patch)
2015-04-18 10:23 PDT, Yusuke Suzuki
no flags
Patch (27.83 KB, patch)
2015-04-18 10:35 PDT, Yusuke Suzuki
no flags
Archive of layout-test-results from ews101 for mac-mavericks (599.71 KB, application/zip)
2015-04-18 11:51 PDT, Build Bot
no flags
Archive of layout-test-results from ews106 for mac-mavericks-wk2 (674.05 KB, application/zip)
2015-04-18 11:59 PDT, Build Bot
no flags
Patch (132.62 KB, patch)
2016-02-07 08:40 PST, Yusuke Suzuki
no flags
Archive of layout-test-results from ews102 for mac-yosemite (815.73 KB, application/zip)
2016-02-07 09:52 PST, Build Bot
no flags
Archive of layout-test-results from ews106 for mac-yosemite-wk2 (815.30 KB, application/zip)
2016-02-07 09:56 PST, Build Bot
no flags
Archive of layout-test-results from ews116 for mac-yosemite (843.45 KB, application/zip)
2016-02-07 09:58 PST, Build Bot
no flags
Patch (135.06 KB, patch)
2016-02-07 18:07 PST, Yusuke Suzuki
no flags
Patch (136.46 KB, patch)
2016-02-08 17:33 PST, Yusuke Suzuki
darin: review+
Yusuke Suzuki
Comment 1 2015-04-18 10:23:30 PDT
Yusuke Suzuki
Comment 2 2015-04-18 10:25:44 PDT
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].
WebKit Commit Bot
Comment 3 2015-04-18 10:26:18 PDT
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.
Yusuke Suzuki
Comment 4 2015-04-18 10:35:27 PDT
WebKit Commit Bot
Comment 5 2015-04-18 10:37:20 PDT
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.
Yusuke Suzuki
Comment 6 2015-04-18 10:49:40 PDT
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].
Yusuke Suzuki
Comment 7 2015-04-18 10:52:41 PDT
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)
Build Bot
Comment 8 2015-04-18 11:51:46 PDT
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
Build Bot
Comment 9 2015-04-18 11:51:49 PDT
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
Build Bot
Comment 10 2015-04-18 11:59:30 PDT
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
Build Bot
Comment 11 2015-04-18 11:59:33 PDT
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
Yusuke Suzuki
Comment 12 2015-04-18 12:34:12 PDT
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)
Yusuke Suzuki
Comment 13 2015-04-18 12:49:14 PDT
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
Yusuke Suzuki
Comment 14 2015-04-19 11:51:49 PDT
Confirmed as a spec issue. Filed. https://bugs.ecmascript.org/show_bug.cgi?id=4327
Joseph Pecoraro
Comment 15 2016-01-22 13:31:32 PST
(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!
Yusuke Suzuki
Comment 16 2016-01-23 12:29:40 PST
(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 :)
Yusuke Suzuki
Comment 17 2016-02-07 08:40:43 PST
Build Bot
Comment 18 2016-02-07 09:52:45 PST
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
Build Bot
Comment 19 2016-02-07 09:52:49 PST
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
Build Bot
Comment 20 2016-02-07 09:56:43 PST
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
Build Bot
Comment 21 2016-02-07 09:56:46 PST
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
Build Bot
Comment 22 2016-02-07 09:58:27 PST
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
Build Bot
Comment 23 2016-02-07 09:58:30 PST
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
Yusuke Suzuki
Comment 24 2016-02-07 18:07:18 PST
Yusuke Suzuki
Comment 25 2016-02-07 18:09:22 PST
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
Joseph Pecoraro
Comment 26 2016-02-08 17:03:45 PST
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
Yusuke Suzuki
Comment 27 2016-02-08 17:25:04 PST
(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 :)
Yusuke Suzuki
Comment 28 2016-02-08 17:33:46 PST
Darin Adler
Comment 29 2016-02-09 09:02:36 PST
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 !==?
Yusuke Suzuki
Comment 30 2016-02-10 05:30:02 PST
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"
Darin Adler
Comment 31 2016-02-10 09:10:13 PST
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?
Keith Miller
Comment 32 2016-02-10 09:57:36 PST
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.
Darin Adler
Comment 33 2016-02-11 09:26:29 PST
(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.
Yusuke Suzuki
Comment 34 2016-02-12 12:23:10 PST
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
Yusuke Suzuki
Comment 35 2016-02-12 12:46:36 PST
Note You need to log in before you can comment on or make changes to this bug.