summaryrefslogtreecommitdiff
path: root/test/lit/fuzz-lattices.test
diff options
context:
space:
mode:
authorBruce He <44327446+zm2he@users.noreply.github.com>2023-07-26 21:09:22 +0000
committerGitHub <noreply@github.com>2023-07-26 17:09:22 -0400
commitc015c9fee1e0af4d3a1da2ff435b020ff107abd8 (patch)
treebda1cd50ad9fc447866ba407fc6b434bc9280ce8 /test/lit/fuzz-lattices.test
parentf2a8b86725c0d1ee3890dc80f8d3b4c094db38ac (diff)
downloadbinaryen-c015c9fee1e0af4d3a1da2ff435b020ff107abd8.tar.gz
binaryen-c015c9fee1e0af4d3a1da2ff435b020ff107abd8.tar.bz2
binaryen-c015c9fee1e0af4d3a1da2ff435b020ff107abd8.zip
Add a Fuzzer for Lattice and Transfer Function Properties (#5831)
This change adds a fuzzer which checks the following properties in abstract interpretation static analyses. - Transfer Function Monotonicity - Lattice Element Reflexivity - Lattice Element Transitivity - Lattice Element Anti-Symmetry This is done by randomly generating a module and using its functions as transfer function inputs, along with randomly generated lattice elements (states). Lattice element properties are fuzzed from the randomly generated states also.
Diffstat (limited to 'test/lit/fuzz-lattices.test')
-rw-r--r--test/lit/fuzz-lattices.test1305
1 files changed, 1305 insertions, 0 deletions
diff --git a/test/lit/fuzz-lattices.test b/test/lit/fuzz-lattices.test
new file mode 100644
index 000000000..361c46930
--- /dev/null
+++ b/test/lit/fuzz-lattices.test
@@ -0,0 +1,1305 @@
+;; 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 $none_=>_none (func))
+;; CHECK-NEXT: (type $none_=>_i32 (func (result i32)))
+;; CHECK-NEXT: (type $none_=>_i64 (func (result i64)))
+;; CHECK-NEXT: (type $i32_=>_none (func (param i32)))
+;; CHECK-NEXT: (type $i64_=>_none (func (param i64)))
+;; CHECK-NEXT: (type $f32_=>_none (func (param f32)))
+;; CHECK-NEXT: (type $f64_=>_none (func (param f64)))
+;; CHECK-NEXT: (type $i32_=>_f32 (func (param i32) (result f32)))
+;; CHECK-NEXT: (type $i32_f32_f64_f32_=>_i32 (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 FinitePowersetLattice<LocalSet*> elements:
+;; CHECK-NEXT: 1111000011,
+;; CHECK-NEXT: 0110011101,
+;; CHECK-NEXT: 0010001110
+;; CHECK-NEXT: for func to test ReachingDefinitionsTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 4577570485573586799
+;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
+;; CHECK-NEXT: ,
+;; CHECK-NEXT: ,
+;; CHECK-NEXT:
+;; CHECK-NEXT: for func_invoker to test LivenessTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 8191301589003135276
+;; CHECK-NEXT: Generated FinitePowersetLattice<LocalSet*> elements:
+;; CHECK-NEXT: 0,
+;; CHECK-NEXT: 1,
+;; CHECK-NEXT: 1
+;; CHECK-NEXT: for func_6 to test ReachingDefinitionsTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 8068299453651594774
+;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
+;; CHECK-NEXT: ,
+;; CHECK-NEXT: ,
+;; CHECK-NEXT:
+;; CHECK-NEXT: for func_6_invoker to test LivenessTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 5852178751023674337
+;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
+;; CHECK-NEXT: 111111,
+;; CHECK-NEXT: 000100,
+;; CHECK-NEXT: 010000
+;; CHECK-NEXT: for func_8 to test LivenessTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 13832862600605363478
+;; CHECK-NEXT: Generated FinitePowersetLattice<LocalSet*> elements:
+;; CHECK-NEXT: ,
+;; CHECK-NEXT: ,
+;; CHECK-NEXT:
+;; CHECK-NEXT: for func_8_invoker to test ReachingDefinitionsTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 7970088265179676333
+;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
+;; CHECK-NEXT: 011,
+;; CHECK-NEXT: 011,
+;; CHECK-NEXT: 000
+;; CHECK-NEXT: for func_10 to test LivenessTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 14582942952639200251
+;; CHECK-NEXT: Generated FinitePowersetLattice<LocalSet*> elements:
+;; CHECK-NEXT: ,
+;; CHECK-NEXT: ,
+;; CHECK-NEXT:
+;; CHECK-NEXT: for func_10_invoker to test ReachingDefinitionsTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 16331556144677973625
+;; CHECK-NEXT: Generated FinitePowersetLattice<LocalSet*> elements:
+;; CHECK-NEXT: 001000110000,
+;; CHECK-NEXT: 011010100000,
+;; CHECK-NEXT: 001011001101
+;; CHECK-NEXT: for func_12 to test ReachingDefinitionsTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 6783688792201211800
+;; CHECK-NEXT: Generated FiniteIntPowersetLattice elements:
+;; CHECK-NEXT: 00001,
+;; CHECK-NEXT: 00011,
+;; CHECK-NEXT: 10000
+;; CHECK-NEXT: for func_13 to test LivenessTransferFunction.
+;; CHECK-NEXT:
+;; CHECK-NEXT: Using lattice element seed 15457352654905208821
+;; CHECK-NEXT: Generated FinitePowersetLattice<LocalSet*> elements:
+;; CHECK-NEXT: 111000100001010101,
+;; CHECK-NEXT: 001110111010000110,
+;; CHECK-NEXT: 111010111111110110
+;; CHECK-NEXT: for hashMemory to test ReachingDefinitionsTransferFunction.
+;; CHECK-NEXT: