14832f8001
In this test we expect that the feedback vector is not flushed so we retain what we have learnt from the earlier executions. If we flush the earlier feedback the code might deoptimize again and the test fails. Hence adding --no-stress-flush-bytecode and --no-flush-bytecode flags. Bug: v8:10035 Change-Id: Ia71748e83d64a731f595fed7f5b85a8dafa2b31a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1969850 Commit-Queue: Mythri Alle <mythria@chromium.org> Reviewed-by: Maya Lekova <mslekova@chromium.org> Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#65472}
165 lines
3.2 KiB
JavaScript
165 lines
3.2 KiB
JavaScript
// Copyright 2017 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 --opt --no-flush-bytecode --no-stress-flush-bytecode
|
|
|
|
/* Test MapCheck behavior */
|
|
|
|
(function testForEachMapCheck() {
|
|
function f(v,n,o) {
|
|
Object.freeze(o);
|
|
}
|
|
function g() {
|
|
[1,2,3].forEach(f);
|
|
}
|
|
%PrepareFunctionForOptimization(g);
|
|
g();
|
|
g();
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
%PrepareFunctionForOptimization(g);
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
assertOptimized(g);
|
|
})();
|
|
|
|
|
|
(function testFindMapCheck() {
|
|
function f(v,n,o) {
|
|
Object.freeze(o);
|
|
return false;
|
|
}
|
|
function g() {
|
|
[1,2,3].find(f);
|
|
}
|
|
%PrepareFunctionForOptimization(g);
|
|
g();
|
|
g();
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
%PrepareFunctionForOptimization(g);
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
assertOptimized(g);
|
|
})();
|
|
|
|
(function testMapMapCheck() {
|
|
function f(v,n,o) {
|
|
Object.freeze(o);
|
|
return false;
|
|
}
|
|
function g() {
|
|
[1,2,3].map(f);
|
|
}
|
|
%PrepareFunctionForOptimization(g);
|
|
g();
|
|
g();
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
%PrepareFunctionForOptimization(g);
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
assertOptimized(g);
|
|
})();
|
|
|
|
(function testFilterMapCheck() {
|
|
function f(v,n,o) {
|
|
Object.freeze(o);
|
|
return true;
|
|
}
|
|
function g() {
|
|
[1,2,3].filter(f);
|
|
}
|
|
%PrepareFunctionForOptimization(g);
|
|
g();
|
|
g();
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
%PrepareFunctionForOptimization(g);
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
assertOptimized(g);
|
|
})();
|
|
|
|
|
|
/* Test CheckBounds behavior */
|
|
|
|
(function testForEachCheckBounds() {
|
|
function f(v,n,o) {
|
|
o.length=2;
|
|
}
|
|
function g() {
|
|
[1,2,3].forEach(f);
|
|
}
|
|
%PrepareFunctionForOptimization(g);
|
|
g();
|
|
g();
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
%PrepareFunctionForOptimization(g);
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
assertOptimized(g);
|
|
})();
|
|
|
|
|
|
(function testFindCheckBounds() {
|
|
function f(v,n,o) {
|
|
o.length=2;
|
|
return false;
|
|
}
|
|
function g() {
|
|
[1,2,3].find(f);
|
|
}
|
|
%PrepareFunctionForOptimization(g);
|
|
g();
|
|
g();
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
%PrepareFunctionForOptimization(g);
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
assertOptimized(g);
|
|
})();
|
|
|
|
(function testMapCheckBounds() {
|
|
function f(v,n,o) {
|
|
o.length=2;
|
|
return false;
|
|
}
|
|
function g() {
|
|
[1,2,3].map(f);
|
|
}
|
|
%PrepareFunctionForOptimization(g);
|
|
g();
|
|
g();
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
%PrepareFunctionForOptimization(g);
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
assertOptimized(g);
|
|
})();
|
|
|
|
(function testFilterCheckBounds() {
|
|
function f(v,n,o) {
|
|
o.length = 2;
|
|
return true;
|
|
}
|
|
function g() {
|
|
[1,2,3].filter(f);
|
|
}
|
|
%PrepareFunctionForOptimization(g);
|
|
g();
|
|
g();
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
g();
|
|
%PrepareFunctionForOptimization(g);
|
|
%OptimizeFunctionOnNextCall(g);
|
|
g();
|
|
g();
|
|
assertOptimized(g);
|
|
})();
|