| // 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-reftypes |
| |
| // 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()); |