| // 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 load(obj){ |
| return obj.x; |
| } |
| |
| %PrepareFunctionForOptimization(load); |
| obj = {}; |
| obj.x = 1; |
| |
| //get mono feedback |
| load(obj); |
| load(obj); |
| |
| // optimize as mono |
| %OptimizeFunctionOnNextCall(load); |
| load(obj); |
| assertOptimized(load); |
| load(obj); |
| |
| // transition to poly - should retain optimized code |
| obj.y = 2; |
| load(obj); |
| assertOptimized(load); |
| load(obj); |
| |
| // transition to more polymorphic |
| obj.z = 3; |
| load(obj); |
| obj.q =4; |
| load(obj); |
| |
| // transition to megamorphic |
| assertOptimized(load); |
| obj.r = 5; |
| load(obj); |
| obj.s = 6; |
| load(obj); |
| assertUnoptimized(load); |
| load(obj); |