| // 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: --experimental-wasm-compilation-hints |
| |
| load('test/mjsunit/wasm/wasm-module-builder.js'); |
| |
| (function testDecodeCompilationHintsSectionNoDowngrade() { |
| print(arguments.callee.name); |
| let builder = new WasmModuleBuilder(); |
| builder.addImport('mod', 'pow', kSig_i_ii); |
| builder.addFunction('upow', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprCallFunction, 0]) |
| .setCompilationHint(kCompilationHintStrategyLazy, |
| kCompilationHintTierOptimized, |
| kCompilationHintTierBaseline) |
| .exportFunc(); |
| assertThrows(() => builder.instantiate({mod: {pow: Math.pow}}), |
| WebAssembly.CompileError, |
| "WebAssembly.Module(): Invalid compilation hint 0x2d " + |
| "(forbidden downgrade) @+70"); |
| })(); |
| |
| (function testDecodeCompilationHintsSectionNoTiering() { |
| print(arguments.callee.name); |
| let builder = new WasmModuleBuilder(); |
| builder.addImport('mod', 'pow', kSig_i_ii); |
| builder.addFunction('upow', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprCallFunction, 0]) |
| .setCompilationHint(kCompilationHintStrategyDefault, |
| kCompilationHintTierInterpreter, |
| kCompilationHintTierInterpreter) |
| .exportFunc(); |
| builder.addFunction('upow2', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprCallFunction, 0]) |
| builder.addFunction('upow3', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprCallFunction, 0]) |
| let instance = builder.instantiate({mod: {pow: Math.pow}}); |
| assertEquals(27, instance.exports.upow(3)) |
| })(); |
| |
| (function testDecodeCompilationHintsSectionUpgrade() { |
| print(arguments.callee.name); |
| let builder = new WasmModuleBuilder(); |
| builder.addImport('mod', 'pow', kSig_i_ii); |
| builder.addFunction('upow2', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprCallFunction, 0]) |
| builder.addFunction('upow3', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprCallFunction, 0]) |
| builder.addFunction('upow', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprCallFunction, 0]) |
| .setCompilationHint(kCompilationHintStrategyEager, |
| kCompilationHintTierBaseline, |
| kCompilationHintTierOptimized) |
| .exportFunc(); |
| let instance = builder.instantiate({mod: {pow: Math.pow}}); |
| assertEquals(27, instance.exports.upow(3)) |
| })(); |
| |
| (function testDecodeCompilationHintsSectionNoImport() { |
| print(arguments.callee.name); |
| let builder = new WasmModuleBuilder(); |
| builder.addFunction('sq', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprI32Mul]) |
| .setCompilationHint(kCompilationHintStrategyEager, |
| kCompilationHintTierDefault, |
| kCompilationHintTierOptimized) |
| .exportFunc(); |
| let instance = builder.instantiate(); |
| assertEquals(9, instance.exports.sq(3)) |
| })(); |
| |
| (function testDecodeCompilationHintsSectionNoExport() { |
| print(arguments.callee.name); |
| let builder = new WasmModuleBuilder(); |
| builder.addFunction('sq', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprI32Mul]) |
| .setCompilationHint(kCompilationHintStrategyEager, |
| kCompilationHintTierDefault, |
| kCompilationHintTierOptimized) |
| builder.instantiate(); |
| })(); |
| |
| (function testDecodeCompilationHintsSectionTopTierDefault() { |
| print(arguments.callee.name); |
| let builder = new WasmModuleBuilder(); |
| builder.addFunction('sq', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprI32Mul]) |
| .setCompilationHint(kCompilationHintStrategyEager, |
| kCompilationHintTierOptimized, |
| kCompilationHintTierDefault) |
| .exportFunc(); |
| let instance = builder.instantiate(); |
| assertEquals(9, instance.exports.sq(3)) |
| })(); |
| |
| (function testDecodeCompilationHintsLazyBaselineEagerTopTier() { |
| print(arguments.callee.name); |
| let builder = new WasmModuleBuilder(); |
| builder.addFunction('sq', kSig_i_i) |
| .addBody([kExprGetLocal, 0, |
| kExprGetLocal, 0, |
| kExprI32Mul]) |
| .setCompilationHint(kCompilationHintStrategyLazyBaselineEagerTopTier, |
| kCompilationHintTierOptimized, |
| kCompilationHintTierDefault) |
| .exportFunc(); |
| builder.instantiate(); |
| })(); |