Commit e43a5f0e authored by Matthias Liedtke's avatar Matthias Liedtke Committed by V8 LUCI CQ

[test][wasm-gc] Replace (array|struct).new_[default_]with_rtt

Bug: v8:7748
Change-Id: Ib8fadc272178fb0d49f7d5fab7d1953e2328a1ad
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3770107
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
Cr-Commit-Position: refs/heads/main@{#81787}
parent ff747f9e
This diff is collapsed.
......@@ -504,8 +504,6 @@ inline uint16_t ExtractPrefixedOpcodeBytes(WasmOpcode opcode) {
__VA_ARGS__, WASM_GC_OP(kExprStructNew), static_cast<byte>(index)
#define WASM_STRUCT_NEW_DEFAULT(index) \
WASM_GC_OP(kExprStructNewDefault), static_cast<byte>(index)
#define WASM_STRUCT_NEW_DEFAULT_WITH_RTT(index, rtt) \
rtt, WASM_GC_OP(kExprStructNewDefaultWithRtt), static_cast<byte>(index)
#define WASM_STRUCT_GET(typeidx, fieldidx, struct_obj) \
struct_obj, WASM_GC_OP(kExprStructGet), static_cast<byte>(typeidx), \
static_cast<byte>(fieldidx)
......@@ -568,13 +566,8 @@ inline uint16_t ExtractPrefixedOpcodeBytes(WasmOpcode opcode) {
#define WASM_ARRAY_NEW(index, default_value, length) \
default_value, length, WASM_GC_OP(kExprArrayNew), static_cast<byte>(index)
#define WASM_ARRAY_NEW_WITH_RTT(index, default_value, length, rtt) \
default_value, length, rtt, WASM_GC_OP(kExprArrayNewWithRtt), \
static_cast<byte>(index)
#define WASM_ARRAY_NEW_DEFAULT(index, length) \
length, WASM_GC_OP(kExprArrayNewDefault), static_cast<byte>(index)
#define WASM_ARRAY_NEW_DEFAULT_WITH_RTT(index, length, rtt) \
length, rtt, WASM_GC_OP(kExprArrayNewDefaultWithRtt), static_cast<byte>(index)
#define WASM_ARRAY_GET(typeidx, array, index) \
array, index, WASM_GC_OP(kExprArrayGet), static_cast<byte>(typeidx)
#define WASM_ARRAY_GET_U(typeidx, array, index) \
......
......@@ -3,12 +3,12 @@ Tests GC object inspection.
Running test: test
Instantiating.
Waiting for wasm script (ignoring first non-wasm script).
Setting breakpoint at offset 109 on script wasm://wasm/b18cf04a
Setting breakpoint at offset 100 on script wasm://wasm/00670fd6
Calling main()
Paused:
Script wasm://wasm/b18cf04a byte offset 109: Wasm opcode 0x21 (kExprLocalSet)
Script wasm://wasm/00670fd6 byte offset 100: Wasm opcode 0x21 (kExprLocalSet)
Scope:
at $main (0:109):
at $main (0:100):
- scope (wasm-expression-stack):
0: Array ((ref $ArrC))
object details:
......
......@@ -59,20 +59,18 @@ const module_bytes = [
/////////////////////////// CODE SECTION //////////////////////////
0x0a, // code section
0x35, // section length
0x2c, // section length
0x01, // number of functions
0x33, // function 0: size
0x2a, // function 0: size
0x02, // number of locals
0x01, 0x6c, 0x00, // (local $varA (ref null $StrA))
0x01, 0x6c, 0x02, // (local $varC (ref null $ArrC))
// $varA := new $StrA(127, 32767, new $StrB(null))
0x41, 0xFF, 0x00, // i32.const 127
0x41, 0xFF, 0xFF, 0x01, // i32.const 32767
0xfb, 0x30, 0x01, // rtt.canon $StrB
0xfb, 0x02, 0x01, // struct.new_default_with_rtt $StrB
0xfb, 0x30, 0x00, // rtt.canon $StrA
0xfb, 0x01, 0x00, // struct.new_with_rtt $StrA
0xfb, 0x08, 0x01, // struct.new_default $StrB
0xfb, 0x07, 0x00, // struct.new $StrA
0x22, 0x00, // local.tee $varA
// $varA.$pointer.$next = $varA
0xfb, 0x03, 0x00, 0x02, // struct.get $StrA $pointer
......@@ -81,8 +79,7 @@ const module_bytes = [
// $varC := new $ArrC($varA)
0x20, 0x00, // local.get $varA -- value
0x41, 0x01, // i32.const 1 -- length
0xfb, 0x30, 0x02, // rtt.canon $ArrC
0xfb, 0x11, 0x02, // array.new_with_rtt $ArrC
0xfb, 0x1b, 0x02, // array.new $ArrC
0x21, 0x01, // local.set $varC
0x0b, // end
......@@ -221,7 +218,7 @@ InspectorTest.runAsyncTestSuite([
// Ignore javascript and full module wasm script, get scripts for functions.
const [, {params: wasm_script}] =
await Protocol.Debugger.onceScriptParsed(2);
let offset = 109; // "local.set $varC" at the end.
let offset = 100; // "local.set $varC" at the end.
await setBreakpoint(offset, wasm_script.scriptId, wasm_script.url);
InspectorTest.log('Calling main()');
await WasmInspectorTest.evalWithUrl('instance.exports.main()', 'runWasm');
......
......@@ -14,8 +14,7 @@ builder.addFunction('test', kSig_v_v)
.addBody([kExprLoop, kWasmVoid,
kExprI64Const, 15,
kExprI32Const, 12,
kGCPrefix, kExprRttCanon, array,
kGCPrefix, kExprArrayNewWithRtt, array,
kGCPrefix, kExprArrayNew, array,
kExprDrop,
kExprEnd])
.exportFunc();
......
......@@ -13,8 +13,7 @@ let array_index = builder.addArray(kWasmS128, true);
builder.addFunction("main", kSig_i_i)
.addBody([
kExprLocalGet, 0,
kGCPrefix, kExprRttCanon, array_index,
kGCPrefix, kExprArrayNewDefaultWithRtt, array_index,
kGCPrefix, kExprArrayNewDefault, array_index,
kGCPrefix, kExprArrayLen, array_index,
])
.exportFunc();
......
......@@ -23,8 +23,7 @@ builder.addActiveElementSegment(
main.addBody([
kExprI64Const, 0x33,
kExprLocalGet, 0,
kGCPrefix, kExprRttCanon, array_index,
kGCPrefix, kExprArrayNewWithRtt, array_index,
kGCPrefix, kExprArrayNew, array_index,
kExprDrop,
kExprI32Const, 0,
kExprCallIndirect, sig_index, table.index,
......
......@@ -91,20 +91,17 @@ kExprBlock, 0x06, // block @32 i32 i32 (ref 1) (ref any) i32 (ref 1) i64 (ref n
kSimdPrefix, kExprI32x4BitMask, 0x01, // i32x4.bitmask
kExprI32Const, 0x00, // i32.const
kExprRefFunc, 0x00, // ref.func
kGCPrefix, kExprRttCanon, 0x00, // rtt.canon
kGCPrefix, kExprStructNewWithRtt, 0x00, // struct.new_with_rtt
kGCPrefix, kExprStructNew, 0x00, // struct.new
kExprI32Const, 0x00, // i32.const
kExprRefFunc, 0x00, // ref.func
kExprI64Const, 0x00, // i64.const
kExprRefNull, 0x04, // ref.null
kExprI32Const, 0x00, // i32.const
kGCPrefix, kExprRttCanon, 0x00, // rtt.canon
kGCPrefix, kExprStructNewWithRtt, 0x00, // struct.new_with_rtt
kGCPrefix, kExprStructNew, 0x00, // struct.new
kExprRefNull, 0x04, // ref.null
kExprI64Const, 0x00, // i64.const
kExprI64Const, 0x00, // i64.const
kGCPrefix, kExprRttCanon, 0x00, // rtt.canon
kGCPrefix, kExprStructNewWithRtt, 0x00, // struct.new_with_rtt
kGCPrefix, kExprStructNew, 0x00, // struct.new
kExprI32Const, 0x00, // i32.const
kExprRefNull, 0x6e, // ref.null
kExprBrOnNull, 0x00, // br_on_null
......@@ -164,11 +161,9 @@ kExprBlock, 0x06, // block @32 i32 i32 (ref 1) (ref any) i32 (ref 1) i64 (ref n
kSimdPrefix, kExprI64x2ShrS, 0x01, // i64x2.shr_s
kSimdPrefix, kExprI32x4BitMask, 0x01, // i32x4.bitmask
kExprRefFunc, 0x00, // ref.func
kGCPrefix, kExprRttCanon, 0x00, // rtt.canon
kGCPrefix, kExprStructNewWithRtt, 0x00, // struct.new_with_rtt
kGCPrefix, kExprStructNew, 0x00, // struct.new
kExprI32Const, 0x00, // i32.const
kGCPrefix, kExprRttCanon, 0x00, // rtt.canon
kGCPrefix, kExprStructNewWithRtt, 0x00, // struct.new_with_rtt
kGCPrefix, kExprStructNew, 0x00, // struct.new
kExprRefNull, 0x6e, // ref.null
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x00, // i32.const
......@@ -181,13 +176,11 @@ kExprBlock, 0x06, // block @32 i32 i32 (ref 1) (ref any) i32 (ref 1) i64 (ref n
kExprI64Const, 0x00, // i64.const
kExprRefNull, 0x04, // ref.null
kExprI32Const, 0x00, // i32.const
kGCPrefix, kExprRttCanon, 0x00, // rtt.canon
kGCPrefix, kExprStructNewWithRtt, 0x00, // struct.new_with_rtt
kGCPrefix, kExprStructNew, 0x00, // struct.new
kExprRefNull, 0x04, // ref.null
kExprI64Const, 0x00, // i64.const
kExprI64Const, 0x00, // i64.const
kGCPrefix, kExprRttCanon, 0x00, // rtt.canon
kGCPrefix, kExprStructNewWithRtt, 0x00, // struct.new_with_rtt
kGCPrefix, kExprStructNew, 0x00, // struct.new
kExprI32Const, 0x00, // i32.const
kExprEnd, // end @302
kExprEnd, // end @303
......@@ -215,8 +208,7 @@ builder.addFunction(undefined, 2 /* sig */)
.addBodyWithEnd([
// signature: r_nnn
// body:
kGCPrefix, kExprRttCanon, 0x00, // rtt.canon
kGCPrefix, kExprStructNewWithRtt, 0x00, // struct.new_with_rtt
kGCPrefix, kExprStructNew, 0x00, // struct.new
kExprEnd, // end @7
]);
// Generate function 3 (out of 4).
......
......@@ -31,12 +31,10 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
builder.addFunction("init", kSig_v_v)
.addBody([
...wasmI32Const(array_length),
kGCPrefix, kExprRttCanon, array_index,
kGCPrefix, kExprArrayNewDefaultWithRtt, array_index,
kGCPrefix, kExprArrayNewDefault, array_index,
kExprGlobalSet, from.index,
...wasmI32Const(array_length),
kGCPrefix, kExprRttCanon, array_index,
kGCPrefix, kExprArrayNewDefaultWithRtt, array_index,
kGCPrefix, kExprArrayNewDefault, array_index,
kExprGlobalSet, to.index
])
.exportFunc();
......@@ -124,8 +122,7 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
"array_new", makeSig([], [wasmRefNullType(array_index)]))
.addBody([
...wasmI32Const(array_length),
kGCPrefix, kExprRttCanon, array_index,
kGCPrefix, kExprArrayNewDefaultWithRtt, array_index])
kGCPrefix, kExprArrayNewDefault, array_index])
.exportFunc();
builder.addFunction("loop_array_new", kSig_v_v)
......@@ -168,8 +165,7 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
...(test_object_type ? [kGCPrefix, kExprStructNewDefault, struct_index]
: wasmI32Const(10)),
...wasmI32Const(array_length),
kGCPrefix, kExprRttCanon, array_index,
kGCPrefix, kExprArrayNewWithRtt, array_index])
kGCPrefix, kExprArrayNew, array_index])
.exportFunc();
builder.addFunction("loop_array_new", kSig_v_v)
......
......@@ -21,22 +21,15 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
.addLocals(wasmRefNullType(struct1), 1)
.addLocals(wasmRefNullType(array1), 1)
.addBody([
// Check that we can create a struct with explicit RTT...
kGCPrefix, kExprRttCanon, struct2, kGCPrefix,
kExprStructNewDefaultWithRtt, struct2,
// ...and upcast it.
kExprLocalSet, 0,
// Check that we can create a struct with implicit RTT.
kGCPrefix, kExprStructNewDefault, struct2, kExprLocalSet, 0,
// Check that we can create an array with explicit RTT...
kExprI32Const, 10, // length
kGCPrefix, kExprRttCanon, array2,
kGCPrefix, kExprArrayNewDefaultWithRtt, array2,
kGCPrefix, kExprStructNewDefault, struct2,
// ...and upcast it.
kExprLocalSet, 1,
kExprLocalSet, 0,
// Check that we can create an array with implicit RTT.
kExprI32Const, 10, // length
kGCPrefix, kExprArrayNewDefault, array2, kExprLocalSet, 1])
kGCPrefix, kExprArrayNewDefault, array2,
// ...and upcast it.
kExprLocalSet, 1])
.exportFunc();
// This test is only interested in type checking.
......
......@@ -21,8 +21,7 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
.addBody([
kExprI32Const, 10, // local1 = struct(10, 100);
kExprI32Const, 100,
kGCPrefix, kExprRttCanon, struct,
kGCPrefix, kExprStructNewWithRtt, struct,
kGCPrefix, kExprStructNew, struct,
kExprLocalSet, 1,
kExprLocalGet, 0, // Split control based on an unknown value
kExprIf, kWasmI32,
......@@ -96,8 +95,8 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
]);
function buildStruct(value) {
return [kExprI32Const, value, kGCPrefix, kExprRttCanon, struct,
kGCPrefix, kExprStructNewWithRtt, struct];
return [kExprI32Const, value,
kGCPrefix, kExprStructNew, struct];
}
builder.addFunction("main_non_aliasing", kSig_i_v)
......@@ -141,8 +140,7 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
.addBody([
// We store a fresh struct in local0
kExprI32Const, initial_value,
kGCPrefix, kExprRttCanon, struct,
kGCPrefix, kExprStructNewWithRtt, struct,
kGCPrefix, kExprStructNew, struct,
kExprLocalSet, 0,
// We pass it through a function and store it to local1. local1 may now
......@@ -181,8 +179,7 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
.addLocals(wasmRefNullType(array), 1)
.addBody([
kExprI32Const, 5,
kGCPrefix, kExprRttCanon, array,
kGCPrefix, kExprArrayNewDefaultWithRtt, array,
kGCPrefix, kExprArrayNewDefault, array,
kExprLocalSet, 1,
kExprLocalGet, 1, // a[i] = i for i = {0..4}
......@@ -272,8 +269,7 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
.addBody([
// We store a fresh struct in local1
kExprI32Const, 0,
kGCPrefix, kExprRttCanon, struct,
kGCPrefix, kExprStructNewWithRtt, struct,
kGCPrefix, kExprStructNew, struct,
kExprLocalSet, 2,
// We pass the array parameter through a function and store it to local2.
......@@ -307,8 +303,8 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
builder.addFunction("main", kSig_i_i)
.addBody([
kExprI32Const, 10, kGCPrefix, kExprRttCanon, array,
kGCPrefix, kExprArrayNewDefaultWithRtt, array,
kExprI32Const, 10,
kGCPrefix, kExprArrayNewDefault, array,
kExprI32Const, 7,
kExprCallFunction, tester.index,
])
......@@ -329,12 +325,8 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
builder.addFunction("main", kSig_i_i)
.addBody([
kExprLocalGet, 0,
kGCPrefix, kExprRttCanon, struct1,
kGCPrefix, kExprStructNewWithRtt, struct1,
kGCPrefix, kExprRttCanon, struct2,
kGCPrefix, kExprStructNewWithRtt, struct2,
kGCPrefix, kExprStructNew, struct1,
kGCPrefix, kExprStructNew, struct2,
kGCPrefix, kExprStructGet, struct2, 0,
kGCPrefix, kExprStructGet, struct1, 0])
.exportFunc();
......@@ -357,14 +349,9 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
builder.addFunction("main", kSig_i_i)
.addBody([
kExprLocalGet, 0,
kGCPrefix, kExprRttCanon, struct1,
kGCPrefix, kExprStructNewWithRtt, struct1,
kGCPrefix, kExprStructNew, struct1,
kExprCallFunction, nop.index,
kGCPrefix, kExprRttCanon, struct2,
kGCPrefix, kExprStructNewWithRtt, struct2,
kGCPrefix, kExprStructNew, struct2,
kExprLocalGet, 0,
kExprReturn])
.exportFunc();
......
......@@ -393,8 +393,7 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
builder.addFunction("main", kSig_i_i)
.addBody([
kExprLocalGet, 0, kExprI32Const, 1, kExprI32Add,
kGCPrefix, kExprRttCanon, struct,
kGCPrefix, kExprStructNewWithRtt, struct,
kGCPrefix, kExprStructNew, struct,
kExprCallFunction, callee.index])
.exportFunc();
......
......@@ -123,20 +123,17 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
var global0 = builder.addGlobal(
wasmRefType(struct_index), false,
[...wasmI32Const(field2_value),
kGCPrefix, kExprRttCanon, struct_index,
kGCPrefix, kExprStructNewWithRtt, struct_index]);
kGCPrefix, kExprStructNew, struct_index]);
var global = builder.addGlobal(
wasmRefType(composite_struct_index), false,
[...wasmI32Const(field1_value), kExprGlobalGet, global0.index,
...wasmI32Const(field3_value),
kGCPrefix, kExprRttCanon, composite_struct_index,
kGCPrefix, kExprStructNewWithRtt, composite_struct_index]);
kGCPrefix, kExprStructNew, composite_struct_index]);
var global_default = builder.addGlobal(
wasmRefType(composite_struct_index), false,
[kGCPrefix, kExprRttCanon, composite_struct_index,
kGCPrefix, kExprStructNewDefaultWithRtt, composite_struct_index]);
[kGCPrefix, kExprStructNewDefault, composite_struct_index]);
builder.addFunction("field_1", kSig_i_v)
.addBody([
......@@ -231,15 +228,14 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
var global0 = builder.addGlobal(
wasmRefType(struct_index), false,
[...wasmI32Const(element0_value), kGCPrefix, kExprRttCanon, struct_index,
kGCPrefix, kExprStructNewWithRtt, struct_index]);
[...wasmI32Const(element0_value),
kGCPrefix, kExprStructNew, struct_index]);
var global = builder.addGlobal(
wasmRefType(array_index), false,
[kExprGlobalGet, global0.index, kExprRefNull, struct_index,
...wasmI32Const(element2_value),
kGCPrefix, kExprRttCanon, struct_index,
kGCPrefix, kExprStructNewWithRtt, struct_index,
kGCPrefix, kExprStructNew, struct_index,
kGCPrefix, kExprRttCanon, array_index,
kGCPrefix, kExprArrayNewFixed, array_index, 3]);
......
......@@ -38,10 +38,10 @@ var instance = (function () {
...wasmI32Const(7), ...wasmI32Const(9), ...wasmI32Const(11),
...wasmI32Const(13),
// Two structs (i.e. actual tagged pointers).
...wasmI32Const(20), kGCPrefix, kExprRttCanon, struct_index,
kGCPrefix, kExprStructNewWithRtt, struct_index,
...wasmI32Const(22), kGCPrefix, kExprRttCanon, struct_index,
kGCPrefix, kExprStructNewWithRtt, struct_index,
...wasmI32Const(20),
kGCPrefix, kExprStructNew, struct_index,
...wasmI32Const(22),
kGCPrefix, kExprStructNew, struct_index,
kExprCallFunction, many_params.index,
])
.exportFunc();
......
......@@ -20,10 +20,9 @@ function createArray_i() {
builder.addFunction("new_array", sig_a_i)
.addBody([
kExprLocalGet, 0, // --
kExprI32Const, 10, // --
kGCPrefix, kExprRttCanon, type_index, // --
kGCPrefix, kExprArrayNewWithRtt, type_index]) // --
kExprLocalGet, 0, // --
kExprI32Const, 10, // --
kGCPrefix, kExprArrayNew, type_index]) // --
.exportAs("new_array");
builder.addFunction("array_get", sig_i_ai)
......
......@@ -17,16 +17,13 @@ let instance = (() => {
.exportAs('inc');
builder.addFunction('struct_producer', makeSig([], [kWasmDataRef]))
.addBody([
kGCPrefix, kExprRttCanon, struct, kGCPrefix,
kExprStructNewDefaultWithRtt, struct
])
.addBody([kGCPrefix, kExprStructNewDefault, struct])
.exportFunc();
builder.addFunction('array_producer', makeSig([], [kWasmDataRef]))
.addBody([
kExprI32Const, 10, kGCPrefix, kExprRttCanon, array, kGCPrefix,
kExprArrayNewDefaultWithRtt, array
kExprI32Const, 10,
kGCPrefix, kExprArrayNewDefault, array
])
.exportFunc();
......
......@@ -479,16 +479,12 @@ for (let prefix in kPrefixOpcodes) {
}
// GC opcodes
let kExprStructNewWithRtt = 0x01;
let kExprStructNewDefaultWithRtt = 0x02;
let kExprStructGet = 0x03;
let kExprStructGetS = 0x04;
let kExprStructGetU = 0x05;
let kExprStructSet = 0x06;
let kExprStructNew = 0x07;
let kExprStructNewDefault = 0x08;
let kExprArrayNewWithRtt = 0x11;
let kExprArrayNewDefaultWithRtt = 0x12;
let kExprArrayGet = 0x13;
let kExprArrayGetS = 0x14;
let kExprArrayGetU = 0x15;
......
......@@ -26,9 +26,8 @@ function createSimpleStruct(field_type, value1, value2) {
builder.addFunction("new_struct", sig_a_t)
.addBody([
kExprLocalGet, 0, // --
kGCPrefix, kExprRttCanon, type_index, // --
kGCPrefix, kExprStructNewWithRtt, type_index]) // --
kExprLocalGet, 0, // --
kGCPrefix, kExprStructNew, type_index]) // --
.exportAs("new_struct");
builder.addFunction("get_field", sig_t_a)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment