v8/test/mjsunit/optimized-string-includes.js
Camillo Bruni e3e8ea5d65 [flags] Rename --opt to --turbofan
To be consistent with the all the other tiers and avoid confusion, we
rename --opt to ---turbofan, and --always-opt to --always-turbofan.

Change-Id: Ie23dc8282b3fb4cf2fbf73b6c3d5264de5d09718
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3610431
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Reviewed-by: Jakob Linke <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/main@{#80336}
2022-05-03 12:10:30 +00:00

153 lines
3.5 KiB
JavaScript

// Copyright 2022 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax --turbofan --no-always-turbofan
(function optimize() {
function f() {
return 'abc'.includes('a');
}
%PrepareFunctionForOptimization(f);
assertEquals(true, f());
assertEquals(true, f());
assertEquals(true, f());
%OptimizeFunctionOnNextCall(f);
assertEquals(true, f());
assertTrue(isOptimized(f));
function f2() {
return 'abc'.includes('a', 1);
}
%PrepareFunctionForOptimization(f2);
assertEquals(false, f2());
assertEquals(false, f2());
assertEquals(false, f2());
%OptimizeFunctionOnNextCall(f2);
assertEquals(false, f2());
assertTrue(isOptimized(f2));
function f3() {
return 'abc'.includes('b');
}
%PrepareFunctionForOptimization(f3);
assertEquals(true, f3());
assertEquals(true, f3());
assertEquals(true, f3());
%OptimizeFunctionOnNextCall(f3);
assertEquals(true, f3());
assertTrue(isOptimized(f3));
function f4() {
return 'abcbc'.includes('bc', 2);
}
%PrepareFunctionForOptimization(f4);
assertEquals(true, f4());
assertEquals(true, f4());
assertEquals(true, f4());
%OptimizeFunctionOnNextCall(f4);
assertEquals(true, f4());
assertTrue(isOptimized(f4));
function f5() {
return 'abcbc'.includes('b', -1);
}
%PrepareFunctionForOptimization(f5);
assertEquals(true, f5());
assertEquals(true, f5());
assertEquals(true, f5());
%OptimizeFunctionOnNextCall(f5);
assertEquals(true, f5());
assertTrue(isOptimized(f5));
function f6() {
return 'abcbc'.includes('b', -10737418);
}
%PrepareFunctionForOptimization(f6);
assertEquals(true, f6());
assertEquals(true, f6());
assertEquals(true, f6());
%OptimizeFunctionOnNextCall(f6);
assertEquals(true, f6());
assertTrue(isOptimized(f6));
})();
(function optimizeOSR() {
function f() {
var result;
for (var i = 0; i < 100000; i++) {
result = 'abc'.includes('a');
}
return result;
}
assertEquals(true, f());
function f2() {
var result;
for (var i = 0; i < 100000; i++) {
result = 'abc'.includes('a', 1);
}
return result;
}
assertEquals(false, f2());
function f3() {
var result;
for (var i = 0; i < 100000; i++) {
result = 'abc'.includes('b');
}
return result;
}
assertEquals(true, f3());
function f4() {
var result;
for (var i = 0; i < 100000; i++) {
result = 'abcbc'.includes('bc', 2);
}
return result;
}
assertEquals(true, f4());
})();
(function bailout() {
function f(str) {
return String.prototype.includes.call(str, 'a')
}
%PrepareFunctionForOptimization(f);
assertEquals(true, f('abc'));
%OptimizeFunctionOnNextCall(f);
assertEquals(true, f({
toString: () => {
return 'abc'
}
}));
assertFalse(isOptimized(f));
function f2(str) {
return 'abc'.includes(str)
}
%PrepareFunctionForOptimization(f2);
assertEquals(true, f2('a'));
%OptimizeFunctionOnNextCall(f2);
assertEquals(true, f2({
toString: () => {
return 'a'
}
}));
assertFalse(isOptimized(f2));
function f3(index) {
return 'abc'.includes('a', index)
}
%PrepareFunctionForOptimization(f3);
assertEquals(true, f3(0));
%OptimizeFunctionOnNextCall(f3);
assertEquals(true, f3({
valueOf: () => {
return 0
}
}));
assertFalse(isOptimized(f3));
})();