Commit 5671b663 authored by mstarzinger's avatar mstarzinger Committed by Commit bot

[interpreter] Avoid tier-up when there is an OSR activation.

This makes sure we prevent a tier-up for function which also have an
optimized activation of OSR code on the stack. In case the OSR code
deoptimizes, it needs the bytecode to still be around.

R=rmcilroy@chromium.org
TEST=mjsunit/regress/regress-5262
BUG=v8:5262

Review-Url: https://codereview.chromium.org/2206363004
Cr-Commit-Position: refs/heads/master@{#38359}
parent 771b81f8
......@@ -851,8 +851,14 @@ class InterpreterActivationsFinder : public ThreadVisitor,
JavaScriptFrameIterator it(isolate, top);
for (; !it.done(); it.Advance()) {
JavaScriptFrame* frame = it.frame();
if (!frame->is_interpreted()) continue;
if (frame->function()->shared() == shared_) {
if (FLAG_turbo_from_bytecode && FLAG_ignition_osr &&
frame->is_optimized() && frame->function()->shared() == shared_) {
// If we are able to optimize functions directly from bytecode, then
// there might be optimized OSR code active on the stack that is not
// reachable through a function. We count this as an activation.
has_activations_ = true;
}
if (frame->is_interpreted() && frame->function()->shared() == shared_) {
has_activations_ = true;
activation_pc_address = frame->pc_address();
}
......
// Copyright 2016 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: --ignition --ignition-osr --turbo-from-bytecode --allow-natives-syntax
function g() { return 23 }
function h() { return 42 }
function boom(o) { o.g = h }
function f(osr_and_recurse) {
if (osr_and_recurse) {
for (var i = 0; i < 3; ++i) {
if (i == 1) %OptimizeOsr();
}
%OptimizeFunctionOnNextCall(f);
f(false); // Trigger tier-up due to recursive call.
boom(this); // Causes a deopt due to below dependency.
var x = g(); // Install dependency on the {g} function.
return x;
}
return 65;
}
assertEquals(65, f(false));
assertEquals(65, f(false));
assertEquals(42, f(true));
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment