v8/test/mjsunit/compiler/test-dynamic-map-check-deprecated-maps-polymorphic.js
Ross McIlroy 545e9dc58e [Turboprop] Only enable dynamic map checks for TurboProp.
The dynamic map check builtin loads the feedback vector from the
function's frame, therefore it doesn't work if we inline the
function. We don't do inlining on TurboProp so this is fine, but
it was possible to enable dynamic map checks on TurboFan which does.

This change prevents that, and also makes the dynamic map checks flag
specific to TurboProp and no longer an implication, which also allos
it to be switched on the command line independenly of --turboprop.

BUG=chromium:1141502,v8:9684

Change-Id: I365de461a6373335a45a7a154af7d4cf1c13dc2c
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2494928
Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: Sathya Gunasekaran  <gsathya@chromium.org>
Reviewed-by: Mythri Alle <mythria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70737}
2020-10-23 15:48:00 +00:00

36 lines
831 B
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 --turboprop --turboprop-dynamic-map-checks --opt
// Flags: --no-always-opt
function f(o) {
return o.b;
}
var o = {a:10, b:20};
var o1 = {a:10, b:20};
var o2 = {a:10, b:20};
var o3 = {a:10, b:20, c:30};
%PrepareFunctionForOptimization(f);
// Transition IC state to polymorphic.
f(o);
f(o3);
%OptimizeFunctionOnNextCall(f);
f(o);
assertOptimized(f);
f(o);
// Deprecates O's map.
o1.b = 10.23;
// Deoptimizes but retains code.
f(o1);
assertOptimized(f);
// Continues to use optimized code since deprecated map is still in the
// feedback. ICs don't drop deprecated maps in the polymoprhic case.
f(o);
f(o);
assertOptimized(f);