e3e8ea5d65
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}
144 lines
3.2 KiB
JavaScript
144 lines
3.2 KiB
JavaScript
// Copyright 2020 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
|
|
|
|
|
|
// Test Constant cell value going from writable to read-only.
|
|
{
|
|
glo4 = 4;
|
|
|
|
function write_glo4(x) { glo4 = x }
|
|
|
|
%PrepareFunctionForOptimization(write_glo4);
|
|
write_glo4(4);
|
|
assertEquals(4, glo4);
|
|
|
|
// At this point, glo4 has cell type Constant.
|
|
|
|
%OptimizeFunctionOnNextCall(write_glo4);
|
|
write_glo4(4);
|
|
assertEquals(4, glo4);
|
|
assertOptimized(write_glo4);
|
|
|
|
Object.defineProperty(this, 'glo4', {writable: false});
|
|
assertUnoptimized(write_glo4);
|
|
write_glo4(2);
|
|
assertEquals(4, glo4);
|
|
}
|
|
|
|
|
|
// Test ConstantType cell value going from writable to read-only.
|
|
{
|
|
glo5 = 5;
|
|
|
|
function write_glo5(x) { glo5 = x }
|
|
|
|
%PrepareFunctionForOptimization(write_glo5);
|
|
write_glo5(0);
|
|
assertEquals(0, glo5);
|
|
|
|
// At this point, glo5 has cell type ConstantType.
|
|
|
|
%OptimizeFunctionOnNextCall(write_glo5);
|
|
write_glo5(5);
|
|
assertEquals(5, glo5);
|
|
assertOptimized(write_glo5);
|
|
|
|
Object.defineProperty(this, 'glo5', {writable: false});
|
|
assertUnoptimized(write_glo5);
|
|
write_glo5(2);
|
|
assertEquals(5, glo5);
|
|
}
|
|
|
|
|
|
// Test Mutable cell value going from writable to read-only.
|
|
{
|
|
glo6 = 6;
|
|
|
|
function write_glo6(x) { glo6 = x }
|
|
|
|
%PrepareFunctionForOptimization(write_glo6);
|
|
write_glo6({});
|
|
write_glo6(3);
|
|
assertEquals(3, glo6);
|
|
|
|
// At this point, glo6 has cell type Mutable.
|
|
|
|
%OptimizeFunctionOnNextCall(write_glo6);
|
|
write_glo6(6);
|
|
assertEquals(6, glo6);
|
|
assertOptimized(write_glo6);
|
|
|
|
Object.defineProperty(this, 'glo6', {writable: false});
|
|
assertUnoptimized(write_glo6);
|
|
write_glo6(2);
|
|
assertEquals(6, glo6);
|
|
}
|
|
|
|
|
|
// Test Constant cell value going from read-only to writable.
|
|
{
|
|
glo7 = 7;
|
|
Object.defineProperty(this, 'glo7', {writable: false});
|
|
|
|
function read_glo7() { return glo7 }
|
|
|
|
%PrepareFunctionForOptimization(read_glo7);
|
|
assertEquals(7, read_glo7());
|
|
|
|
// At this point, glo7 has cell type Constant.
|
|
|
|
%OptimizeFunctionOnNextCall(read_glo7);
|
|
assertEquals(7, read_glo7());
|
|
|
|
Object.defineProperty(this, 'glo7', {writable: true});
|
|
assertEquals(7, read_glo7());
|
|
assertOptimized(read_glo7);
|
|
}
|
|
|
|
|
|
// Test ConstantType cell value going from read-only to writable.
|
|
{
|
|
glo8 = 0;
|
|
glo8 = 8;
|
|
Object.defineProperty(this, 'glo8', {writable: false});
|
|
|
|
function read_glo8() { return glo8 }
|
|
|
|
%PrepareFunctionForOptimization(read_glo8);
|
|
assertEquals(8, read_glo8());
|
|
|
|
// At this point, glo8 has cell type ConstantType.
|
|
|
|
%OptimizeFunctionOnNextCall(read_glo8);
|
|
assertEquals(8, read_glo8());
|
|
|
|
Object.defineProperty(this, 'glo8', {writable: true});
|
|
assertEquals(8, read_glo8());
|
|
assertOptimized(read_glo8);
|
|
}
|
|
|
|
|
|
// Test Mutable cell value going from read-only to writable.
|
|
{
|
|
glo9 = {};
|
|
glo9 = 9;
|
|
Object.defineProperty(this, 'glo9', {writable: false});
|
|
|
|
function read_glo9() { return glo9 }
|
|
|
|
%PrepareFunctionForOptimization(read_glo9);
|
|
assertEquals(9, read_glo9());
|
|
|
|
// At this point, glo9 has cell type Mutable.
|
|
|
|
%OptimizeFunctionOnNextCall(read_glo9);
|
|
assertEquals(9, read_glo9());
|
|
|
|
Object.defineProperty(this, 'glo9', {writable: true});
|
|
assertEquals(9, read_glo9());
|
|
assertOptimized(read_glo9);
|
|
}
|