4721585bee
This adds a flag to {WasmCode} objects to store whether this code was generated for debugging. This flag can be set for Liftoff code (in which case the code will e.g. have an extended prologue for debugging), but it can also be set for TurboFan, in case Liftoff bailed out when producing the debugging code. Having this flag allows us to remove the hack to pass the compilation results to {OnFinishedUnits} just to check whether we actually wanted to compile Liftoff functions. Drive-by: Replace the {ReachedRecompilationTierField} by a {MissingRecompilationField}, because all we need to know is if we are still waiting for that function to get recompiled. R=ahaas@chromium.org Bug: v8:10330,v8:10410 Change-Id: Ia023df8955a60d9f5595a6cb2737e14d83baf716 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2142259 Commit-Queue: Clemens Backes <clemensb@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#67119}
46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
// 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: --experimental-wasm-anyref
|
|
|
|
// Test that tiering up and tiering down works even if functions cannot be
|
|
// compiled with Liftoff.
|
|
|
|
load('test/mjsunit/wasm/wasm-module-builder.js');
|
|
|
|
// Create a simple Wasm module.
|
|
function create_builder(i) {
|
|
const builder = new WasmModuleBuilder();
|
|
builder.addFunction('main', kSig_i_r)
|
|
.addBody([
|
|
kExprLocalGet, 0, kExprRefIsNull,
|
|
...wasmI32Const(i),
|
|
kExprI32Add])
|
|
.exportFunc();
|
|
return builder;
|
|
}
|
|
|
|
const instance = create_builder(0).instantiate();
|
|
|
|
// Test recompilation.
|
|
const Debug = new DebugWrapper();
|
|
Debug.enable();
|
|
assertFalse(%IsLiftoffFunction(instance.exports.main));
|
|
const newInstance = create_builder(1).instantiate();
|
|
assertFalse(%IsLiftoffFunction(newInstance.exports.main));
|
|
|
|
// Async.
|
|
async function testTierDownToLiftoffAsync() {
|
|
Debug.disable();
|
|
const asyncInstance = await create_builder(2).asyncInstantiate();
|
|
|
|
// Test recompilation.
|
|
Debug.enable();
|
|
assertFalse(%IsLiftoffFunction(asyncInstance.exports.main));
|
|
const newAsyncInstance = await create_builder(3).asyncInstantiate();
|
|
assertFalse(%IsLiftoffFunction(newAsyncInstance.exports.main));
|
|
}
|
|
|
|
assertPromiseResult(testTierDownToLiftoffAsync());
|