Bug 143889

Summary: [ES6] Implement @@search
Product: WebKit Reporter: Yusuke Suzuki <ysuzuki>
Component: JavaScriptCoreAssignee: 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 Flags
Patch
none
Patch
none
Archive of layout-test-results from ews101 for mac-mavericks
none
Archive of layout-test-results from ews106 for mac-mavericks-wk2
none
Patch
none
Archive of layout-test-results from ews102 for mac-yosemite
none
Archive of layout-test-results from ews106 for mac-yosemite-wk2
none
Archive of layout-test-results from ews116 for mac-yosemite
none
Patch
none
Patch darin: review+

Description Yusuke Suzuki 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.
Comment 1 Yusuke Suzuki 2015-04-18 10:23:30 PDT
Created attachment 251091 [details]
Patch
Comment 2 Yusuke Suzuki 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].
Comment 3 WebKit Commit Bot 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.
Comment 4 Yusuke Suzuki 2015-04-18 10:35:27 PDT
Created attachment 251092 [details]
Patch
Comment 5 WebKit Commit Bot 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.
Comment 6 Yusuke Suzuki 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].
Comment 7 Yusuke Suzuki 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)
Comment 8 Build Bot 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
Comment 9 Build Bot 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
Comment 10 Build Bot 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
Comment 11 Build Bot 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
Comment 12 Yusuke Suzuki 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)
Comment 13 Yusuke Suzuki 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
Comment 14 Yusuke Suzuki 2015-04-19 11:51:49 PDT
Confirmed as a spec issue. Filed. https://bugs.ecmascript.org/show_bug.cgi?id=4327
Comment 15 Joseph Pecoraro 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!
Comment 16 Yusuke Suzuki 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 :)
Comment 17 Yusuke Suzuki 2016-02-07 08:40:43 PST
Created attachment 270819 [details]
Patch
Comment 18 Build Bot 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
Comment 19 Build Bot 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
Comment 20 Build Bot 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
Comment 21 Build Bot 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
Comment 22 Build Bot 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
Comment 23 Build Bot 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
Comment 24 Yusuke Suzuki 2016-02-07 18:07:18 PST
Created attachment 270834 [details]
Patch
Comment 25 Yusuke Suzuki 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
Comment 26 Joseph Pecoraro 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
Comment 27 Yusuke Suzuki 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 :)
Comment 28 Yusuke Suzuki 2016-02-08 17:33:46 PST
Created attachment 270898 [details]
Patch
Comment 29 Darin Adler 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 !==?
Comment 30 Yusuke Suzuki 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"
Comment 31 Darin Adler 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?
Comment 32 Keith Miller 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.
Comment 33 Darin Adler 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.
Comment 34 Yusuke Suzuki 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
Comment 35 Yusuke Suzuki 2016-02-12 12:46:36 PST
Committed r196498: <http://trac.webkit.org/changeset/196498>