6ad8193be2
In order to improve our tiering strategy, it is a good idea to start by tiering up functions that will be used the most, as this is done in most JavaScript engines. To decide which function requires tiering, we use as a basic strategy to define its compilation priority to 'func_size * number_of_calls', this roughly approximates the time we spend in the function. To handle prioritization, it seemed that using a concurrent priority queue similar to BigUnits was causing concurrencies issues. I then decided to use different priority queues for each worker thread. R=clemensb@chromium.org CC=thibaudm@chromium.org Bug: v8:10728 Change-Id: I6f314468549000b2a9b51d3d470f04a0cb997879 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2367859 Commit-Queue: Arnaud Robin <arobin@google.com> Reviewed-by: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#69585}
39 lines
1.0 KiB
JavaScript
39 lines
1.0 KiB
JavaScript
// Copyright 2019 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 --wasm-dynamic-tiering --liftoff
|
|
// Flags: --no-wasm-tier-up --no-stress-opt
|
|
|
|
load('test/mjsunit/wasm/wasm-module-builder.js');
|
|
|
|
const num_iterations = 4;
|
|
const num_functions = 2;
|
|
|
|
const builder = new WasmModuleBuilder();
|
|
for (let i = 0; i < num_functions; ++i) {
|
|
let kFunction = builder.addFunction('f' + i, kSig_i_v)
|
|
.addBody(wasmI32Const(i))
|
|
.exportAs('f' + i)
|
|
}
|
|
|
|
let instance = builder.instantiate();
|
|
|
|
for (let i = 0; i < num_iterations - 1; ++i) {
|
|
instance.exports.f0();
|
|
instance.exports.f1();
|
|
}
|
|
|
|
assertTrue(%IsLiftoffFunction(instance.exports.f0));
|
|
assertTrue(%IsLiftoffFunction(instance.exports.f1));
|
|
|
|
instance.exports.f1();
|
|
|
|
// Busy waiting until the function is tiered up.
|
|
while (true) {
|
|
if (!%IsLiftoffFunction(instance.exports.f1)) {
|
|
break;
|
|
}
|
|
}
|
|
assertTrue(%IsLiftoffFunction(instance.exports.f0));
|