d187c6c291
This is a reland of commit 3ce690eef2
Changed for the reland:
- Remove the currently-unused BytecodeArray member to avoid MSAN
failures.
- s/return/continue/ in optimizing-compile-dispatcher.
Original change's description:
> [osr] Basic support for concurrent OSR
>
> This CL adds basic support behind --concurrent-osr,
> disabled by default.
>
> When enabled:
> 1) the first OSR request starts a concurrent OSR compile job.
> 2) on completion, the code object is inserted into the OSR cache.
> 3) the next OSR request picks up the cached code (assuming the request
> came from the same JumpLoop bytecode).
>
> We add a new osr optimization marker on the feedback vector to
> track whether an OSR compile is currently in progress.
>
> One fundamental issue remains: step 3) above is not guaranteed to
> hit the same JumpLoop, and a mismatch means the OSR'd code cannot
> be installed. This will be addressed in a followup by targeting
> specific bytecode offsets for the install request.
>
> This change is based on fanchen.kong@intel.com's earlier
> change crrev.com/c/3369361, thank you!
>
> Bug: v8:12161
> Change-Id: Ib162906dd4b6ba056f62870aea2990f1369df235
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3548820
> Reviewed-by: Leszek Swirski <leszeks@chromium.org>
> Commit-Queue: Jakob Linke <jgruber@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#79685}
Bug: v8:12161
Change-Id: I48b100e5980c909ec5e79d190aaea730c83e9386
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3565720
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Commit-Queue: Jakob Linke <jgruber@chromium.org>
Auto-Submit: Jakob Linke <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/main@{#79746}
43 lines
1.0 KiB
JavaScript
43 lines
1.0 KiB
JavaScript
// Copyright 2022 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
|
|
|
|
function __getProperties(obj) {
|
|
let properties = [];
|
|
for (let name of Object.getOwnPropertyNames(obj)) {
|
|
properties.push(name);
|
|
}
|
|
return properties;
|
|
}
|
|
function* __getObjects(root = this, level = 0) {
|
|
if (level > 4) return;
|
|
let obj_names = __getProperties(root);
|
|
for (let obj_name of obj_names) {
|
|
let obj = root[obj_name];
|
|
yield* __getObjects(obj, level + 1);
|
|
}
|
|
}
|
|
function __getRandomObject() {
|
|
for (let obj of __getObjects()) {}
|
|
}
|
|
%PrepareFunctionForOptimization(__f_23);
|
|
%OptimizeFunctionOnNextCall(__f_23);
|
|
try {
|
|
__getRandomObject(), {};
|
|
} catch (e) {}
|
|
function __f_23(__v_93) {
|
|
var __v_95 = "x";
|
|
return __v_93[__v_95] + __v_94[__v_95];
|
|
}
|
|
%PrepareFunctionForOptimization(__f_23);
|
|
try {
|
|
__f_23();
|
|
} catch (e) {}
|
|
try {
|
|
%OptimizeFunctionOnNextCall(__f_23);
|
|
__f_23();
|
|
} catch (e) {}
|
|
%DisableOptimizationFinalization();
|