summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2023-10-17 09:31:14 -0700
committerGitHub <noreply@github.com>2023-10-17 09:31:14 -0700
commitb816ac563de6b1c53087796335fce593a96f569a (patch)
treea1369d4c609e6b2f6a0c0ca3dfa14bb43bc93445
parentede148eaa505d3681abd67b0b4d7de1b82ec05ff (diff)
downloadbinaryen-b816ac563de6b1c53087796335fce593a96f569a.tar.gz
binaryen-b816ac563de6b1c53087796335fce593a96f569a.tar.bz2
binaryen-b816ac563de6b1c53087796335fce593a96f569a.zip
Fuzzer: Move logic for adding a new local on demand to local.get (#6008)
Previously makeTrappingRefUse would add a local on demand if one was missing for the type, and add a tee for it. This PR moves that logic to makeLocalGet so that we get those benefits any time we want to emit a local.get of a local type that does not exist (including from makeTrappingRefUse which calls makeLocalGet).
-rw-r--r--src/tools/fuzzing/fuzzing.cpp51
-rw-r--r--test/lit/fuzz-lattices.test1388
-rw-r--r--test/passes/fuzz_metrics_noprint.bin.txt54
-rw-r--r--test/passes/translate-to-fuzz_all-features_metrics_noprint.txt76
4 files changed, 104 insertions, 1465 deletions
diff --git a/src/tools/fuzzing/fuzzing.cpp b/src/tools/fuzzing/fuzzing.cpp
index 2e7755848..2e4d460f7 100644
--- a/src/tools/fuzzing/fuzzing.cpp
+++ b/src/tools/fuzzing/fuzzing.cpp
@@ -1622,10 +1622,38 @@ Expression* TranslateToFuzzReader::makeCallRef(Type type) {
Expression* TranslateToFuzzReader::makeLocalGet(Type type) {
auto& locals = funcContext->typeLocals[type];
- if (locals.empty()) {
+ if (!locals.empty()) {
+ return builder.makeLocalGet(pick(locals), type);
+ }
+ // No existing local. When we want something trivial, just give up and emit a
+ // constant.
+ if (trivialNesting) {
return makeConst(type);
}
- return builder.makeLocalGet(pick(locals), type);
+
+ // Otherwise, we have 3 cases: a const, as above (we do this randomly some of
+ // the time), or emit a local.get of a new local, or emit a local.tee of a new
+ // local.
+ auto choice = upTo(3);
+ if (choice == 0) {
+ return makeConst(type);
+ }
+ // Otherwise, add a new local. If the type is not non-nullable then we may
+ // just emit a get for it (which, as this is a brand-new local, will read the
+ // default value, unless we are in a loop; for that reason for a non-
+ // nullable local we prefer a tee later down.).
+ auto index = builder.addVar(funcContext->func, type);
+ LocalSet* tee = nullptr;
+ if (choice == 1 || type.isNonNullable()) {
+ // Create the tee here before adding the local to typeLocals (or else we
+ // might end up using it prematurely inside the make() call).
+ tee = builder.makeLocalTee(index, make(type), type);
+ }
+ funcContext->typeLocals[type].push_back(index);
+ if (tee) {
+ return tee;
+ }
+ return builder.makeLocalGet(index, type);
}
Expression* TranslateToFuzzReader::makeLocalSet(Type type) {
@@ -2475,8 +2503,8 @@ Expression* TranslateToFuzzReader::makeTrappingRefUse(HeapType type) {
if (percent < 70 || !funcContext) {
return make(nonNull);
}
- // With significant probability, try to use an existing value. it is better to
- // have patterns like this:
+ // With significant probability, try to use an existing value, that is, to
+ // get a value using local.get, as it is better to have patterns like this:
//
// (local.set $ref (struct.new $..
// (struct.get (local.get $ref))
@@ -2488,17 +2516,10 @@ Expression* TranslateToFuzzReader::makeTrappingRefUse(HeapType type) {
//
// By using local values more, we get more coverage of interesting sequences
// of reads and writes to the same objects.
- auto& typeLocals = funcContext->typeLocals[nonNull];
- if (!typeLocals.empty()) {
- return builder.makeLocalGet(pick(typeLocals), nonNull);
- }
- // Add a new local and tee it, so later operations can use it.
- auto index = builder.addVar(funcContext->func, nonNull);
- // Note we must create the child ref here before adding the local to
- // typeLocals (or else we might end up using it prematurely).
- auto* tee = builder.makeLocalTee(index, make(nonNull), nonNull);
- funcContext->typeLocals[nonNull].push_back(index);
- return tee;
+ //
+ // Note that makeLocalGet will add a local if necessary, and even tee that
+ // value so it is usable later as well.
+ return makeLocalGet(nonNull);
}
Expression* TranslateToFuzzReader::buildUnary(const UnaryArgs& args) {
diff --git a/test/lit/fuzz-lattices.test b/test/lit/fuzz-lattices.test
deleted file mode 100644
index 3d9b62e6c..000000000
--- a/test/lit/fuzz-lattices.test
+++ /dev/null
@@ -1,1388 +0,0 @@
-;; RUN: wasm-fuzz-lattices -v --seed=0 | filecheck %s
-
-;; CHECK: Running with seed 0
-;; CHECK-NEXT: Generated test module:
-;; CHECK-NEXT: (module
-;; CHECK-NEXT: (type $0 (func))
-;; CHECK-NEXT: (type $1 (func (result i32)))
-;; CHECK-NEXT: (type $2 (func (result i64)))
-;; CHECK-NEXT: (type $3 (func (param i32)))
-;; CHECK-NEXT: (type $4 (func (param i64)))
-;; CHECK-NEXT: (type $5 (func (param f32)))
-;; CHECK-NEXT: (type $6 (func (param f64)))
-;; CHECK-NEXT: (type $7 (func (param i32) (result f32)))
-;; CHECK-NEXT: (type $8 (func (param i32 f32 f64 f32) (result i32)))
-;; CHECK-NEXT: (import "fuzzing-support" "log-i32" (func $log-i32 (param i32)))
-;; CHECK-NEXT: (import "fuzzing-support" "log-i64" (func $log-i64 (param i64)))
-;; CHECK-NEXT: (import "fuzzing-support" "log-f32" (func $log-f32 (param f32)))
-;; CHECK-NEXT: (import "fuzzing-support" "log-f64" (func $log-f64 (param f64)))
-;; CHECK-NEXT: (global $global$ i64 (i64.const -13))
-;; CHECK-NEXT: (global $global$_1 i64 (i64.const -281474976710655))
-;; CHECK-NEXT: (global $global$_2 (mut i32) (i32.const 32767))
-;; CHECK-NEXT: (global $global$_3 i64 (i64.const 65534))
-;; CHECK-NEXT: (global $global$_4 f32 (f32.const -0.484000027179718))
-;; CHECK-NEXT: (global $global$_5 (mut f32) (f32.const 3402823466385288598117041e14))
-;; CHECK-NEXT: (global $global$_6 (mut f64) (f64.const 392913192))
-;; CHECK-NEXT: (global $global$_7 i32 (i32.const -1))
-;; CHECK-NEXT: (global $global$_8 i32 (i32.const -7151))
-;; CHECK-NEXT: (global $global$_9 f64 (f64.const 64257))
-;; CHECK-NEXT: (global $global$_10 i32 (i32.const -511))
-;; CHECK-NEXT: (global $global$_11 (mut i32) (i32.const -2))
-;; CHECK-NEXT: (global $global$_12 (mut i32) (i32.const -101))
-;; CHECK-NEXT: (global $global$_13 (mut f64) (f64.const -17592186044415.012))
-;; CHECK-NEXT: (global $global$_14 i32 (i32.const 1))
-;; CHECK-NEXT: (global $hangLimit (mut i32) (i32.const 100))
-;; CHECK-NEXT: (memory $0 16 17)
-;; CHECK-NEXT: (data $0 (i32.const 0) "\00\00 ")
-;; CHECK-NEXT: (table $fuzzing_table 0 funcref)
-;; CHECK-NEXT: (elem $elem$ (i32.const 0))
-;; CHECK-NEXT: (export "func" (func $func))
-;; CHECK-NEXT: (export "func_invoker" (func $func_invoker))
-;; CHECK-NEXT: (export "func_6" (func $func_6))
-;; CHECK-NEXT: (export "func_6_invoker" (func $func_6_invoker))
-;; CHECK-NEXT: (export "func_8_invoker" (func $func_8_invoker))
-;; CHECK-NEXT: (export "func_10_invoker" (func $func_10_invoker))
-;; CHECK-NEXT: (export "hashMemory" (func $hashMemory))
-;; CHECK-NEXT: (export "memory" (memory $0))
-;; CHECK-NEXT: (func $func (param $0 i32) (result f32)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (f32.sub
-;; CHECK-NEXT: (f32.load offset=4 align=1
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (i32.const -26294)
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (loop $label$12 (result f32)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$13 (result f32)
-;; CHECK-NEXT: (block $label$14
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (f64.ge
-;; CHECK-NEXT: (loop $label$15 (result f64)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block (result f64)
-;; CHECK-NEXT: (block $label$16
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$15
-;; CHECK-NEXT: (select
-;; CHECK-NEXT: (i32.const -4)
-;; CHECK-NEXT: (block $label$18 (result i32)
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (if (result i32)
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (global.get $global$_14)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.get $global$_6)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (f64.const -nan:0xfffffffffff9b)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$14
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (i32.const -112)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (if (result f32)
-;; CHECK-NEXT: (loop $label$24 (result i32)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block (result i32)
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$24
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$25 (result i32)
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (block $label$26
-;; CHECK-NEXT: (call $log-f32
-;; CHECK-NEXT: (br_if $label$13
-;; CHECK-NEXT: (f32.const -18446744073709551615)
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (loop $label$27 (result i32)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block (result i32)
-;; CHECK-NEXT: (block $label$28
-;; CHECK-NEXT: (call $log-f64
-;; CHECK-NEXT: (if (result f64)
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (i32.const 7)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (f64.const -64)
-;; CHECK-NEXT: (f64.const -nan:0xfffffffffff91)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i64
-;; CHECK-NEXT: (i64.shr_s
-;; CHECK-NEXT: (i64.const -128)
-;; CHECK-NEXT: (i64.add
-;; CHECK-NEXT: (i64.const -15324)
-;; CHECK-NEXT: (select
-;; CHECK-NEXT: (i64.load16_s offset=4 align=1
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (i32.load offset=4 align=2
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (block $label$89 (result i32)
-;; CHECK-NEXT: (f64.store offset=22 align=1
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (i32.const -72)
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.get $global$_6)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$89
-;; CHECK-NEXT: (br_if $label$89
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (i32.const 23873)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.get $global$_14)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i64.const 5)
-;; CHECK-NEXT: (if (result i32)
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (loop $label$74
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$75
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$76
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (f32.const -nan:0x7fff9f)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$77 (result i32)
-;; CHECK-NEXT: (nop)
-;; CHECK-NEXT: (global.set $global$_6
-;; CHECK-NEXT: (f64.const -3402823466385288598117041e14)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.get $global$_10)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$78 (result i32)
-;; CHECK-NEXT: (f32.store offset=22 align=1
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (i32.load offset=22
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (loop $label$79 (result i32)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$80 (result i32)
-;; CHECK-NEXT: (call $log-f64
-;; CHECK-NEXT: (loop $label$81
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$82
-;; CHECK-NEXT: (br_if $label$81
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (f32.const 14)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$83
-;; CHECK-NEXT: (loop $label$84
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (block $label$85
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (block $label$86
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$87
-;; CHECK-NEXT: (call $log-i64
-;; CHECK-NEXT: (i64.const 12616)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (f32.const 166)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (i32.load8_u offset=4
-;; CHECK-NEXT: (if (result i32)
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const -2147483647)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$84
-;; CHECK-NEXT: (i32.const -1048575)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (f32.const 4294967296)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$88
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (f32.const 64541)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (f32.convert_i32_u
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$27
-;; CHECK-NEXT: (global.get $global$_2)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (i32.load8_s offset=4
-;; CHECK-NEXT: (i32.const -91)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.store16 offset=22
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.gt_u
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (i32.load offset=2
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (if (result i32)
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (f32.const -nan:0x7fffd5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.get $global$_11)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$29 (result f32)
-;; CHECK-NEXT: (call $log-f32
-;; CHECK-NEXT: (call $func
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (f32.const 13)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$30
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (i32.trunc_f64_s
-;; CHECK-NEXT: (f64.reinterpret_i64
-;; CHECK-NEXT: (i64.const -2049)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br $label$12)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_invoker
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (drop
-;; CHECK-NEXT: (call $func
-;; CHECK-NEXT: (i32.const 2)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_6
-;; CHECK-NEXT: (local $0 f64)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$0
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (i32.const 4)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (nop)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_6_invoker
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (call $func_6)
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_8 (result i32)
-;; CHECK-NEXT: (local $0 i64)
-;; CHECK-NEXT: (local $1 f32)
-;; CHECK-NEXT: (local $2 i32)
-;; CHECK-NEXT: (local $3 i64)
-;; CHECK-NEXT: (local $4 f32)
-;; CHECK-NEXT: (local $5 i64)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$0 (result i32)
-;; CHECK-NEXT: (local.set $3
-;; CHECK-NEXT: (loop $label$1 (result i64)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block (result i64)
-;; CHECK-NEXT: (block $label$2
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$1
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (i32.reinterpret_f32
-;; CHECK-NEXT: (f32.const -nan:0x7fc223)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i64.trunc_f32_u
-;; CHECK-NEXT: (global.get $global$_4)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.get $global$_14)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_8_invoker
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (drop
-;; CHECK-NEXT: (call $func_8)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_10 (result i64)
-;; CHECK-NEXT: (local $0 f64)
-;; CHECK-NEXT: (local $1 f64)
-;; CHECK-NEXT: (local $2 f64)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$0 (result i64)
-;; CHECK-NEXT: (nop)
-;; CHECK-NEXT: (nop)
-;; CHECK-NEXT: (i64.load32_s offset=22
-;; CHECK-NEXT: (global.get $global$_7)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_10_invoker
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (drop
-;; CHECK-NEXT: (call $func_10)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (drop
-;; CHECK-NEXT: (call $func_10)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (call $hashMemory)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (drop
-;; CHECK-NEXT: (call $func_10)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (drop
-;; CHECK-NEXT: (call $func_10)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_12 (result i64)
-;; CHECK-NEXT: (local $0 i64)
-;; CHECK-NEXT: (local $1 f64)
-;; CHECK-NEXT: (local $2 i64)
-;; CHECK-NEXT: (local $3 f32)
-;; CHECK-NEXT: (local $4 i64)
-;; CHECK-NEXT: (local $5 i64)
-;; CHECK-NEXT: (local $6 i64)
-;; CHECK-NEXT: (local $7 i64)
-;; CHECK-NEXT: (local $8 i32)
-;; CHECK-NEXT: (local $9 i32)
-;; CHECK-NEXT: (local $10 f32)
-;; CHECK-NEXT: (local $11 i64)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$1
-;; CHECK-NEXT: (drop
-;; CHECK-NEXT: (i32.load16_s offset=22
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (local.get $9)
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (i64.const 3)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $func_13 (param $0 i32) (param $1 f32) (param $2 f64) (param $3 f32) (result i32)
-;; CHECK-NEXT: (local $4 i32)
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$0 (result i32)
-;; CHECK-NEXT: (loop $label$1
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (block $label$2
-;; CHECK-NEXT: (global.set $global$_13
-;; CHECK-NEXT: (f64.load offset=3
-;; CHECK-NEXT: (br_if $label$0
-;; CHECK-NEXT: (i32.load offset=22 align=1
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=3
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (i32.load offset=22 align=1
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (i32.trunc_f32_s
-;; CHECK-NEXT: (local.get $3)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $2
-;; CHECK-NEXT: (f64.nearest
-;; CHECK-NEXT: (f64.const -3402823466385288598117041e14)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$1
-;; CHECK-NEXT: (i32.le_u
-;; CHECK-NEXT: (select
-;; CHECK-NEXT: (block $label$32
-;; CHECK-NEXT: (loop $label$33
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (call $log-i32
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (br_if $label$33
-;; CHECK-NEXT: (local.tee $0
-;; CHECK-NEXT: (global.get $global$_11)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $global$_13
-;; CHECK-NEXT: (f64.nearest
-;; CHECK-NEXT: (f64.const -3402823466385288598117041e14)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (i32.const 2147483646)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load offset=4
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (i32.wrap_i64
-;; CHECK-NEXT: (i64.load32_s offset=4 align=2
-;; CHECK-NEXT: (i32.and
-;; CHECK-NEXT: (call $func_8)
-;; CHECK-NEXT: (i32.const 15)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (loop $label$14
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (if
-;; CHECK-NEXT: (i32.eqz
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.const 100)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (unreachable)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (global.set $hangLimit
-;; CHECK-NEXT: (i32.sub
-;; CHECK-NEXT: (global.get $hangLimit)
-;; CHECK-NEXT: (i32.const 1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (block $label$15
-;; CHECK-NEXT: (local.set $1
-;; CHECK-NEXT: (local.get $1)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $4)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $4)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $2
-;; CHECK-NEXT: (f64.const -nan:0xfffffffffffb2)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (return
-;; CHECK-NEXT: (i32.const -1217019)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (func $hashMemory (result i32)
-;; CHECK-NEXT: (local $0 i32)
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.const 5381)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=1
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=2
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=3
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=4
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=5
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=6
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=7
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=8
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=9
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=10
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=11
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=12
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=13
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=14
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.set $0
-;; CHECK-NEXT: (i32.xor
-;; CHECK-NEXT: (i32.add
-;; CHECK-NEXT: (i32.shl
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: (i32.const 5)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (i32.load8_u offset=15
-;; CHECK-NEXT: (i32.const 0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT: (local.get $0)
-;; CHECK-NEXT: )
-;; CHECK-NEXT: )
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 4234964801256893051
-;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
-;; CHECK-NEXT: 1,
-;; CHECK-NEXT: 1,
-;; CHECK-NEXT: 0
-;; CHECK-NEXT: for func to test LivenessTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 4577570485573586799
-;; CHECK-NEXT: Generated FinitePowersetLattice<LocalSet*> elements:
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: ,
-;; CHECK-NEXT:
-;; CHECK-NEXT: for func_invoker to test ReachingDefinitionsTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 8191301589003135276
-;; CHECK-NEXT: Generated FinitePowersetLattice<LocalSet*> elements:
-;; CHECK-NEXT: 0,
-;; CHECK-NEXT: 0,
-;; CHECK-NEXT: 1
-;; CHECK-NEXT: for func_6 to test ReachingDefinitionsTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 8068299453651594774
-;; CHECK-NEXT: Generated FinitePowersetLattice<LocalSet*> elements:
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: ,
-;; CHECK-NEXT:
-;; CHECK-NEXT: for func_6_invoker to test ReachingDefinitionsTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 5852178751023674337
-;; CHECK-NEXT: Generated StackLattice<FiniteIntPowersetLattice> elements:
-;; CHECK-NEXT: 010010
-;; CHECK-NEXT: 000110
-;; CHECK-NEXT: 000010
-;; CHECK-NEXT: 111100
-;; CHECK-NEXT: 111001
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: 110111
-;; CHECK-NEXT: 001000
-;; CHECK-NEXT: 100000
-;; CHECK-NEXT: 010010
-;; CHECK-NEXT: 011110
-;; CHECK-NEXT: 101111
-;; CHECK-NEXT: 000001
-;; CHECK-NEXT: 011011
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: 111011
-;; CHECK-NEXT: 010111
-;; CHECK-NEXT: 111011
-;; CHECK-NEXT: 011001
-;; CHECK-NEXT: 001000
-;; CHECK-NEXT: 001110
-;; CHECK-NEXT: 101001
-;; CHECK-NEXT: 010100
-;; CHECK-NEXT: 111111
-;; CHECK-NEXT:
-;; CHECK-NEXT: for func_8 to test LivenessTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 13832862600605363478
-;; CHECK-NEXT: Generated StackLattice<FiniteIntPowersetLattice> elements:
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: ,
-;; CHECK-NEXT:
-;; CHECK-NEXT: for func_8_invoker to test LivenessTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 7970088265179676333
-;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
-;; CHECK-NEXT: 110,
-;; CHECK-NEXT: 001,
-;; CHECK-NEXT: 000
-;; CHECK-NEXT: for func_10 to test LivenessTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 14582942952639200251
-;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: ,
-;; CHECK-NEXT:
-;; CHECK-NEXT: for func_10_invoker to test LivenessTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 16331556144677973625
-;; CHECK-NEXT: Generated StackLattice<FiniteIntPowersetLattice> elements:
-;; CHECK-NEXT: 111011111001
-;; CHECK-NEXT: 111101000101
-;; CHECK-NEXT: 010000101000
-;; CHECK-NEXT: 001010000110
-;; CHECK-NEXT: 010100100001
-;; CHECK-NEXT: 111101100101
-;; CHECK-NEXT: 111110001001
-;; CHECK-NEXT: 100110000100
-;; CHECK-NEXT: 000111111001
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: 111100110101
-;; CHECK-NEXT: 100010111101
-;; CHECK-NEXT: 010100011110
-;; CHECK-NEXT: 000011001000
-;; CHECK-NEXT: 010000100101
-;; CHECK-NEXT: 010010101010
-;; CHECK-NEXT: 110101110000
-;; CHECK-NEXT: 010110000100
-;; CHECK-NEXT: 111101011111
-;; CHECK-NEXT: 010101001111
-;; CHECK-NEXT: 111000110111
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: 110000010011
-;; CHECK-NEXT: 010000001001
-;; CHECK-NEXT: 001111100000
-;; CHECK-NEXT: 011010110101
-;; CHECK-NEXT: 011110111110
-;; CHECK-NEXT: 001111010001
-;; CHECK-NEXT: 100100001010
-;; CHECK-NEXT: 010010100001
-;; CHECK-NEXT: 010101001000
-;; CHECK-NEXT: 011111011001
-;; CHECK-NEXT: 001111100010
-;; CHECK-NEXT: 100111000001
-;; CHECK-NEXT: 001011010100
-;; CHECK-NEXT: 101001010010
-;; CHECK-NEXT:
-;; CHECK-NEXT: for func_12 to test LivenessTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 6783688792201211800
-;; CHECK-NEXT: Generated StackLattice<FiniteIntPowersetLattice> elements:
-;; CHECK-NEXT: 00100
-;; CHECK-NEXT: 11100
-;; CHECK-NEXT: 00110
-;; CHECK-NEXT: 10110
-;; CHECK-NEXT: 01001
-;; CHECK-NEXT: 00110
-;; CHECK-NEXT: 10110
-;; CHECK-NEXT: 11100
-;; CHECK-NEXT: 00101
-;; CHECK-NEXT: 01001
-;; CHECK-NEXT: 01000
-;; CHECK-NEXT: 00101
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: 11010
-;; CHECK-NEXT: 11001
-;; CHECK-NEXT: 00101
-;; CHECK-NEXT: 10010
-;; CHECK-NEXT: 00101
-;; CHECK-NEXT: 00111
-;; CHECK-NEXT: 00000
-;; CHECK-NEXT: 10111
-;; CHECK-NEXT: ,
-;; CHECK-NEXT: 11010
-;; CHECK-NEXT: 11100
-;; CHECK-NEXT: 10001
-;; CHECK-NEXT: 11011
-;; CHECK-NEXT: 01001
-;; CHECK-NEXT: 11011
-;; CHECK-NEXT: 00101
-;; CHECK-NEXT:
-;; CHECK-NEXT: for func_13 to test LivenessTransferFunction.
-;; CHECK-NEXT:
-;; CHECK-NEXT: Using lattice element seed 15457352654905208821
-;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
-;; CHECK-NEXT: 1,
-;; CHECK-NEXT: 0,
-;; CHECK-NEXT: 1
-;; CHECK-NEXT: for hashMemory to test LivenessTransferFunction.
-;; CHECK-NEXT:
diff --git a/test/passes/fuzz_metrics_noprint.bin.txt b/test/passes/fuzz_metrics_noprint.bin.txt
index 3b42464b2..703c2aeb4 100644
--- a/test/passes/fuzz_metrics_noprint.bin.txt
+++ b/test/passes/fuzz_metrics_noprint.bin.txt
@@ -1,34 +1,34 @@
total
- [exports] : 42
- [funcs] : 62
+ [exports] : 29
+ [funcs] : 39
[globals] : 9
[imports] : 4
[memories] : 1
[memory-data] : 2
- [table-data] : 18
+ [table-data] : 6
[tables] : 1
[tags] : 0
- [total] : 8712
- [vars] : 175
- Binary : 633
- Block : 1393
- Break : 282
- Call : 282
- CallIndirect : 77
- Const : 1517
- Drop : 76
- GlobalGet : 675
- GlobalSet : 528
- If : 472
- Load : 157
- LocalGet : 631
- LocalSet : 475
- Loop : 192
- Nop : 155
- RefFunc : 18
- Return : 116
- Select : 91
- Store : 66
- Switch : 6
- Unary : 609
- Unreachable : 261
+ [total] : 5494
+ [vars] : 119
+ Binary : 400
+ Block : 892
+ Break : 210
+ Call : 232
+ CallIndirect : 12
+ Const : 898
+ Drop : 49
+ GlobalGet : 421
+ GlobalSet : 333
+ If : 289
+ Load : 113
+ LocalGet : 434
+ LocalSet : 306
+ Loop : 118
+ Nop : 85
+ RefFunc : 6
+ Return : 62
+ Select : 52
+ Store : 45
+ Switch : 1
+ Unary : 380
+ Unreachable : 156
diff --git a/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt b/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt
index 2c4396485..8d88600ed 100644
--- a/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt
+++ b/test/passes/translate-to-fuzz_all-features_metrics_noprint.txt
@@ -1,47 +1,53 @@
total
- [exports] : 7
- [funcs] : 12
+ [exports] : 4
+ [funcs] : 6
[globals] : 1
[imports] : 5
[memories] : 1
[memory-data] : 20
- [table-data] : 3
+ [table-data] : 0
[tables] : 1
[tags] : 2
- [total] : 575
- [vars] : 17
- ArrayLen : 1
- ArrayNew : 4
- ArrayNewFixed : 1
- AtomicCmpxchg : 1
- Binary : 75
- Block : 68
- Break : 6
- Call : 15
+ [total] : 630
+ [vars] : 23
+ ArrayGet : 1
+ ArrayLen : 2
+ ArrayNew : 8
+ ArrayNewFixed : 3
+ ArraySet : 1
+ AtomicNotify : 1
+ Binary : 81
+ Block : 66
+ Break : 12
+ Call : 22
CallRef : 1
- Const : 148
- Drop : 4
- GlobalGet : 28
- GlobalSet : 28
+ Const : 132
+ Drop : 6
+ GlobalGet : 20
+ GlobalSet : 20
I31Get : 1
- If : 24
- Load : 20
- LocalGet : 33
- LocalSet : 22
- Loop : 4
- MemoryFill : 2
- Nop : 7
- RefFunc : 6
+ If : 23
+ Load : 23
+ LocalGet : 70
+ LocalSet : 41
+ Loop : 5
+ Nop : 12
+ RefAs : 4
+ RefCast : 1
+ RefEq : 2
+ RefFunc : 1
RefI31 : 3
- RefIsNull : 1
- RefNull : 7
- RefTest : 1
+ RefNull : 6
Return : 7
SIMDExtract : 1
- Select : 2
- Store : 2
- StructNew : 7
- StructSet : 1
- TupleMake : 3
- Unary : 24
- Unreachable : 17
+ SIMDTernary : 1
+ Select : 4
+ Store : 3
+ StructGet : 1
+ StructNew : 9
+ StructSet : 2
+ Try : 2
+ TupleExtract : 1
+ TupleMake : 2
+ Unary : 19
+ Unreachable : 10