diff options
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/compilation-hints-interpreter.js')
-rw-r--r-- | deps/v8/test/mjsunit/wasm/compilation-hints-interpreter.js | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/wasm/compilation-hints-interpreter.js b/deps/v8/test/mjsunit/wasm/compilation-hints-interpreter.js new file mode 100644 index 0000000000..f0a46b9ec7 --- /dev/null +++ b/deps/v8/test/mjsunit/wasm/compilation-hints-interpreter.js @@ -0,0 +1,113 @@ +// 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 --wasm-lazy-validation + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +(function testInterpreterCallsLazyFunctionInOtherInstance() { + print(arguments.callee.name); + let builder0 = new WasmModuleBuilder(); + builder0.addFunction("getX", kSig_i_v) + .addBody([kExprI32Const, 42]) + .setCompilationHint(kCompilationHintStrategyLazy, + kCompilationHintTierBaseline, + kCompilationHintTierBaseline) + .exportFunc(); + let builder1 = new WasmModuleBuilder(); + builder1.addImport("otherModule", "getX", kSig_i_v); + builder1.addFunction("plusX", kSig_i_i) + .addBody([kExprCallFunction, 0, + kExprGetLocal, 0, + kExprI32Add]) + .setCompilationHint(kCompilationHintStrategyLazy, + kCompilationHintTierInterpreter, + kCompilationHintTierInterpreter) + .exportFunc(); + let instance0 = builder0.instantiate(); + let instance1 = builder1.instantiate( + {otherModule: {getX: instance0.exports.getX}}); + assertEquals(46, instance1.exports.plusX(4)); +})(); + +(function testInterpreterCallsLazyBadFunctionInOtherInstance() { + print(arguments.callee.name); + let builder0 = new WasmModuleBuilder(); + builder0.addFunction("getX", kSig_i_v) + .addBody([kExprI64Const, 42]) + .setCompilationHint(kCompilationHintStrategyLazy, + kCompilationHintTierBaseline, + kCompilationHintTierBaseline) + .exportFunc(); + let builder1 = new WasmModuleBuilder(); + builder1.addImport("otherModule", "getX", kSig_i_v); + builder1.addFunction("plusX", kSig_i_i) + .addBody([kExprCallFunction, 0, + kExprGetLocal, 0, + kExprI32Add]) + .setCompilationHint(kCompilationHintStrategyLazy, + kCompilationHintTierInterpreter, + kCompilationHintTierInterpreter) + .exportFunc(); + let instance0 = builder0.instantiate(); + let instance1 = builder1.instantiate( + {otherModule: {getX: instance0.exports.getX}}); + assertThrows(() => instance1.exports.plusX(4), + WebAssembly.CompileError, + "Compiling function #0:\"getX\" failed: type error in " + + "merge[0] (expected i32, got i64) @+57"); +})(); + +(function testInterpreterCallsLazyFunctionThroughIndirection() { + print(arguments.callee.name); + let builder = new WasmModuleBuilder(); + let sig_i_ii = builder.addType(kSig_i_ii); + let add = builder.addFunction('add', sig_i_ii) + .addBody([kExprGetLocal, 0, + kExprGetLocal, 1, + kExprI32Add]) + .setCompilationHint(kCompilationHintStrategyLazy, + kCompilationHintTierInterpreter, + kCompilationHintTierInterpreter); + builder.appendToTable([add.index]); + builder.addFunction('main', kSig_i_iii) + .addBody([// Call indirect #0 with args <#1, #2>. + kExprGetLocal, 1, + kExprGetLocal, 2, + kExprGetLocal, 0, + kExprCallIndirect, sig_i_ii, kTableZero]) + .setCompilationHint(kCompilationHintStrategyLazy, + kCompilationHintTierInterpreter, + kCompilationHintTierInterpreter) + .exportFunc(); + assertEquals(99, builder.instantiate().exports.main(0, 22, 77)); +})(); + +(function testInterpreterCallsLazyBadFunctionThroughIndirection() { + print(arguments.callee.name); + let builder = new WasmModuleBuilder(); + let sig_i_ii = builder.addType(kSig_i_ii); + let add = builder.addFunction('add', sig_i_ii) + .addBody([kExprGetLocal, 0, + kExprGetLocal, 1, + kExprI64Add]) + .setCompilationHint(kCompilationHintStrategyLazy, + kCompilationHintTierInterpreter, + kCompilationHintTierInterpreter); + builder.appendToTable([add.index]); + builder.addFunction('main', kSig_i_iii) + .addBody([// Call indirect #0 with args <#1, #2>. + kExprGetLocal, 1, + kExprGetLocal, 2, + kExprGetLocal, 0, + kExprCallIndirect, sig_i_ii, kTableZero]) + .setCompilationHint(kCompilationHintStrategyLazy, + kCompilationHintTierInterpreter, + kCompilationHintTierInterpreter) + .exportFunc(); + assertThrows(() => builder.instantiate().exports.main(0, 22, 77), + WebAssembly.CompileError, + "Compiling function #0:\"add\" failed: i64.add[1] expected " + + "type i64, found local.get of type i32 @+83"); +})(); |