From 0ad557b95ee27d938e4f496ec6158c050169ad25 Mon Sep 17 00:00:00 2001 From: dcode Date: Tue, 8 Dec 2020 03:32:13 +0100 Subject: [PATCH] Backport heroic fixes made in #1559 --- cli/shim/process.js | 3 +- src/builtins.ts | 251 +++--- src/compiler.ts | 6 +- src/flow.ts | 2 +- src/glue/wasm/i64.ts | 2 +- src/program.ts | 7 +- std/assembly/array.ts | 2 +- std/assembly/function.ts | 2 +- std/assembly/map.ts | 2 +- std/assembly/set.ts | 2 +- std/assembly/staticarray.ts | 2 +- tests/compiler/do.optimized.wat | 6 +- tests/compiler/do.untouched.wat | 59 +- .../extends-baseaggregate.optimized.wat | 82 +- .../extends-baseaggregate.untouched.wat | 141 +++- tests/compiler/features/simd.optimized.wat | 8 +- tests/compiler/for.optimized.wat | 6 +- tests/compiler/for.untouched.wat | 59 +- .../implicit-getter-setter.optimized.wat | 31 +- .../implicit-getter-setter.untouched.wat | 76 +- tests/compiler/issues/1095.optimized.wat | 31 +- tests/compiler/issues/1095.untouched.wat | 67 +- tests/compiler/issues/1225.optimized.wat | 6 +- tests/compiler/issues/1225.untouched.wat | 59 +- tests/compiler/logical.optimized.wat | 6 +- tests/compiler/logical.untouched.wat | 59 +- tests/compiler/managed-cast.optimized.wat | 6 +- tests/compiler/managed-cast.untouched.wat | 70 +- tests/compiler/object-literal.optimized.wat | 125 ++- tests/compiler/object-literal.untouched.wat | 234 ++++-- tests/compiler/rc/global-init.untouched.wat | 50 +- tests/compiler/rc/local-init.optimized.wat | 6 +- tests/compiler/rc/local-init.untouched.wat | 59 +- .../rc/logical-and-mismatch.optimized.wat | 6 +- .../rc/logical-and-mismatch.untouched.wat | 59 +- .../rc/logical-or-mismatch.optimized.wat | 6 +- .../rc/logical-or-mismatch.untouched.wat | 59 +- tests/compiler/rc/optimize.optimized.wat | 6 +- tests/compiler/rc/optimize.untouched.wat | 59 +- tests/compiler/rc/rereturn.optimized.wat | 6 +- tests/compiler/rc/rereturn.untouched.wat | 59 +- .../rc/ternary-mismatch.optimized.wat | 6 +- .../rc/ternary-mismatch.untouched.wat | 61 +- tests/compiler/resolve-ternary.optimized.wat | 8 +- tests/compiler/resolve-ternary.untouched.wat | 63 +- .../retain-release-sanity.optimized.wat | 51 +- .../retain-release-sanity.untouched.wat | 119 ++- tests/compiler/retain-return.optimized.wat | 8 +- tests/compiler/retain-return.untouched.wat | 81 +- tests/compiler/rt/finalize.optimized.wat | 31 +- tests/compiler/rt/finalize.untouched.wat | 108 ++- tests/compiler/runtime-full.optimized.wat | 6 +- tests/compiler/runtime-full.untouched.wat | 50 +- .../compiler/std/array-literal.optimized.wat | 59 +- .../compiler/std/array-literal.untouched.wat | 112 ++- tests/compiler/std/array.optimized.wat | 137 +-- tests/compiler/std/array.untouched.wat | 488 ++++++++--- tests/compiler/std/arraybuffer.optimized.wat | 41 +- tests/compiler/std/arraybuffer.untouched.wat | 201 ++++- tests/compiler/std/dataview.optimized.wat | 53 +- tests/compiler/std/dataview.untouched.wat | 80 +- tests/compiler/std/map.optimized.wat | 10 +- tests/compiler/std/map.untouched.wat | 371 ++++++--- tests/compiler/std/set.optimized.wat | 10 +- tests/compiler/std/set.untouched.wat | 272 ++++-- tests/compiler/std/staticarray.optimized.wat | 25 +- tests/compiler/std/staticarray.untouched.wat | 81 +- .../std/string-casemapping.optimized.wat | 6 +- .../std/string-casemapping.untouched.wat | 63 +- .../std/string-encoding.optimized.wat | 6 +- .../std/string-encoding.untouched.wat | 50 +- tests/compiler/std/string.optimized.wat | 59 +- tests/compiler/std/string.untouched.wat | 72 +- tests/compiler/std/typedarray.optimized.wat | 44 +- tests/compiler/std/typedarray.untouched.wat | 778 ++++++++++++++---- tests/compiler/throw.untouched.wat | 52 +- tests/compiler/while.optimized.wat | 6 +- tests/compiler/while.untouched.wat | 59 +- 78 files changed, 3897 insertions(+), 1617 deletions(-) diff --git a/cli/shim/process.js b/cli/shim/process.js index ccf3bcc1a5..9604461c32 100644 --- a/cli/shim/process.js +++ b/cli/shim/process.js @@ -6,7 +6,8 @@ module.exports = { umask() { return 0; }, - hrtime + hrtime, + argv: [] }; // https://github.com/kumavis/browser-process-hrtime v1.0.0 diff --git a/src/builtins.ts b/src/builtins.ts index cbfd878cdf..a16a13de48 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -68,8 +68,6 @@ import { getConstValueI32, getConstValueF32, getConstValueF64, - Relooper, - RelooperBlockRef, SIMDLoadOp, getLocalGetIndex, createType, @@ -82,7 +80,6 @@ import { Field, Global, DecoratorFlags, - Element, ClassPrototype, Class } from "./program"; @@ -8691,134 +8688,184 @@ export function compileVisitGlobals(compiler: Compiler): void { ); } -/** Compiles the `visit_members` function. */ -export function compileVisitMembers(compiler: Compiler): void { +/** Ensures that the visitor function of the specified class is compiled. */ +function ensureVisitMembersOf(compiler: Compiler, instance: Class): void { + assert(instance.type.isManaged); + if (instance.visitRef) return; + var program = compiler.program; var module = compiler.module; var usizeType = program.options.usizeType; var nativeSizeType = usizeType.toNativeType(); var nativeSizeSize = usizeType.byteSize; - var managedClasses = program.managedClasses; var visitInstance = assert(program.visitInstance); - var blocks = new Array(); - var relooper = Relooper.create(module); - - // this function is @lazy: make sure it exists - compiler.compileFunction(visitInstance, true); - - var outer = relooper.addBlockWithSwitch( - module.nop(), - module.load(nativeSizeSize, false, - nativeSizeType == NativeType.I64 - ? module.binary(BinaryOp.SubI64, - module.local_get(0, nativeSizeType), - module.i64(8) - ) - : module.binary(BinaryOp.SubI32, - module.local_get(0, nativeSizeType), - module.i32(8) // rtId is at -8 - ), - NativeType.I32, - 0 - ) - ); - - var lastId = 0; - // TODO: for (let [instanceId, instance] of managedClasses) { - for (let _keys = Map_keys(managedClasses), i = 0, k = _keys.length; i < k; ++i) { - let instanceId = _keys[i]; - let instance = assert(managedClasses.get(instanceId)); - assert(instance.type.isManaged); - assert(instanceId == lastId++); - - let visitImpl: Element | null; - let code = new Array(); + var body = new Array(); + + // If the class has a base class, call its visitor first + var base = instance.base; + if (base) { + body.push( + module.call(base.internalName + "~visit", [ + module.local_get(0, nativeSizeType), // this + module.local_get(1, NativeType.I32) // cookie + ], NativeType.None) + ); + } - // if a library element, check if it implements a custom traversal function - if (instance.isDeclaredInLibrary && (visitImpl = instance.lookupInSelf("__visit_impl")) !== null) { - assert(visitImpl.kind == ElementKind.FUNCTION_PROTOTYPE); - let visitFunc = program.resolver.resolveFunction(visitImpl, null); - if (!visitFunc || !compiler.compileFunction(visitFunc)) { - code.push( + // Some standard library components provide a custom visitor implementation, + // for example to visit all members of a collection, e.g. arrays and maps. + var hasVisitImpl = false; + if (instance.isDeclaredInLibrary) { + let visitPrototype = instance.lookupInSelf("__visit"); + if (visitPrototype) { + assert(visitPrototype.kind == ElementKind.FUNCTION_PROTOTYPE); + let visitInstance = program.resolver.resolveFunction(visitPrototype, null); + if (!visitInstance || !compiler.compileFunction(visitInstance)) { + body.push( module.unreachable() ); } else { - let visitSig = visitFunc.signature; - let visitThisType = assert(visitSig.thisType); + let visitSignature = visitInstance.signature; + let visitThisType = assert(visitSignature.thisType); assert( - visitSig.parameterTypes.length == 1 && - visitSig.parameterTypes[0] == Type.u32 && - visitSig.returnType == Type.void && + visitSignature.parameterTypes.length == 1 && + visitSignature.parameterTypes[0] == Type.u32 && + visitSignature.returnType == Type.void && instance.type.isStrictlyAssignableTo(visitThisType) // incl. implemented on super ); - code.push( - module.call(visitFunc.internalName, [ - module.local_get(0, nativeSizeType), // ref + body.push( + module.call(visitInstance.internalName, [ + module.local_get(0, nativeSizeType), // this module.local_get(1, NativeType.I32) // cookie ], NativeType.None) ); } + hasVisitImpl = true; + } + } - // otherwise generate traversal logic for own fields - } else { - let members = instance.members; - if (members) { - // TODO: for (let member of members.values()) { - for (let _values = Map_values(members), j = 0, l = _values.length; j < l; ++j) { - let member = unchecked(_values[j]); - if (member.kind == ElementKind.FIELD) { - if ((member).parent === instance) { - let fieldType = (member).type; - if (fieldType.isManaged) { - let fieldOffset = (member).memoryOffset; - assert(fieldOffset >= 0); - code.push( - // if ($2 = value) FIELDCLASS~traverse($2) - module.if( - module.local_tee(2, - module.load(nativeSizeSize, false, - module.local_get(0, nativeSizeType), - nativeSizeType, fieldOffset - ) - ), - module.call(visitInstance.internalName, [ - module.local_get(2, nativeSizeType), // ref - module.local_get(1, NativeType.I32) // cookie - ], NativeType.None) - ) - ); - } + // Otherwise, if there is no custom visitor, generate a visitor function + // according to class layout, visiting all _own_ managed members. + var needsTempValue = false; + if (!hasVisitImpl) { + let members = instance.members; + if (members) { + // TODO: for (let member of members.values()) { + for (let _values = Map_values(members), j = 0, l = _values.length; j < l; ++j) { + let member = unchecked(_values[j]); + if (member.kind == ElementKind.FIELD) { + if ((member).parent === instance) { + let fieldType = (member).type; + if (fieldType.isManaged) { + let fieldOffset = (member).memoryOffset; + assert(fieldOffset >= 0); + needsTempValue = true; + body.push( + // if ($2 = value) __visit($2, $1) + module.if( + module.local_tee(2, + module.load(nativeSizeSize, false, + module.local_get(0, nativeSizeType), + nativeSizeType, fieldOffset + ) + ), + module.call(visitInstance.internalName, [ + module.local_get(2, nativeSizeType), // value + module.local_get(1, NativeType.I32) // cookie + ], NativeType.None) + ) + ); } } } } } - if (!instance.base) code.push(module.return()); - let block = relooper.addBlock( - module.flatten(code) - ); - relooper.addBranchForSwitch(outer, block, [ instanceId ]); - blocks.push(block); } - // TODO: for (let [instanceId, instance] of managedClasses) { + + // Create the visitor function + instance.visitRef = module.addFunction(instance.internalName + "~visit", + createType([nativeSizeType, NativeType.I32]), + NativeType.None, + needsTempValue ? [ nativeSizeType ] : null, + module.flatten(body, NativeType.None) + ); + + // And make sure the base visitor function exists + if (base) ensureVisitMembersOf(compiler, base); +} + +/** Compiles the `__visit_members` function. */ +export function compileVisitMembers(compiler: Compiler): void { + var program = compiler.program; + var module = compiler.module; + var usizeType = program.options.usizeType; + var nativeSizeType = usizeType.toNativeType(); + var managedClasses = program.managedClasses; + var visitInstance = assert(program.visitInstance); + compiler.compileFunction(visitInstance, true); // is lazy, make sure it is compiled + + // Prepare a mapping of class names to visitor calls. Each name corresponds to + // the respective sequential (0..N) class id. + var names = new Array(); + var cases = new Array(); + var nextId = 0; for (let _keys = Map_keys(managedClasses), i = 0, k = _keys.length; i < k; ++i) { - let instanceId = unchecked(_keys[i]); + let instanceId = _keys[i]; + assert(instanceId == nextId++); let instance = assert(managedClasses.get(instanceId)); - let base = instance.base; - if (base) relooper.addBranch(blocks[instanceId], blocks[base.id]); - } - blocks.push( - relooper.addBlock( - module.unreachable() + names[i] = instance.internalName; + cases[i] = module.block(null, [ + module.call(instance.internalName + "~visit", [ + module.local_get(0, nativeSizeType), // this + module.local_get(1, NativeType.I32) // cookie + ], NativeType.None), + module.return() + ], NativeType.None); + ensureVisitMembersOf(compiler, instance); + } + + // Make a br_table of the mapping, calling visitor functions by unique class id + var current = module.block(names[0], [ + module.switch(names, "invalid", + // load(changetype(this) - 8) + module.load(4, false, + nativeSizeType == NativeType.I64 + ? module.binary(BinaryOp.SubI64, + module.local_get(0, nativeSizeType), + module.i64(8) + ) + : module.binary(BinaryOp.SubI32, + module.local_get(0, nativeSizeType), + module.i32(8) // rtId is at -8 + ), + NativeType.I32, 0 + ) ) - ); - relooper.addBranchForSwitch(outer, blocks[blocks.length - 1], []); // default - compiler.compileFunction(visitInstance); + ], NativeType.None); + + // Wrap blocks in order + for (let i = 0, k = names.length - 1; i < k; ++i) { + current = module.block(names[i + 1], [ + current, + cases[i] + ], NativeType.None); + } + + // Wrap the last id in an 'invalid' block to break out of on invalid ids + current = module.block("invalid", [ + current, + cases[names.length - 1] + ], NativeType.None); + + // Add the function, executing an unreachable if breaking to 'invalid' module.addFunction(BuiltinNames.visit_members, - createType([ usizeType.toNativeType(), NativeType.I32 ]), // ref, cookie + createType([ nativeSizeType, NativeType.I32 ]), // this, cookie NativeType.None, // => void - [ nativeSizeType ], - relooper.renderAndDispose(outer, 2) + null, + module.flatten([ + current, + module.unreachable() + ]) ); } diff --git a/src/compiler.ts b/src/compiler.ts index 784324e2aa..f2c106f08d 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -10508,8 +10508,12 @@ export class Compiler extends DiagnosticEmitter { } } var parameterTypes = signature.parameterTypes; + var parameterNodes = reportNode.parameters; for (let i = 0, k = parameterTypes.length; i < k; ++i) { - if (!this.checkTypeSupported(parameterTypes[i], reportNode.parameters[i])) { + let parameterReportNode: Node; + if (parameterNodes.length > i) parameterReportNode = parameterNodes[i]; + else parameterReportNode = reportNode; + if (!this.checkTypeSupported(parameterTypes[i], parameterReportNode)) { supported = false; } } diff --git a/src/flow.ts b/src/flow.ts index f057c4426c..14de918a64 100644 --- a/src/flow.ts +++ b/src/flow.ts @@ -612,7 +612,7 @@ export class Flow { /** Tests if the specified `this` field has the specified flag or flags. */ isThisFieldFlag(field: Field, flag: FieldFlags): bool { var fieldFlags = this.thisFieldFlags; - if (fieldFlags) { + if (fieldFlags != null && fieldFlags.has(field)) { return (changetype(fieldFlags.get(field)) & flag) == flag; } return false; diff --git a/src/glue/wasm/i64.ts b/src/glue/wasm/i64.ts index 0de9015f16..ddea1ed57e 100644 --- a/src/glue/wasm/i64.ts +++ b/src/glue/wasm/i64.ts @@ -23,7 +23,7 @@ function i64_is(value: T): bool { // @ts-ignore: decorator @global @inline function i64_new(lo: i32, hi: i32 = 0): i64 { - return lo | (hi << 32); + return lo | (hi << 32); } // @ts-ignore: decorator diff --git a/src/program.ts b/src/program.ts index 3c0de6c7c6..7134597dc2 100644 --- a/src/program.ts +++ b/src/program.ts @@ -4117,6 +4117,8 @@ export class Class extends TypedElement { implementers: Set | null = null; /** Whether the field initialization check has already been performed. */ didCheckFieldInitialization: bool = false; + /** Runtime visitor function reference. */ + visitRef: FunctionRef = 0; /** Gets the unique runtime id of this class. */ get id(): u32 { @@ -4273,9 +4275,8 @@ export class Class extends TypedElement { var instance: Class | null = this; do { let overloads = instance.overloads; - if (overloads) { - let overload = overloads.get(kind); - if (overload) return overload; + if (overloads != null && overloads.has(kind)) { + return assert(overloads.get(kind)); } instance = instance.base; } while (instance); diff --git a/std/assembly/array.ts b/std/assembly/array.ts index 712e8f0b79..93a6711119 100644 --- a/std/assembly/array.ts +++ b/std/assembly/array.ts @@ -563,7 +563,7 @@ export class Array { // RT integration - @unsafe private __visit_impl(cookie: u32): void { + @unsafe private __visit(cookie: u32): void { if (isManaged()) { let cur = this.dataStart; let end = cur + (this.length_ << alignof()); diff --git a/std/assembly/function.ts b/std/assembly/function.ts index d434574ef4..dd32696330 100644 --- a/std/assembly/function.ts +++ b/std/assembly/function.ts @@ -31,7 +31,7 @@ type auto = i32; // RT integration - @unsafe private __visit_impl(cookie: u32): void { + @unsafe private __visit(cookie: u32): void { // Env is either `null` (nop) or compiler-generated __visit(this._env, cookie); } diff --git a/std/assembly/map.ts b/std/assembly/map.ts index 0239295c56..52ee7f60b1 100644 --- a/std/assembly/map.ts +++ b/std/assembly/map.ts @@ -233,7 +233,7 @@ export class Map { // RT integration - @unsafe private __visit_impl(cookie: u32): void { + @unsafe private __visit(cookie: u32): void { __visit(changetype(this.buckets), cookie); var entries = changetype(this.entries); if (isManaged() || isManaged()) { diff --git a/std/assembly/set.ts b/std/assembly/set.ts index fe2aa50fdf..ec14549d13 100644 --- a/std/assembly/set.ts +++ b/std/assembly/set.ts @@ -196,7 +196,7 @@ export class Set { // RT integration - @unsafe private __visit_impl(cookie: u32): void { + @unsafe private __visit(cookie: u32): void { __visit(changetype(this.buckets), cookie); var entries = changetype(this.entries); if (isManaged()) { diff --git a/std/assembly/staticarray.ts b/std/assembly/staticarray.ts index 7fdc548cb5..0af1a5856d 100644 --- a/std/assembly/staticarray.ts +++ b/std/assembly/staticarray.ts @@ -232,7 +232,7 @@ export class StaticArray { // RT integration - @unsafe private __visit_impl(cookie: u32): void { + @unsafe private __visit(cookie: u32): void { if (isManaged()) { let cur = changetype(this); let end = cur + changetype(changetype(this) - TOTAL_OVERHEAD).rtSize; diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat index ea304a6d3b..8b1afc4f7a 100644 --- a/tests/compiler/do.optimized.wat +++ b/tests/compiler/do.optimized.wat @@ -1376,13 +1376,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/do.untouched.wat b/tests/compiler/do.untouched.wat index 7a83d9d336..216769885a 100644 --- a/tests/compiler/do.untouched.wat +++ b/tests/compiler/do.untouched.wat @@ -2368,27 +2368,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $do/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $do/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $do/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $do/Ref~visit return end unreachable diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat index 01b23f62d2..cacb72e4e0 100644 --- a/tests/compiler/extends-baseaggregate.optimized.wat +++ b/tests/compiler/extends-baseaggregate.optimized.wat @@ -2070,76 +2070,86 @@ unreachable end ) + (func $extends-baseaggregate/A1~visit (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=16 + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) - block $folding-inner0 - block $switch$1$default - block $switch$1$case$6 - block $switch$1$case$4 - block $switch$1$case$2 + block $folding-inner2 + block $folding-inner1 + block $folding-inner0 + block $invalid + block $extends-baseaggregate/A2 + block $extends-baseaggregate/A1 + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner1 $extends-baseaggregate/A1 $folding-inner1 $extends-baseaggregate/A2 $folding-inner2 $folding-inner2 $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$4 $switch$1$case$6 $switch$1$case$4 $switch$1$case$6 $folding-inner0 $folding-inner0 $switch$1$default + local.get $1 + call $extends-baseaggregate/A1~visit + return end - return - end - local.get $0 - i32.load - local.tee $0 - if local.get $0 local.get $1 - call $~lib/rt/pure/__visit + call $extends-baseaggregate/A1~visit + return end - return - end - local.get $0 - i32.load offset=16 - local.tee $0 - if - local.get $0 - local.get $1 - call $~lib/rt/pure/__visit + unreachable end return end - unreachable + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + local.get $1 + call $~lib/rt/pure/__visit + end + return end local.get $0 - local.tee $2 i32.load offset=4 - local.tee $3 + local.tee $2 local.get $0 i32.load offset=12 i32.const 2 i32.shl i32.add - local.set $4 + local.set $3 loop $while-continue|0 + local.get $2 local.get $3 - local.get $4 i32.lt_u if - local.get $3 + local.get $2 i32.load - local.tee $0 + local.tee $4 if - local.get $0 + local.get $4 local.get $1 call $~lib/rt/pure/__visit end - local.get $3 + local.get $2 i32.const 4 i32.add - local.set $3 + local.set $2 br $while-continue|0 end end - local.get $2 + local.get $0 i32.load local.get $1 call $~lib/rt/pure/__visit diff --git a/tests/compiler/extends-baseaggregate.untouched.wat b/tests/compiler/extends-baseaggregate.untouched.wat index 6c3f0f09af..66bfbf6c3d 100644 --- a/tests/compiler/extends-baseaggregate.untouched.wat +++ b/tests/compiler/extends-baseaggregate.untouched.wat @@ -1,6 +1,6 @@ (module - (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) @@ -3844,7 +3844,62 @@ end end ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $extends-baseaggregate/B1~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $extends-baseaggregate/A1~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=16 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $extends-baseaggregate/C1~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $extends-baseaggregate/A2~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $extends-baseaggregate/A1~visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3889,7 +3944,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3934,50 +3994,71 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$10 - block $switch$1$case$9 - block $switch$1$case$6 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/array/Array + block $~lib/array/Array + block $extends-baseaggregate/A2 + block $extends-baseaggregate/C1 + block $extends-baseaggregate/A1 + block $extends-baseaggregate/B1 + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $extends-baseaggregate/B1 $extends-baseaggregate/A1 $extends-baseaggregate/C1 $extends-baseaggregate/A2 $~lib/array/Array $~lib/array/Array $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$4 $switch$1$case$6 $switch$1$case$4 $switch$1$case$6 $switch$1$case$9 $switch$1$case$10 $switch$1$default + local.get $1 + call $extends-baseaggregate/B1~visit + return end + local.get $0 + local.get $1 + call $extends-baseaggregate/A1~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $extends-baseaggregate/C1~visit return end local.get $0 - i32.load offset=16 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $extends-baseaggregate/A2~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end unreachable diff --git a/tests/compiler/features/simd.optimized.wat b/tests/compiler/features/simd.optimized.wat index 5832ddf3b3..c2b229623e 100644 --- a/tests/compiler/features/simd.optimized.wat +++ b/tests/compiler/features/simd.optimized.wat @@ -8,7 +8,6 @@ (func $~start (local $0 i32) (local $1 i32) - i32.const 1244 memory.size local.tee $1 i32.const 16 @@ -18,7 +17,8 @@ i32.const -16 i32.and local.tee $0 - i32.gt_u + i32.const 1244 + i32.lt_u if local.get $1 i32.const 66779 @@ -29,9 +29,9 @@ i32.const 16 i32.shr_u local.tee $0 - local.get $1 local.get $0 - i32.gt_s + local.get $1 + i32.lt_s select memory.grow i32.const 0 diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat index 436839e991..0cc4c890b9 100644 --- a/tests/compiler/for.optimized.wat +++ b/tests/compiler/for.optimized.wat @@ -1388,13 +1388,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/for.untouched.wat b/tests/compiler/for.untouched.wat index f9ccb21f39..7e3345bc55 100644 --- a/tests/compiler/for.untouched.wat +++ b/tests/compiler/for.untouched.wat @@ -2413,27 +2413,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $for/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $for/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $for/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $for/Ref~visit return end unreachable diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat index fa01df3f53..95499b1dbb 100644 --- a/tests/compiler/implicit-getter-setter.optimized.wat +++ b/tests/compiler/implicit-getter-setter.optimized.wat @@ -1558,31 +1558,30 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $folding-inner1 + block $invalid local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $folding-inner1 $__inlined_func$~lib/rt/__visit_members $folding-inner1 $invalid end - local.get $0 - i32.load offset=20 - local.tee $1 + unreachable + end + local.get $0 + i32.load offset=20 + local.tee $1 + if + local.get $1 + i32.const 1260 + i32.ge_u if local.get $1 - i32.const 1260 - i32.ge_u - if - local.get $1 - i32.const 20 - i32.sub - call $~lib/rt/pure/decrement - end + i32.const 20 + i32.sub + call $~lib/rt/pure/decrement end - br $__inlined_func$~lib/rt/__visit_members end - unreachable end local.get $2 i32.const -2147483648 diff --git a/tests/compiler/implicit-getter-setter.untouched.wat b/tests/compiler/implicit-getter-setter.untouched.wat index 0cfa3a8fef..07082125ad 100644 --- a/tests/compiler/implicit-getter-setter.untouched.wat +++ b/tests/compiler/implicit-getter-setter.untouched.wat @@ -3183,27 +3183,73 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $implicit-getter-setter/Basic~visit (param $0 i32) (param $1 i32) + nop + ) + (func $implicit-getter-setter/Managed~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $implicit-getter-setter/Managed + block $implicit-getter-setter/Basic + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $implicit-getter-setter/Basic $implicit-getter-setter/Managed $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return end + local.get $0 + local.get $1 + call $implicit-getter-setter/Basic~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $implicit-getter-setter/Managed~visit return end unreachable diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat index 8bde10b084..56902e1dc3 100644 --- a/tests/compiler/issues/1095.optimized.wat +++ b/tests/compiler/issues/1095.optimized.wat @@ -1000,31 +1000,30 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $folding-inner1 + block $invalid local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$4 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $folding-inner1 $folding-inner1 $invalid end - local.get $0 - i32.load offset=20 - local.tee $1 + unreachable + end + local.get $0 + i32.load offset=20 + local.tee $1 + if + local.get $1 + i32.const 1372 + i32.ge_u if local.get $1 - i32.const 1372 - i32.ge_u - if - local.get $1 - i32.const 20 - i32.sub - call $~lib/rt/pure/decrement - end + i32.const 20 + i32.sub + call $~lib/rt/pure/decrement end - br $__inlined_func$~lib/rt/__visit_members end - unreachable end local.get $2 i32.const -2147483648 diff --git a/tests/compiler/issues/1095.untouched.wat b/tests/compiler/issues/1095.untouched.wat index 884a899085..3029c94f1b 100644 --- a/tests/compiler/issues/1095.untouched.wat +++ b/tests/compiler/issues/1095.untouched.wat @@ -1700,27 +1700,64 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $issues/1095/Foo~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $issues/1095/Foo + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/1095/Foo $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $issues/1095/Foo~visit return end unreachable diff --git a/tests/compiler/issues/1225.optimized.wat b/tests/compiler/issues/1225.optimized.wat index 46f0718225..136ef95ab5 100644 --- a/tests/compiler/issues/1225.optimized.wat +++ b/tests/compiler/issues/1225.optimized.wat @@ -1010,13 +1010,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/issues/1225.untouched.wat b/tests/compiler/issues/1225.untouched.wat index 9a18a2784b..1bddd0ea8e 100644 --- a/tests/compiler/issues/1225.untouched.wat +++ b/tests/compiler/issues/1225.untouched.wat @@ -1721,27 +1721,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $issues/1225/X~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $issues/1225/X + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/1225/X $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $issues/1225/X~visit return end unreachable diff --git a/tests/compiler/logical.optimized.wat b/tests/compiler/logical.optimized.wat index 09426d4f58..a775208f95 100644 --- a/tests/compiler/logical.optimized.wat +++ b/tests/compiler/logical.optimized.wat @@ -995,13 +995,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/logical.untouched.wat b/tests/compiler/logical.untouched.wat index 3376d25d2c..c5c03e8aff 100644 --- a/tests/compiler/logical.untouched.wat +++ b/tests/compiler/logical.untouched.wat @@ -2250,27 +2250,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $logical/Obj~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $logical/Obj + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $logical/Obj $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $logical/Obj~visit return end unreachable diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat index 94655ddbd1..2e2d1d0a33 100644 --- a/tests/compiler/managed-cast.optimized.wat +++ b/tests/compiler/managed-cast.optimized.wat @@ -1141,13 +1141,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/managed-cast.untouched.wat b/tests/compiler/managed-cast.untouched.wat index d8f1332601..8d928e2e7d 100644 --- a/tests/compiler/managed-cast.untouched.wat +++ b/tests/compiler/managed-cast.untouched.wat @@ -1957,27 +1957,67 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $managed-cast/Cat~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $managed-cast/Animal~visit + ) + (func $managed-cast/Animal~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $managed-cast/Animal + block $managed-cast/Cat + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $managed-cast/Cat $managed-cast/Animal $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return end + local.get $0 + local.get $1 + call $managed-cast/Cat~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $managed-cast/Animal~visit return end unreachable diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat index df0052b0fd..ea2dcbdc25 100644 --- a/tests/compiler/object-literal.optimized.wat +++ b/tests/compiler/object-literal.optimized.wat @@ -2150,15 +2150,15 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$8 - block $switch$1$case$5 - block $switch$1$case$4 + block $folding-inner1 + block $invalid + block $object-literal/OmittedFoo + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$5 $__inlined_func$~lib/rt/__visit_members $switch$1$case$5 $switch$1$case$8 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $folding-inner1 $__inlined_func$~lib/rt/__visit_members $folding-inner1 $object-literal/OmittedFoo $invalid end local.get $0 i32.load offset=20 @@ -2170,73 +2170,72 @@ br $__inlined_func$~lib/rt/__visit_members end local.get $0 + i32.load offset=20 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 i32.load offset=24 local.tee $1 if local.get $1 call $~lib/rt/pure/__visit end + local.get $0 + i32.load offset=28 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=32 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=36 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=40 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=44 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=48 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end br $__inlined_func$~lib/rt/__visit_members end - local.get $0 - i32.load offset=20 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=24 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=28 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=32 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=36 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=40 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=44 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=48 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit - end - br $__inlined_func$~lib/rt/__visit_members + unreachable + end + local.get $0 + i32.load offset=24 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit end - unreachable end local.get $2 i32.const -2147483648 diff --git a/tests/compiler/object-literal.untouched.wat b/tests/compiler/object-literal.untouched.wat index 7b020683c3..bf8769531b 100644 --- a/tests/compiler/object-literal.untouched.wat +++ b/tests/compiler/object-literal.untouched.wat @@ -1,7 +1,7 @@ (module + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) @@ -3981,105 +3981,163 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $object-literal/Managed~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $object-literal/OmittedTypes~visit (param $0 i32) (param $1 i32) + nop + ) + (func $object-literal/MixedOmitted~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $object-literal/OmittedFoo~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$8 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=4 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=8 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=12 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=16 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=20 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=24 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + local.get $0 + i32.load offset=28 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $object-literal/OmittedFoo + block $object-literal/MixedOmitted + block $object-literal/OmittedTypes + block $object-literal/Managed + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $object-literal/Managed $object-literal/OmittedTypes $object-literal/MixedOmitted $object-literal/OmittedFoo $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$2 $switch$1$case$5 $switch$1$case$8 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return end + local.get $0 + local.get $1 + call $object-literal/Managed~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $object-literal/OmittedTypes~visit return end local.get $0 - i32.load offset=4 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end - return - end - local.get $0 - i32.load - local.tee $2 - if - local.get $2 local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=4 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=8 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=12 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=16 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=20 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end - local.get $0 - i32.load offset=24 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit + call $object-literal/MixedOmitted~visit + return end local.get $0 - i32.load offset=28 - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $object-literal/OmittedFoo~visit return end unreachable diff --git a/tests/compiler/rc/global-init.untouched.wat b/tests/compiler/rc/global-init.untouched.wat index 04636f5f78..015aa1b9aa 100644 --- a/tests/compiler/rc/global-init.untouched.wat +++ b/tests/compiler/rc/global-init.untouched.wat @@ -845,27 +845,47 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end unreachable diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat index 31270e5fa5..2b02ffba72 100644 --- a/tests/compiler/rc/local-init.optimized.wat +++ b/tests/compiler/rc/local-init.optimized.wat @@ -951,13 +951,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/rc/local-init.untouched.wat b/tests/compiler/rc/local-init.untouched.wat index 2bebd5f599..9c9237d517 100644 --- a/tests/compiler/rc/local-init.untouched.wat +++ b/tests/compiler/rc/local-init.untouched.wat @@ -1667,27 +1667,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $rc/local-init/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rc/local-init/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rc/local-init/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $rc/local-init/Ref~visit return end unreachable diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat index 1d6b988c9a..cfe499fbdc 100644 --- a/tests/compiler/rc/logical-and-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat @@ -994,13 +994,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/rc/logical-and-mismatch.untouched.wat b/tests/compiler/rc/logical-and-mismatch.untouched.wat index cb73cbb6ae..ea5df8797c 100644 --- a/tests/compiler/rc/logical-and-mismatch.untouched.wat +++ b/tests/compiler/rc/logical-and-mismatch.untouched.wat @@ -1707,27 +1707,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $rc/logical-and-mismatch/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rc/logical-and-mismatch/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rc/logical-and-mismatch/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $rc/logical-and-mismatch/Ref~visit return end unreachable diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat index c236ff0479..a513c641df 100644 --- a/tests/compiler/rc/logical-or-mismatch.optimized.wat +++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat @@ -994,13 +994,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/rc/logical-or-mismatch.untouched.wat b/tests/compiler/rc/logical-or-mismatch.untouched.wat index 09a6e5a0ce..f67f524969 100644 --- a/tests/compiler/rc/logical-or-mismatch.untouched.wat +++ b/tests/compiler/rc/logical-or-mismatch.untouched.wat @@ -1707,27 +1707,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $rc/logical-or-mismatch/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rc/logical-or-mismatch/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rc/logical-or-mismatch/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $rc/logical-or-mismatch/Ref~visit return end unreachable diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat index d9c19f186b..d9985b2570 100644 --- a/tests/compiler/rc/optimize.optimized.wat +++ b/tests/compiler/rc/optimize.optimized.wat @@ -1285,13 +1285,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/rc/optimize.untouched.wat b/tests/compiler/rc/optimize.untouched.wat index cbc8bbafe0..4154468bcc 100644 --- a/tests/compiler/rc/optimize.untouched.wat +++ b/tests/compiler/rc/optimize.untouched.wat @@ -1959,27 +1959,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $rc/optimize/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rc/optimize/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rc/optimize/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $rc/optimize/Ref~visit return end unreachable diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat index ce740b6d1e..b89bf8febe 100644 --- a/tests/compiler/rc/rereturn.optimized.wat +++ b/tests/compiler/rc/rereturn.optimized.wat @@ -1492,13 +1492,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/rc/rereturn.untouched.wat b/tests/compiler/rc/rereturn.untouched.wat index 425052bc4e..95c0a29e0c 100644 --- a/tests/compiler/rc/rereturn.untouched.wat +++ b/tests/compiler/rc/rereturn.untouched.wat @@ -3133,27 +3133,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $rc/rereturn/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rc/rereturn/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rc/rereturn/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $rc/rereturn/Ref~visit return end unreachable diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat index 3baa70507c..32bd1ef238 100644 --- a/tests/compiler/rc/ternary-mismatch.optimized.wat +++ b/tests/compiler/rc/ternary-mismatch.optimized.wat @@ -983,13 +983,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/rc/ternary-mismatch.untouched.wat b/tests/compiler/rc/ternary-mismatch.untouched.wat index d70fe57a41..ebb3f0ab6e 100644 --- a/tests/compiler/rc/ternary-mismatch.untouched.wat +++ b/tests/compiler/rc/ternary-mismatch.untouched.wat @@ -1,6 +1,6 @@ (module - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) @@ -1691,27 +1691,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $rc/ternary-mismatch/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rc/ternary-mismatch/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rc/ternary-mismatch/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $rc/ternary-mismatch/Ref~visit return end unreachable diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat index e6831492bd..67188a9ae4 100644 --- a/tests/compiler/resolve-ternary.optimized.wat +++ b/tests/compiler/resolve-ternary.optimized.wat @@ -2589,14 +2589,14 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$5 - block $switch$1$case$4 + block $invalid + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$5 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/resolve-ternary.untouched.wat b/tests/compiler/resolve-ternary.untouched.wat index 9cf25d5256..abd20122ec 100644 --- a/tests/compiler/resolve-ternary.untouched.wat +++ b/tests/compiler/resolve-ternary.untouched.wat @@ -1,7 +1,7 @@ (module (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) @@ -5390,39 +5390,64 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/function/Function<%28i32%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%29=>i32>#__visit_impl + call $~lib/function/Function<%28i32%29=>i32>~visit return end unreachable diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat index c733742554..d5f240f154 100644 --- a/tests/compiler/retain-release-sanity.optimized.wat +++ b/tests/compiler/retain-release-sanity.optimized.wat @@ -2643,68 +2643,67 @@ (local $2 i32) (local $3 i32) (local $4 i32) - block $folding-inner0 - block $switch$1$default - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $folding-inner2 + block $folding-inner1 + block $folding-inner0 + block $invalid + block $~lib/array/Array local.get $0 i32.const 8 i32.sub i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $folding-inner0 $folding-inner0 $switch$1$case$4 $switch$1$case$4 $switch$1$default + br_table $folding-inner0 $folding-inner0 $folding-inner1 $~lib/array/Array $folding-inner2 $folding-inner2 $folding-inner1 $folding-inner1 $invalid end - return - end - local.get $0 - i32.load - local.tee $0 - if local.get $0 + i32.load local.get $1 call $~lib/rt/pure/__visit + return end - return + unreachable end + return + end + local.get $0 + i32.load + local.tee $0 + if local.get $0 - i32.load local.get $1 call $~lib/rt/pure/__visit - return end - unreachable + return end local.get $0 - local.tee $2 i32.load offset=4 - local.tee $3 + local.tee $2 local.get $0 i32.load offset=12 i32.const 2 i32.shl i32.add - local.set $4 + local.set $3 loop $while-continue|0 + local.get $2 local.get $3 - local.get $4 i32.lt_u if - local.get $3 + local.get $2 i32.load - local.tee $0 + local.tee $4 if - local.get $0 + local.get $4 local.get $1 call $~lib/rt/pure/__visit end - local.get $3 + local.get $2 i32.const 4 i32.add - local.set $3 + local.set $2 br $while-continue|0 end end - local.get $2 + local.get $0 i32.load local.get $1 call $~lib/rt/pure/__visit diff --git a/tests/compiler/retain-release-sanity.untouched.wat b/tests/compiler/retain-release-sanity.untouched.wat index 3458d888e9..d6b33dd9bd 100644 --- a/tests/compiler/retain-release-sanity.untouched.wat +++ b/tests/compiler/retain-release-sanity.untouched.wat @@ -1,8 +1,8 @@ (module + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) @@ -4584,7 +4584,24 @@ end end ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -4592,7 +4609,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/string/String>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4637,7 +4659,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String>>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String>>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4682,45 +4709,87 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String>>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array<~lib/string/String>>#__visit + ) + (func $retain-release-sanity/A~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$7 - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $retain-release-sanity/B~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $retain-release-sanity/B + block $retain-release-sanity/A + block $~lib/array/Array<~lib/array/Array<~lib/string/String>> + block $~lib/array/Array<~lib/string/String> + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array<~lib/string/String> $~lib/array/Array<~lib/array/Array<~lib/string/String>> $retain-release-sanity/A $retain-release-sanity/B $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$case$7 $switch$1$case$4 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return end + local.get $0 + local.get $1 + call $~lib/array/Array~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array<~lib/array/Array<~lib/string/String>>~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit_impl + call $retain-release-sanity/A~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/string/String>>#__visit_impl + call $retain-release-sanity/B~visit return end unreachable diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat index 9d06a5a8d0..8640953187 100644 --- a/tests/compiler/retain-return.optimized.wat +++ b/tests/compiler/retain-return.optimized.wat @@ -1052,14 +1052,14 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $folding-inner0 - block $switch$1$default - block $switch$1$case$4 + block $folding-inner1 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $folding-inner0 $folding-inner0 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $folding-inner1 $folding-inner1 $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/retain-return.untouched.wat b/tests/compiler/retain-return.untouched.wat index 433fe3e6c8..f31a3aa304 100644 --- a/tests/compiler/retain-return.untouched.wat +++ b/tests/compiler/retain-return.untouched.wat @@ -1821,51 +1821,90 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/function/Function<%28%29=>retain-return/Ref>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $retain-return/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/function/Function<%28%29=>retain-return/Ref>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28%29=>retain-return/Ref>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>retain-return/Ref>#__visit + ) + (func $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref>#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$7 - block $switch$1$case$6 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref> + block $~lib/function/Function<%28%29=>retain-return/Ref> + block $retain-return/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $retain-return/Ref $~lib/function/Function<%28%29=>retain-return/Ref> $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref> $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$case$6 $switch$1$case$7 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $retain-return/Ref~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28%29=>retain-return/Ref>#__visit_impl + call $~lib/function/Function<%28%29=>retain-return/Ref>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref>#__visit_impl + call $~lib/function/Function<%28retain-return/Ref%29=>retain-return/Ref>~visit return end unreachable diff --git a/tests/compiler/rt/finalize.optimized.wat b/tests/compiler/rt/finalize.optimized.wat index eb656bc37a..af102e7b04 100644 --- a/tests/compiler/rt/finalize.optimized.wat +++ b/tests/compiler/rt/finalize.optimized.wat @@ -2246,37 +2246,36 @@ end ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $switch$1$default - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $folding-inner1 + block $folding-inner0 + block $invalid + block $~lib/array/Array + block $~lib/staticarray/StaticArray local.get $0 i32.const 8 i32.sub i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$case$4 $switch$1$case$4 $switch$1$default + br_table $folding-inner0 $folding-inner0 $folding-inner1 $~lib/staticarray/StaticArray $~lib/array/Array $folding-inner1 $folding-inner1 $invalid end return end local.get $0 i32.load - local.tee $0 - if - local.get $0 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/rt/pure/__visit return end - return + unreachable end + return + end + local.get $0 + i32.load + local.tee $0 + if local.get $0 - i32.load local.get $1 call $~lib/rt/pure/__visit - return end - unreachable ) ) diff --git a/tests/compiler/rt/finalize.untouched.wat b/tests/compiler/rt/finalize.untouched.wat index 123a7f9eda..6c3750c4d3 100644 --- a/tests/compiler/rt/finalize.untouched.wat +++ b/tests/compiler/rt/finalize.untouched.wat @@ -1,7 +1,7 @@ (module + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) @@ -4090,11 +4090,33 @@ end end ) - (func $~lib/staticarray/StaticArray#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/staticarray/StaticArray#__visit (param $0 i32) (param $1 i32) i32.const 0 drop ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/staticarray/StaticArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -4102,39 +4124,81 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $rt/finalize/Foo~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $rt/finalize/Bar~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rt/finalize/Bar + block $rt/finalize/Foo + block $~lib/array/Array + block $~lib/staticarray/StaticArray + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $~lib/array/Array $rt/finalize/Foo $rt/finalize/Bar $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$case$4 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return end + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/staticarray/StaticArray#__visit_impl + call $rt/finalize/Foo~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $rt/finalize/Bar~visit return end unreachable diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat index 72fd554f5d..7b7cca2258 100644 --- a/tests/compiler/runtime-full.optimized.wat +++ b/tests/compiler/runtime-full.optimized.wat @@ -1485,13 +1485,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/runtime-full.untouched.wat b/tests/compiler/runtime-full.untouched.wat index cb9fb8956b..148d9db258 100644 --- a/tests/compiler/runtime-full.untouched.wat +++ b/tests/compiler/runtime-full.untouched.wat @@ -3105,27 +3105,47 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end unreachable diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat index d85fd42a46..436f8a1c79 100644 --- a/tests/compiler/std/array-literal.optimized.wat +++ b/tests/compiler/std/array-literal.optimized.wat @@ -1523,10 +1523,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) local.get $0 i32.load offset=4 - local.tee $4 + local.tee $2 i32.const 268435455 i32.and local.set $1 @@ -1547,21 +1546,18 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $folding-inner1 - block $folding-inner0 - block $switch$1$default - block $switch$1$case$4 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 - i32.const 20 + i32.const 12 i32.add - local.tee $2 - i32.const 8 - i32.sub i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $folding-inner0 $__inlined_func$~lib/rt/__visit_members $folding-inner1 $__inlined_func$~lib/rt/__visit_members $folding-inner1 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $folding-inner1 $folding-inner1 $__inlined_func$~lib/rt/__visit_members $folding-inner2 $__inlined_func$~lib/rt/__visit_members $folding-inner2 $invalid end - local.get $2 - i32.load + local.get $0 + i32.load offset=20 local.tee $1 if local.get $1 @@ -1571,45 +1567,44 @@ end unreachable end - local.get $2 - i32.load + local.get $0 + i32.load offset=20 call $~lib/rt/pure/__visit br $__inlined_func$~lib/rt/__visit_members end - local.get $2 + local.get $0 + i32.load offset=24 local.tee $1 - i32.load offset=4 - local.tee $3 - local.get $1 - i32.load offset=12 + local.get $0 + i32.load offset=32 i32.const 2 i32.shl i32.add - local.set $2 + local.set $3 loop $while-continue|0 - local.get $2 + local.get $1 local.get $3 - i32.gt_u + i32.lt_u if - local.get $3 + local.get $1 i32.load - local.tee $5 + local.tee $4 if - local.get $5 + local.get $4 call $~lib/rt/pure/__visit end - local.get $3 + local.get $1 i32.const 4 i32.add - local.set $3 + local.set $1 br $while-continue|0 end end - local.get $1 - i32.load + local.get $0 + i32.load offset=20 call $~lib/rt/pure/__visit end - local.get $4 + local.get $2 i32.const -2147483648 i32.and if @@ -1644,7 +1639,7 @@ local.get $1 i32.const 1 i32.sub - local.get $4 + local.get $2 i32.const -268435456 i32.and i32.or diff --git a/tests/compiler/std/array-literal.untouched.wat b/tests/compiler/std/array-literal.untouched.wat index 7bb98c4f8b..cdb826c6e0 100644 --- a/tests/compiler/std/array-literal.untouched.wat +++ b/tests/compiler/std/array-literal.untouched.wat @@ -3462,7 +3462,24 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -3470,7 +3487,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -3478,7 +3500,15 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $std/array-literal/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3523,7 +3553,15 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $std/array-literal/RefWithCtor~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3568,51 +3606,71 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$10 - block $switch$1$case$8 - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/array/Array + block $std/array-literal/RefWithCtor + block $~lib/array/Array + block $std/array-literal/Ref + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $std/array-literal/Ref $~lib/array/Array $std/array-literal/RefWithCtor $~lib/array/Array $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$case$2 $switch$1$case$8 $switch$1$case$2 $switch$1$case$10 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return end + local.get $0 + local.get $1 + call $~lib/array/Array~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $std/array-literal/Ref~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $std/array-literal/RefWithCtor~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end unreachable diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index eb74f82c51..6fc723cbe2 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -19642,8 +19642,6 @@ (func $~lib/rt/pure/decrement (param $0 i32) (local $1 i32) (local $2 i32) - (local $3 i32) - (local $4 i32) local.get $0 i32.load offset=4 local.tee $2 @@ -19667,68 +19665,63 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $folding-inner2 - block $folding-inner1 - block $folding-inner0 - block $switch$1$default - block $switch$1$case$4 - local.get $0 - i32.const 12 - i32.add - i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner1 $folding-inner2 $__inlined_func$~lib/rt/__visit_members $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $switch$1$default - end - local.get $0 - i32.load offset=20 - local.tee $1 - if + block $folding-inner4 + block $folding-inner3 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $std/array/ArrayStr + block $~lib/typedarray/Uint8Array + block $~lib/arraybuffer/ArrayBufferView + local.get $0 + i32.const 20 + i32.add + local.tee $1 + i32.const 8 + i32.sub + i32.load + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $folding-inner1 $__inlined_func$~lib/rt/__visit_members $~lib/typedarray/Uint8Array $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner2 $folding-inner3 $__inlined_func$~lib/rt/__visit_members $folding-inner2 $folding-inner3 $folding-inner2 $folding-inner3 $folding-inner2 $folding-inner3 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner4 $folding-inner4 $std/array/ArrayStr $invalid + end + local.get $1 + i32.load + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + br $__inlined_func$~lib/rt/__visit_members + end + local.get $1 + i32.load + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + br $__inlined_func$~lib/rt/__visit_members + end local.get $1 - call $~lib/rt/pure/__visit + call $~lib/array/Array~visit + br $__inlined_func$~lib/rt/__visit_members end - br $__inlined_func$~lib/rt/__visit_members + unreachable end - unreachable - end - local.get $0 - i32.load offset=20 - call $~lib/rt/pure/__visit - br $__inlined_func$~lib/rt/__visit_members - end - local.get $0 - i32.load offset=24 - local.tee $1 - local.get $0 - i32.load offset=32 - i32.const 2 - i32.shl - i32.add - local.set $3 - loop $while-continue|0 - local.get $1 - local.get $3 - i32.lt_u - if local.get $1 i32.load - local.tee $4 - if - local.get $4 - call $~lib/rt/pure/__visit - end - local.get $1 - i32.const 4 - i32.add - local.set $1 - br $while-continue|0 + call $~lib/rt/pure/__visit + br $__inlined_func$~lib/rt/__visit_members end + local.get $1 + call $~lib/array/Array~visit + br $__inlined_func$~lib/rt/__visit_members end - local.get $0 - i32.load offset=20 + local.get $1 + i32.load offset=4 call $~lib/rt/pure/__visit br $__inlined_func$~lib/rt/__visit_members end - local.get $0 - i32.load offset=24 + local.get $1 + i32.load call $~lib/rt/pure/__visit end local.get $2 @@ -19779,6 +19772,42 @@ i32.sub call $~lib/rt/pure/decrement ) + (func $~lib/array/Array~visit (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.load offset=4 + local.tee $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $~lib/rt/pure/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + local.get $0 + i32.load + call $~lib/rt/pure/__visit + ) (func $~lib/array/Array#constructor@varargs (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index c24473e3ae..cdea4120c8 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -1,8 +1,8 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) @@ -27367,7 +27367,7 @@ call $~lib/builtins/abort unreachable ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -29154,7 +29154,7 @@ call $~lib/builtins/abort unreachable ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -30779,7 +30779,7 @@ i32.const 7552 call $~lib/array/Array<~lib/string/String>#join ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/string/String>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -30948,7 +30948,24 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -30956,7 +30973,30 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $std/array/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31001,7 +31041,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -31009,7 +31054,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -31017,7 +31067,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31062,67 +31117,122 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit + ) + (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit + ) + (func $~lib/array/Array<~lib/array/Array>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31167,13 +31277,26 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit + ) + (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit + ) + (func $std/array/Proxy~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/array/Array>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31218,13 +31341,23 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array>#__visit + ) + (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/string/String|null>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit + ) + (func $~lib/array/Array<~lib/string/String|null>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31269,19 +31402,39 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/string/String|null>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String|null>#__visit + ) + (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -31289,7 +31442,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -31297,7 +31455,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -31305,7 +31468,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -31313,7 +31481,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -31321,7 +31494,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/array/Array>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31366,7 +31544,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/array/Array>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit + ) + (func $~lib/array/Array<~lib/array/Array>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31411,7 +31594,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit + ) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31456,7 +31644,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit + ) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -31501,231 +31694,290 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit + ) + (func $std/array/ArrayU32~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array~visit + ) + (func $std/array/ArrayU8~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array~visit + ) + (func $std/array/ArrayStr~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$41 - block $switch$1$case$40 - block $switch$1$case$39 - block $switch$1$case$38 - block $switch$1$case$37 - block $switch$1$case$36 - block $switch$1$case$35 - block $switch$1$case$34 - block $switch$1$case$33 - block $switch$1$case$32 - block $switch$1$case$31 - block $switch$1$case$30 - block $switch$1$case$29 - block $switch$1$case$28 - block $switch$1$case$27 - block $switch$1$case$25 - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$18 - block $switch$1$case$17 - block $switch$1$case$16 - block $switch$1$case$15 - block $switch$1$case$14 - block $switch$1$case$13 - block $switch$1$case$12 - block $switch$1$case$11 - block $switch$1$case$10 - block $switch$1$case$9 - block $switch$1$case$8 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $std/array/ArrayStr + block $std/array/ArrayU8 + block $std/array/ArrayU32 + block $~lib/array/Array<~lib/array/Array<~lib/string/String|null>> + block $~lib/array/Array<~lib/array/Array<~lib/array/Array>> + block $~lib/array/Array<~lib/array/Array> + block $~lib/array/Array<~lib/array/Array> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32> + block $~lib/array/Array<~lib/string/String> + block $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32> + block $~lib/array/Array<~lib/string/String|null> + block $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32> + block $~lib/array/Array> + block $std/array/Proxy + block $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32> + block $~lib/array/Array<~lib/array/Array> + block $~lib/function/Function<%28u32%2Cu32%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $~lib/function/Function<%28f64%2Cf64%29=>i32> + block $~lib/function/Function<%28f32%2Cf32%29=>i32> + block $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool> + block $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/typedarray/Uint8Array + block $std/array/Ref + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $std/array/Ref $~lib/typedarray/Uint8Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32> $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool> $~lib/function/Function<%28f32%2Cf32%29=>i32> $~lib/function/Function<%28f64%2Cf64%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28u32%2Cu32%29=>i32> $~lib/array/Array<~lib/array/Array> $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32> $std/array/Proxy $~lib/array/Array> $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32> $~lib/array/Array<~lib/string/String|null> $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32> $~lib/array/Array<~lib/string/String> $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32> $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array<~lib/array/Array> $~lib/array/Array<~lib/array/Array> $~lib/array/Array<~lib/array/Array<~lib/array/Array>> $~lib/array/Array<~lib/array/Array<~lib/string/String|null>> $std/array/ArrayU32 $std/array/ArrayU8 $std/array/ArrayStr $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $std/array/Ref~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$2 $switch$1$case$4 $switch$1$case$8 $switch$1$case$9 $switch$1$case$10 $switch$1$case$11 $switch$1$case$12 $switch$1$case$13 $switch$1$case$14 $switch$1$case$15 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$2 $switch$1$case$27 $switch$1$case$28 $switch$1$case$29 $switch$1$case$30 $switch$1$case$31 $switch$1$case$32 $switch$1$case$33 $switch$1$case$34 $switch$1$case$35 $switch$1$case$36 $switch$1$case$37 $switch$1$case$38 $switch$1$case$39 $switch$1$case$40 $switch$1$case$41 $switch$1$case$9 $switch$1$case$8 $switch$1$case$31 $switch$1$default + local.get $1 + call $~lib/array/Array~visit + return end + local.get $0 + local.get $1 + call $~lib/array/Array~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit_impl + call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit_impl + call $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit_impl + call $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit_impl + call $~lib/array/Array<~lib/array/Array>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit_impl + call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit_impl + call $std/array/Proxy~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit_impl + call $~lib/array/Array>~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl + call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit_impl + call $~lib/array/Array<~lib/string/String|null>~visit return end local.get $0 local.get $1 - call $~lib/array/Array>#__visit_impl + call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit_impl + call $~lib/array/Array<~lib/string/String>~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String|null>#__visit_impl + call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array<~lib/array/Array>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array<~lib/array/Array>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit_impl + call $std/array/ArrayU32~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit_impl + call $std/array/ArrayU8~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit_impl + call $std/array/ArrayStr~visit return end unreachable diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index f3d2afb377..63342d3468 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -1937,30 +1937,39 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$5 - block $switch$1$case$4 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $~lib/array/Array + local.get $0 + i32.const 12 + i32.add + i32.load + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $folding-inner1 $~lib/array/Array $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner1 $invalid + end local.get $0 - i32.const 12 - i32.add - i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$5 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$default - end - local.get $0 - i32.load offset=20 - local.tee $1 - if - local.get $1 + i32.load offset=20 call $~lib/rt/pure/__visit + br $__inlined_func$~lib/rt/__visit_members end - br $__inlined_func$~lib/rt/__visit_members + unreachable end local.get $0 i32.load offset=20 - call $~lib/rt/pure/__visit + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end br $__inlined_func$~lib/rt/__visit_members end - unreachable + local.get $0 + i32.load offset=20 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end end local.get $2 i32.const -2147483648 diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index ca298dad10..dbe67e4b9a 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -1,6 +1,6 @@ (module - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) @@ -4161,7 +4161,24 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -4169,33 +4186,179 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/typedarray/Int8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint8ClampedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/dataview/DataView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/dataview/DataView + block $~lib/typedarray/Float64Array + block $~lib/typedarray/Float32Array + block $~lib/typedarray/Uint64Array + block $~lib/typedarray/Int64Array + block $~lib/typedarray/Uint32Array + block $~lib/typedarray/Int32Array + block $~lib/typedarray/Uint16Array + block $~lib/typedarray/Int16Array + block $~lib/typedarray/Uint8ClampedArray + block $~lib/typedarray/Uint8Array + block $~lib/typedarray/Int8Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/typedarray/Int8Array $~lib/typedarray/Uint8Array $~lib/typedarray/Uint8ClampedArray $~lib/typedarray/Int16Array $~lib/typedarray/Uint16Array $~lib/typedarray/Int32Array $~lib/typedarray/Uint32Array $~lib/typedarray/Int64Array $~lib/typedarray/Uint64Array $~lib/typedarray/Float32Array $~lib/typedarray/Float64Array $~lib/dataview/DataView $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8ClampedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int64Array~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/typedarray/Uint64Array~visit + return end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/typedarray/Float64Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/dataview/DataView~visit return end unreachable diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat index e0febb5ef3..1e02478171 100644 --- a/tests/compiler/std/dataview.optimized.wat +++ b/tests/compiler/std/dataview.optimized.wat @@ -3,8 +3,8 @@ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) @@ -3410,31 +3410,26 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 - local.get $0 - i32.const 12 - i32.add - i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$default - end - local.get $0 - i32.load offset=20 - local.tee $1 - if - local.get $1 - i32.const 1584 - i32.ge_u - if - local.get $1 + block $folding-inner1 + block $invalid + block $~lib/typedarray/Uint8Array + local.get $0 i32.const 20 + i32.add + local.tee $1 + i32.const 8 i32.sub - call $~lib/rt/pure/decrement + i32.load + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $folding-inner1 $~lib/typedarray/Uint8Array $folding-inner1 $invalid end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + br $__inlined_func$~lib/rt/__visit_members end - br $__inlined_func$~lib/rt/__visit_members + unreachable end - unreachable + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit end local.get $2 i32.const -2147483648 @@ -3478,4 +3473,20 @@ i32.store offset=4 end ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + i32.const 1584 + i32.ge_u + if + local.get $0 + i32.const 20 + i32.sub + call $~lib/rt/pure/decrement + end + end + ) ) diff --git a/tests/compiler/std/dataview.untouched.wat b/tests/compiler/std/dataview.untouched.wat index b9b5b23776..d5c667560a 100644 --- a/tests/compiler/std/dataview.untouched.wat +++ b/tests/compiler/std/dataview.untouched.wat @@ -1,6 +1,6 @@ (module - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) @@ -4647,27 +4647,75 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/dataview/DataView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/dataview/DataView + block $~lib/typedarray/Uint8Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Uint8Array $~lib/dataview/DataView $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/dataview/DataView~visit return end unreachable diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat index dc073f4a5e..12f892eb97 100644 --- a/tests/compiler/std/map.optimized.wat +++ b/tests/compiler/std/map.optimized.wat @@ -13070,15 +13070,15 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $folding-inner1 - block $folding-inner0 - block $switch$1$default - block $switch$1$case$4 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $folding-inner1 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner0 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $folding-inner1 $folding-inner2 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner1 $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/std/map.untouched.wat b/tests/compiler/std/map.untouched.wat index 9991283bb1..0afb977850 100644 --- a/tests/compiler/std/map.untouched.wat +++ b/tests/compiler/std/map.untouched.wat @@ -1,6 +1,6 @@ (module - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) @@ -20992,7 +20992,24 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21012,7 +21029,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21020,7 +21042,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21028,7 +21055,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21048,7 +21080,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21068,7 +21105,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21088,7 +21130,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21096,7 +21143,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21116,7 +21168,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21136,7 +21193,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21144,7 +21206,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21164,7 +21231,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21184,7 +21256,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21192,7 +21269,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21212,7 +21294,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21232,7 +21319,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21240,7 +21332,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21260,7 +21357,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21280,7 +21382,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21288,7 +21395,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21308,7 +21420,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21328,7 +21445,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21336,7 +21458,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21356,7 +21483,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21376,7 +21508,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21384,7 +21521,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21404,7 +21546,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21424,7 +21571,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21432,7 +21584,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/map/Map#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/map/Map#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -21452,201 +21609,209 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/map/Map~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/map/Map#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$33 - block $switch$1$case$32 - block $switch$1$case$31 - block $switch$1$case$30 - block $switch$1$case$29 - block $switch$1$case$28 - block $switch$1$case$27 - block $switch$1$case$26 - block $switch$1$case$25 - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$18 - block $switch$1$case$17 - block $switch$1$case$16 - block $switch$1$case$15 - block $switch$1$case$14 - block $switch$1$case$13 - block $switch$1$case$12 - block $switch$1$case$11 - block $switch$1$case$10 - block $switch$1$case$9 - block $switch$1$case$8 - block $switch$1$case$7 - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/map/Map + block $~lib/array/Array + block $~lib/map/Map + block $~lib/map/Map + block $~lib/array/Array + block $~lib/map/Map + block $~lib/map/Map + block $~lib/array/Array + block $~lib/map/Map + block $~lib/map/Map + block $~lib/array/Array + block $~lib/map/Map + block $~lib/map/Map + block $~lib/array/Array + block $~lib/map/Map + block $~lib/map/Map + block $~lib/array/Array + block $~lib/map/Map + block $~lib/map/Map + block $~lib/array/Array + block $~lib/map/Map + block $~lib/map/Map + block $~lib/array/Array + block $~lib/map/Map + block $~lib/map/Map + block $~lib/map/Map + block $~lib/array/Array + block $~lib/array/Array + block $~lib/map/Map + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/map/Map $~lib/array/Array $~lib/array/Array $~lib/map/Map $~lib/map/Map $~lib/map/Map $~lib/array/Array $~lib/map/Map $~lib/map/Map $~lib/array/Array $~lib/map/Map $~lib/map/Map $~lib/array/Array $~lib/map/Map $~lib/map/Map $~lib/array/Array $~lib/map/Map $~lib/map/Map $~lib/array/Array $~lib/map/Map $~lib/map/Map $~lib/array/Array $~lib/map/Map $~lib/map/Map $~lib/array/Array $~lib/map/Map $~lib/map/Map $~lib/array/Array $~lib/map/Map $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$case$7 $switch$1$case$8 $switch$1$case$9 $switch$1$case$10 $switch$1$case$11 $switch$1$case$12 $switch$1$case$13 $switch$1$case$14 $switch$1$case$15 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$26 $switch$1$case$27 $switch$1$case$28 $switch$1$case$29 $switch$1$case$30 $switch$1$case$31 $switch$1$case$32 $switch$1$case$33 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/map/Map#__visit_impl + call $~lib/map/Map~visit return end unreachable diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat index 91d38c8944..1fe8f8aec5 100644 --- a/tests/compiler/std/set.optimized.wat +++ b/tests/compiler/std/set.optimized.wat @@ -9407,15 +9407,15 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $folding-inner1 - block $folding-inner0 - block $switch$1$default - block $switch$1$case$4 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $folding-inner1 $folding-inner2 $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat index 1dc19592fe..64c91c214e 100644 --- a/tests/compiler/std/set.untouched.wat +++ b/tests/compiler/std/set.untouched.wat @@ -1,6 +1,6 @@ (module - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_none (func (param i32))) @@ -14819,7 +14819,24 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -14834,7 +14851,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -14842,7 +14864,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -14857,7 +14884,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -14865,7 +14897,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -14880,7 +14917,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -14888,7 +14930,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -14903,7 +14950,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -14911,7 +14963,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -14926,7 +14983,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -14934,7 +14996,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -14949,7 +15016,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -14957,7 +15029,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -14972,7 +15049,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -14980,7 +15062,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -14995,7 +15082,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -15003,7 +15095,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -15018,7 +15115,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -15026,7 +15128,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/set/Set#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set#__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 i32.load @@ -15041,7 +15148,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -15049,147 +15161,155 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$18 - block $switch$1$case$17 - block $switch$1$case$16 - block $switch$1$case$15 - block $switch$1$case$14 - block $switch$1$case$13 - block $switch$1$case$12 - block $switch$1$case$11 - block $switch$1$case$10 - block $switch$1$case$9 - block $switch$1$case$8 - block $switch$1$case$7 - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$case$7 $switch$1$case$8 $switch$1$case$9 $switch$1$case$10 $switch$1$case$11 $switch$1$case$12 $switch$1$case$13 $switch$1$case$14 $switch$1$case$15 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/set/Set#__visit_impl + call $~lib/set/Set~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end unreachable diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat index 32fa08e058..7816c1104d 100644 --- a/tests/compiler/std/staticarray.optimized.wat +++ b/tests/compiler/std/staticarray.optimized.wat @@ -1553,7 +1553,7 @@ (local $4 i32) local.get $0 i32.load offset=4 - local.tee $3 + local.tee $2 i32.const 268435455 i32.and local.set $1 @@ -1574,19 +1574,19 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$7 - block $switch$1$case$4 + block $invalid + block $~lib/staticarray/StaticArray + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 20 i32.add - local.tee $2 + local.tee $1 i32.const 8 i32.sub i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$7 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/staticarray/StaticArray $invalid end - local.get $2 + local.get $1 i32.load local.tee $1 if @@ -1595,17 +1595,16 @@ end br $__inlined_func$~lib/rt/__visit_members end - local.get $2 - local.tee $1 + local.get $1 local.get $1 i32.const 20 i32.sub i32.load offset=16 i32.add - local.set $2 + local.set $3 loop $while-continue|0 local.get $1 - local.get $2 + local.get $3 i32.lt_u if local.get $1 @@ -1626,7 +1625,7 @@ end unreachable end - local.get $3 + local.get $2 i32.const -2147483648 i32.and if @@ -1661,7 +1660,7 @@ local.get $1 i32.const 1 i32.sub - local.get $3 + local.get $2 i32.const -268435456 i32.and i32.or diff --git a/tests/compiler/std/staticarray.untouched.wat b/tests/compiler/std/staticarray.untouched.wat index b29efb27fb..cc50c009e9 100644 --- a/tests/compiler/std/staticarray.untouched.wat +++ b/tests/compiler/std/staticarray.untouched.wat @@ -3249,11 +3249,36 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/staticarray/StaticArray#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/staticarray/StaticArray#__visit (param $0 i32) (param $1 i32) i32.const 0 drop ) - (func $~lib/staticarray/StaticArray#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/staticarray/StaticArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray#__visit + ) + (func $std/staticarray/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/staticarray/StaticArray#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3293,39 +3318,53 @@ end end ) + (func $~lib/staticarray/StaticArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$7 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/staticarray/StaticArray + block $std/staticarray/Ref + block $~lib/staticarray/StaticArray + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$2 $switch$1$case$7 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/staticarray/StaticArray~visit return end local.get $0 local.get $1 - call $~lib/staticarray/StaticArray#__visit_impl + call $std/staticarray/Ref~visit return end local.get $0 local.get $1 - call $~lib/staticarray/StaticArray#__visit_impl + call $~lib/staticarray/StaticArray~visit return end unreachable diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat index b596a29284..c832f1d5f6 100644 --- a/tests/compiler/std/string-casemapping.optimized.wat +++ b/tests/compiler/std/string-casemapping.optimized.wat @@ -4918,13 +4918,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/std/string-casemapping.untouched.wat b/tests/compiler/std/string-casemapping.untouched.wat index 023457d6ec..28676f5f2a 100644 --- a/tests/compiler/std/string-casemapping.untouched.wat +++ b/tests/compiler/std/string-casemapping.untouched.wat @@ -1,7 +1,7 @@ (module (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_none (func)) @@ -7336,37 +7336,62 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/staticarray/StaticArray#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/staticarray/StaticArray#__visit (param $0 i32) (param $1 i32) i32.const 0 drop ) + (func $~lib/staticarray/StaticArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/staticarray/StaticArray + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 local.get $1 - call $~lib/staticarray/StaticArray#__visit_impl + call $~lib/staticarray/StaticArray~visit return end unreachable diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat index 9a8346b176..96531372ec 100644 --- a/tests/compiler/std/string-encoding.optimized.wat +++ b/tests/compiler/std/string-encoding.optimized.wat @@ -3268,13 +3268,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/std/string-encoding.untouched.wat b/tests/compiler/std/string-encoding.untouched.wat index 2b8b510b5e..1573b14a59 100644 --- a/tests/compiler/std/string-encoding.untouched.wat +++ b/tests/compiler/std/string-encoding.untouched.wat @@ -5145,27 +5145,47 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end unreachable diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index cad752a41d..f6ad97ab99 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -17364,10 +17364,9 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) local.get $0 i32.load offset=4 - local.tee $4 + local.tee $2 i32.const 268435455 i32.and local.set $1 @@ -17388,21 +17387,18 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 + block $invalid + block $~lib/array/Array + block $~lib/array/Array<~lib/string/String> + block $~lib/arraybuffer/ArrayBufferView local.get $0 - i32.const 20 + i32.const 12 i32.add - local.tee $2 - i32.const 8 - i32.sub i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $~lib/array/Array<~lib/string/String> $~lib/array/Array $invalid end - local.get $2 - i32.load + local.get $0 + i32.load offset=20 local.tee $1 if local.get $1 @@ -17410,48 +17406,47 @@ end br $__inlined_func$~lib/rt/__visit_members end - local.get $2 + local.get $0 + i32.load offset=24 local.tee $1 - i32.load offset=4 - local.tee $3 - local.get $1 - i32.load offset=12 + local.get $0 + i32.load offset=32 i32.const 2 i32.shl i32.add - local.set $2 + local.set $3 loop $while-continue|0 - local.get $2 + local.get $1 local.get $3 - i32.gt_u + i32.lt_u if - local.get $3 + local.get $1 i32.load - local.tee $5 + local.tee $4 if - local.get $5 + local.get $4 call $~lib/rt/pure/__visit end - local.get $3 + local.get $1 i32.const 4 i32.add - local.set $3 + local.set $1 br $while-continue|0 end end - local.get $1 - i32.load + local.get $0 + i32.load offset=20 call $~lib/rt/pure/__visit br $__inlined_func$~lib/rt/__visit_members end - local.get $2 - i32.load + local.get $0 + i32.load offset=20 call $~lib/rt/pure/__visit br $__inlined_func$~lib/rt/__visit_members end unreachable end - local.get $4 + local.get $2 i32.const -2147483648 i32.and if @@ -17480,7 +17475,7 @@ local.get $1 i32.const 1 i32.sub - local.get $4 + local.get $2 i32.const -268435456 i32.and i32.or diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index 2fd515ef1b..d4a5863063 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -21485,7 +21485,24 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/array/Array<~lib/string/String>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/array/Array<~lib/string/String>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -21530,7 +21547,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -21538,39 +21560,47 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$6 - block $switch$1$case$5 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/array/Array + block $~lib/array/Array<~lib/string/String> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array<~lib/string/String> $~lib/array/Array $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$5 $switch$1$case$6 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit_impl + call $~lib/array/Array<~lib/string/String>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end unreachable diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index 2bcb6d54c4..85035dd963 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -35850,26 +35850,36 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $folding-inner1 - block $folding-inner0 - block $switch$1$default - block $switch$1$case$4 + block $folding-inner3 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $~lib/arraybuffer/ArrayBufferView + local.get $0 + i32.const 12 + i32.add + i32.load + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner2 $folding-inner3 $folding-inner3 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner2 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $folding-inner3 $invalid + end local.get $0 - i32.const 12 - i32.add - i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $folding-inner0 $folding-inner1 $folding-inner1 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $switch$1$default - end - local.get $0 - i32.load offset=20 - local.tee $1 - if - local.get $1 - call $~lib/rt/pure/__visit + i32.load offset=20 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + br $__inlined_func$~lib/rt/__visit_members end - br $__inlined_func$~lib/rt/__visit_members + unreachable end - unreachable + local.get $0 + i32.load offset=20 + local.tee $1 + if + local.get $1 + call $~lib/rt/pure/__visit + end + br $__inlined_func$~lib/rt/__visit_members end local.get $0 i32.load offset=24 diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index 3710d7c5e8..96455047ea 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -1,9 +1,9 @@ (module (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i64_i32_i32_=>_i32 (func (param i64 i32 i32) (result i32))) @@ -57570,13 +57570,90 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/typedarray/Int8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint8ClampedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57584,7 +57661,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57592,271 +57674,496 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit + ) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit + ) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit + ) + (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit + ) + (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit + ) + (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit + ) + (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit (param $0 i32) (param $1 i32) local.get $0 i32.load offset=4 local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57864,7 +58171,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57872,7 +58184,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57880,7 +58197,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57888,7 +58210,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57896,7 +58223,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57904,7 +58236,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57912,7 +58249,12 @@ local.get $1 call $~lib/rt/pure/__visit ) - (func $~lib/array/Array#__visit_impl (param $0 i32) (param $1 i32) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) i32.const 0 drop local.get $0 @@ -57920,357 +58262,431 @@ local.get $1 call $~lib/rt/pure/__visit ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - (local $2 i32) - block $switch$1$default - block $switch$1$case$70 - block $switch$1$case$69 - block $switch$1$case$68 - block $switch$1$case$67 - block $switch$1$case$66 - block $switch$1$case$65 - block $switch$1$case$64 - block $switch$1$case$63 - block $switch$1$case$62 - block $switch$1$case$61 - block $switch$1$case$60 - block $switch$1$case$59 - block $switch$1$case$58 - block $switch$1$case$57 - block $switch$1$case$56 - block $switch$1$case$55 - block $switch$1$case$54 - block $switch$1$case$53 - block $switch$1$case$52 - block $switch$1$case$51 - block $switch$1$case$50 - block $switch$1$case$49 - block $switch$1$case$48 - block $switch$1$case$47 - block $switch$1$case$46 - block $switch$1$case$45 - block $switch$1$case$44 - block $switch$1$case$43 - block $switch$1$case$42 - block $switch$1$case$41 - block $switch$1$case$40 - block $switch$1$case$39 - block $switch$1$case$38 - block $switch$1$case$37 - block $switch$1$case$36 - block $switch$1$case$35 - block $switch$1$case$34 - block $switch$1$case$33 - block $switch$1$case$32 - block $switch$1$case$31 - block $switch$1$case$30 - block $switch$1$case$29 - block $switch$1$case$28 - block $switch$1$case$27 - block $switch$1$case$26 - block $switch$1$case$25 - block $switch$1$case$24 - block $switch$1$case$23 - block $switch$1$case$22 - block $switch$1$case$21 - block $switch$1$case$20 - block $switch$1$case$19 - block $switch$1$case$18 - block $switch$1$case$17 - block $switch$1$case$16 - block $switch$1$case$4 - block $switch$1$case$2 + block $invalid + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void> + block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void> + block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void> + block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void> + block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void> + block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void> + block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void> + block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void> + block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool> + block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool> + block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool> + block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool> + block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool> + block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool> + block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool> + block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool> + block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> + block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> + block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> + block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> + block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> + block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> + block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> + block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> + block $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> + block $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> + block $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> + block $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> + block $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> + block $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> + block $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> + block $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> + block $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> + block $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> + block $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/function/Function<%28f64%2Cf64%29=>i32> + block $~lib/typedarray/Float64Array + block $~lib/typedarray/Float32Array + block $~lib/typedarray/Uint64Array + block $~lib/typedarray/Int64Array + block $~lib/typedarray/Uint32Array + block $~lib/typedarray/Int32Array + block $~lib/typedarray/Uint16Array + block $~lib/typedarray/Int16Array + block $~lib/typedarray/Uint8ClampedArray + block $~lib/typedarray/Uint8Array + block $~lib/typedarray/Int8Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Int8Array $~lib/typedarray/Uint8Array $~lib/typedarray/Uint8ClampedArray $~lib/typedarray/Int16Array $~lib/typedarray/Uint16Array $~lib/typedarray/Int32Array $~lib/typedarray/Uint32Array $~lib/typedarray/Int64Array $~lib/typedarray/Uint64Array $~lib/typedarray/Float32Array $~lib/typedarray/Float64Array $~lib/function/Function<%28f64%2Cf64%29=>i32> $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void> $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/string/String~visit + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8ClampedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int64Array~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$4 $switch$1$case$16 $switch$1$case$17 $switch$1$case$18 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$26 $switch$1$case$27 $switch$1$case$28 $switch$1$case$29 $switch$1$case$30 $switch$1$case$31 $switch$1$case$32 $switch$1$case$33 $switch$1$case$34 $switch$1$case$35 $switch$1$case$36 $switch$1$case$37 $switch$1$case$38 $switch$1$case$39 $switch$1$case$40 $switch$1$case$41 $switch$1$case$42 $switch$1$case$43 $switch$1$case$44 $switch$1$case$45 $switch$1$case$46 $switch$1$case$47 $switch$1$case$48 $switch$1$case$49 $switch$1$case$50 $switch$1$case$51 $switch$1$case$52 $switch$1$case$53 $switch$1$case$54 $switch$1$case$55 $switch$1$case$56 $switch$1$case$57 $switch$1$case$58 $switch$1$case$59 $switch$1$case$60 $switch$1$case$61 $switch$1$case$62 $switch$1$case$63 $switch$1$case$64 $switch$1$case$65 $switch$1$case$66 $switch$1$case$67 $switch$1$case$68 $switch$1$case$69 $switch$1$case$70 $switch$1$default + local.get $1 + call $~lib/typedarray/Uint64Array~visit + return end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/typedarray/Float64Array~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit_impl + call $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit_impl + call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit_impl + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit_impl + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit_impl + call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit_impl + call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit_impl + call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit_impl + call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit_impl + call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit_impl + call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit_impl + call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit_impl + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit_impl + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit_impl + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit_impl + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit_impl + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit_impl + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit_impl + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit_impl + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit_impl + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit_impl + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit_impl + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit_impl + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit_impl + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit_impl + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit_impl + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit_impl + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit_impl + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit_impl + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit_impl + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit_impl + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit_impl + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit_impl + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit_impl + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end local.get $0 local.get $1 - call $~lib/array/Array#__visit_impl + call $~lib/array/Array~visit return end unreachable diff --git a/tests/compiler/throw.untouched.wat b/tests/compiler/throw.untouched.wat index 679bd7bbbd..f3f3e09513 100644 --- a/tests/compiler/throw.untouched.wat +++ b/tests/compiler/throw.untouched.wat @@ -1,6 +1,6 @@ (module - (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -841,27 +841,47 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$default + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return end + local.get $0 + local.get $1 + call $~lib/string/String~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end unreachable diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat index 5124a6f33a..29b00a49a7 100644 --- a/tests/compiler/while.optimized.wat +++ b/tests/compiler/while.optimized.wat @@ -1447,13 +1447,13 @@ i32.eq if block $__inlined_func$~lib/rt/__visit_members - block $switch$1$default - block $switch$1$case$4 + block $invalid + block $~lib/arraybuffer/ArrayBufferView local.get $0 i32.const 12 i32.add i32.load - br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $switch$1$case$4 $__inlined_func$~lib/rt/__visit_members $switch$1$default + br_table $__inlined_func$~lib/rt/__visit_members $__inlined_func$~lib/rt/__visit_members $~lib/arraybuffer/ArrayBufferView $__inlined_func$~lib/rt/__visit_members $invalid end local.get $0 i32.load offset=20 diff --git a/tests/compiler/while.untouched.wat b/tests/compiler/while.untouched.wat index c6c9c6b927..76f83b23fc 100644 --- a/tests/compiler/while.untouched.wat +++ b/tests/compiler/while.untouched.wat @@ -2502,27 +2502,56 @@ i32.sub call $~lib/rt/pure/decrement ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + (func $~lib/arraybuffer/ArrayBuffer~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/string/String~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - block $switch$1$default - block $switch$1$case$4 - block $switch$1$case$2 + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/pure/__visit + end + ) + (func $while/Ref~visit (param $0 i32) (param $1 i32) + nop + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $while/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $while/Ref $invalid + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBuffer~visit + return + end local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default + local.get $1 + call $~lib/string/String~visit + return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end local.get $0 - i32.load - local.tee $2 - if - local.get $2 - local.get $1 - call $~lib/rt/pure/__visit - end + local.get $1 + call $while/Ref~visit return end unreachable