6ec735e08b
This fixes a corner-case in the above predicate that was introduced to allow fully disabling optimization using %NeverOptimizeFunction. This property of a function is a transient property (i.e. changes over time), whereas {UseTurboFan} is designed to be a static property (i.e. gives same answer over time). Violating this led to cases where functions got optimization disabled for other reasons would suddenly be baselined. The correct place to check transient properties is when optimization is requested. R=jarin@chromium.org TEST=mjsunit/never-baseline Change-Id: I37eb0c70d2b39704be29fd4bda76975bfbede66b Reviewed-on: https://chromium-review.googlesource.com/447937 Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#43514}
25 lines
704 B
JavaScript
25 lines
704 B
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 --ignition --turbo
|
|
|
|
function f(a, b) {
|
|
%DeoptimizeNow();
|
|
return a + b;
|
|
}
|
|
|
|
// Go through enough optimization and deoptimization cycles in order for the
|
|
// function {f} to be marked as optimization disabled.
|
|
for (var i = 0; i < 16; ++i) {
|
|
%OptimizeFunctionOnNextCall(f);
|
|
f(1, 2);
|
|
}
|
|
|
|
// Make the runtime profiler perceive {f} as hot again and then verify that we
|
|
// didn't trigger an unintentional baseline compilation.
|
|
for (var i = 0; i < 100000; ++i) {
|
|
f(1, 2);
|
|
}
|
|
assertTrue(isInterpreted(f));
|