v8/test/mjsunit/wasm/simd-call.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

67 lines
2.0 KiB
JavaScript
Raw Normal View History

Reland "[wasm-simd] Fix scalar lowering of kParameter" This relands commit e8832647b61509f3ef8c3e0c695e824128a02407. The flaky test failures seems to be related to tiering, Liftoff generating different call descriptors from TurboFan when Simd128 is unsupported (since TurboFan will lower the graph, but Liftoff can continue running simd-call.js just fine). We temporarily disable tiering for this test, until we get a proper fix, like https://crrev.com/c/2029427/, but that fix requires this change since more tests will fail without the lowering fixed. Bug: v8:10169 Bug: v8:10154 Original change's description: > [wasm-simd] Fix scalar lowering of kParameter > > Lowers the call descriptor of a wasm function if it contains simd. > > Also fixes a couple of issues with the lowering of kParameter: > - the old_index == new_index check is incorrect, it would only work if > the s128 parameter is the first parameter > - the old_index was also not adjusted to account for Parameter[0] being > the wasm instance object > - new_index needs to be adjusted to account for the instance object too > > These fixes make it more similar to the lowering of kParameter in > int64-lowering.c. > > Also add a new mjsunit test to exercise this logic. > > Bug: v8:10154 > Change-Id: Ia767a464c26a6a78fd931eab9e6897890a0904e8 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2020521 > Commit-Queue: Zhi An Ng <zhin@chromium.org> > Reviewed-by: Deepti Gandluri <gdeepti@chromium.org> > Reviewed-by: Andreas Haas <ahaas@chromium.org> > Cr-Commit-Position: refs/heads/master@{#66032} Change-Id: I1e27825025aefc5a42aeeb87d0447d6594388fa4 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2029147 Reviewed-by: Deepti Gandluri <gdeepti@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Commit-Queue: Zhi An Ng <zhin@chromium.org> Cr-Commit-Position: refs/heads/master@{#66072}
2020-01-30 22:32:55 +00:00
// 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-simd
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
Reland "[wasm-simd] Fix scalar lowering of kParameter" This relands commit e8832647b61509f3ef8c3e0c695e824128a02407. The flaky test failures seems to be related to tiering, Liftoff generating different call descriptors from TurboFan when Simd128 is unsupported (since TurboFan will lower the graph, but Liftoff can continue running simd-call.js just fine). We temporarily disable tiering for this test, until we get a proper fix, like https://crrev.com/c/2029427/, but that fix requires this change since more tests will fail without the lowering fixed. Bug: v8:10169 Bug: v8:10154 Original change's description: > [wasm-simd] Fix scalar lowering of kParameter > > Lowers the call descriptor of a wasm function if it contains simd. > > Also fixes a couple of issues with the lowering of kParameter: > - the old_index == new_index check is incorrect, it would only work if > the s128 parameter is the first parameter > - the old_index was also not adjusted to account for Parameter[0] being > the wasm instance object > - new_index needs to be adjusted to account for the instance object too > > These fixes make it more similar to the lowering of kParameter in > int64-lowering.c. > > Also add a new mjsunit test to exercise this logic. > > Bug: v8:10154 > Change-Id: Ia767a464c26a6a78fd931eab9e6897890a0904e8 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2020521 > Commit-Queue: Zhi An Ng <zhin@chromium.org> > Reviewed-by: Deepti Gandluri <gdeepti@chromium.org> > Reviewed-by: Andreas Haas <ahaas@chromium.org> > Cr-Commit-Position: refs/heads/master@{#66032} Change-Id: I1e27825025aefc5a42aeeb87d0447d6594388fa4 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2029147 Reviewed-by: Deepti Gandluri <gdeepti@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Commit-Queue: Zhi An Ng <zhin@chromium.org> Cr-Commit-Position: refs/heads/master@{#66072}
2020-01-30 22:32:55 +00:00
// Tests function calls containing s128 parameters. It also checks that
// lowering of simd calls are correct, so we create 2 functions with s128
// arguments: function 2 has a single s128 parameter, function 3 has a i32 then
// s128, to ensure that the arguments in different indices are correctly lowered.
(function TestSimd128Params() {
const builder = new WasmModuleBuilder();
builder.addImportedMemory('m', 'imported_mem', 1, 2);
builder
.addFunction("main", makeSig([], []))
.addBodyWithEnd([
kExprI32Const, 0,
kSimdPrefix, kExprS128LoadMem, 0, 0,
kExprCallFunction, 0x01,
kExprEnd,
]);
// Writes s128 argument to memory starting byte 16.
builder
.addFunction("function2", makeSig([kWasmS128], []))
.addBodyWithEnd([
kExprI32Const, 16,
kExprLocalGet, 0,
kSimdPrefix, kExprS128StoreMem, 0, 0,
kExprI32Const, 9, // This constant doesn't matter.
kExprLocalGet, 0,
kExprCallFunction, 0x02,
kExprEnd,
]);
// Writes s128 argument to memory starting byte 32.
builder
.addFunction("function3", makeSig([kWasmI32, kWasmS128], []))
.addBodyWithEnd([
kExprI32Const, 32,
kExprLocalGet, 1,
kSimdPrefix, kExprS128StoreMem, 0, 0,
kExprEnd,
]);
builder.addExport('main', 0);
var memory = new WebAssembly.Memory({initial:1, maximum:2});
const instance = builder.instantiate({m: {imported_mem: memory}});
const arr = new Uint8Array(memory.buffer);
// Fill the initial memory with some values, this is read by main and passed
// as arguments to function2, and then to function3.
for (let i = 0; i < 16; i++) {
arr[i] = i * 2;
}
instance.exports.main();
for (let i = 0; i < 16; i++) {
assertEquals(arr[i], arr[i+16]);
assertEquals(arr[i], arr[i+32]);
}
})();