summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/passes/flatten_dfo_O3.txt50
-rw-r--r--test/passes/flatten_dfo_O3.wast187
-rw-r--r--test/passes/flatten_simplify-locals-nonesting_dfo_O3.txt41
-rw-r--r--test/passes/flatten_simplify-locals-nonesting_dfo_O3.wast112
-rw-r--r--test/passes/flatten_simplify-locals-nonesting_souperify-single-use.txt5167
-rw-r--r--test/passes/flatten_simplify-locals-nonesting_souperify-single-use.wast1248
-rw-r--r--test/passes/flatten_simplify-locals-nonesting_souperify.txt5186
-rw-r--r--test/passes/flatten_simplify-locals-nonesting_souperify.wast1248
8 files changed, 13239 insertions, 0 deletions
diff --git a/test/passes/flatten_dfo_O3.txt b/test/passes/flatten_dfo_O3.txt
new file mode 100644
index 000000000..02cdbfa86
--- /dev/null
+++ b/test/passes/flatten_dfo_O3.txt
@@ -0,0 +1,50 @@
+(module
+ (type $0 (func))
+ (type $1 (func (param i32 i32) (result i32)))
+ (type $2 (func (param i64 i32) (result f64)))
+ (type $3 (func (param f64) (result f64)))
+ (memory $0 (shared 1 1))
+ (export "one" (func $0))
+ (export "two" (func $1))
+ (export "use-var" (func $2))
+ (export "bad1" (func $3))
+ (export "only-dfo" (func $4))
+ (func $0 (; 0 ;) (; has Stack IR ;) (type $0)
+ (loop $label$2
+ (block $label$3
+ (br_if $label$3
+ (i32.load
+ (i32.const 3060)
+ )
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func $1 (; 1 ;) (; has Stack IR ;) (type $1) (param $0 i32) (param $1 i32) (result i32)
+ (i32.const 0)
+ )
+ (func $2 (; 2 ;) (; has Stack IR ;) (type $2) (param $0 i64) (param $1 i32) (result f64)
+ (block $label$6
+ (loop $label$8
+ (br_if $label$8
+ (get_local $1)
+ )
+ )
+ (unreachable)
+ )
+ )
+ (func $3 (; 3 ;) (; has Stack IR ;) (type $0)
+ (i32.store
+ (i32.const 1)
+ (i32.const -16384)
+ )
+ )
+ (func $4 (; 4 ;) (; has Stack IR ;) (type $3) (param $0 f64) (result f64)
+ (local $1 i32)
+ (local $2 i32)
+ (loop $label$1
+ (br $label$1)
+ )
+ )
+)
diff --git a/test/passes/flatten_dfo_O3.wast b/test/passes/flatten_dfo_O3.wast
new file mode 100644
index 000000000..512315995
--- /dev/null
+++ b/test/passes/flatten_dfo_O3.wast
@@ -0,0 +1,187 @@
+(module
+ (memory $0 (shared 1 1))
+ (func "one"
+ (loop $label$2
+ (br_if $label$2
+ (block $label$3 (result i32)
+ (drop
+ (br_if $label$3
+ (i32.const 0)
+ (i32.load
+ (i32.const 3060)
+ )
+ )
+ )
+ (i32.const 0)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func "two" (param $var$0 i32) (param $var$1 i32) (result i32)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (if
+ (i32.const 0)
+ (i32.store8
+ (i32.const 8)
+ (block $label$2 (result i32)
+ (drop
+ (br_if $label$2
+ (i32.const 1)
+ (i32.const 0)
+ )
+ )
+ (if
+ (i32.const 0)
+ (drop
+ (br_if $label$2
+ (i32.const 1)
+ (i32.const 1)
+ )
+ )
+ )
+ (block $label$4
+ (br_if $label$4
+ (i32.const 0)
+ )
+ (br_if $label$4
+ (i32.const 0)
+ )
+ (drop
+ (br_if $label$2
+ (i32.const 1)
+ (i32.const 0)
+ )
+ )
+ )
+ (i32.const 6704)
+ )
+ )
+ )
+ (nop)
+ (i32.const 0)
+ )
+ (func "use-var" (param $var$0 i64) (param $var$1 i32) (result f64)
+ (local $var$2 i32)
+ (block $label$1
+ (br_table $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 $label$1 $label$1
+ (i32.wrap/i64
+ (if (result i64)
+ (i32.const 0)
+ (i64.const 1)
+ (if (result i64)
+ (if (result i32)
+ (i32.const 0)
+ (unreachable)
+ (block $label$6 (result i32)
+ (block $label$7
+ (loop $label$8
+ (br_if $label$8
+ (br_if $label$6
+ (tee_local $var$2
+ (block $label$9 (result i32)
+ (get_local $var$1)
+ )
+ )
+ (i32.const 0)
+ )
+ )
+ (loop $label$10
+ (if
+ (i32.const 0)
+ (set_local $var$2
+ (get_local $var$1)
+ )
+ )
+ )
+ (drop
+ (i32.eqz
+ (get_local $var$2)
+ )
+ )
+ )
+ )
+ (unreachable)
+ )
+ )
+ (unreachable)
+ (i64.const 1)
+ )
+ )
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func "bad1"
+ (local $var$2 i32)
+ (local $var$4 i32)
+ (block $label$1
+ (loop $label$2
+ (set_local $var$4
+ (if (result i32)
+ (i32.const 0)
+ (block (result i32)
+ (set_local $var$4
+ (tee_local $var$2
+ (i32.xor
+ (i32.const 0)
+ (i32.const -1)
+ )
+ )
+ )
+ (i32.const 0)
+ )
+ (block (result i32)
+ (set_local $var$4
+ (tee_local $var$2
+ (i32.xor
+ (i32.const 0)
+ (i32.const -1)
+ )
+ )
+ )
+ (i32.const 0)
+ )
+ )
+ )
+ (i32.store
+ (i32.const 1)
+ (i32.shl
+ (get_local $var$2)
+ (i32.const 14)
+ )
+ )
+ )
+ )
+ )
+ (func "only-dfo" (param $var$0 f64) (result f64)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (loop $label$1
+ (if
+ (tee_local $var$1
+ (tee_local $var$2
+ (get_local $var$1)
+ )
+ )
+ (if
+ (get_local $var$2)
+ (i64.atomic.store32 offset=3
+ (i32.and
+ (get_local $var$1) ;; only dfo can figure out that this is 0
+ (i32.const 15)
+ )
+ (i64.const -32768)
+ )
+ )
+ )
+ (br $label$1)
+ )
+ )
+)
+
diff --git a/test/passes/flatten_simplify-locals-nonesting_dfo_O3.txt b/test/passes/flatten_simplify-locals-nonesting_dfo_O3.txt
new file mode 100644
index 000000000..1c6e597a1
--- /dev/null
+++ b/test/passes/flatten_simplify-locals-nonesting_dfo_O3.txt
@@ -0,0 +1,41 @@
+(module
+ (type $0 (func))
+ (type $1 (func (result f64)))
+ (type $2 (func (param i32 f64 f64) (result i32)))
+ (type $3 (func (param i64)))
+ (type $4 (func (param f64) (result i32)))
+ (export "if-select" (func $0))
+ (export "unreachable-body-update-zext" (func $1))
+ (export "ssa-const" (func $2))
+ (export "if-nothing" (func $3))
+ (export "only-dfo" (func $4))
+ (func $0 (; 0 ;) (; has Stack IR ;) (type $0)
+ (nop)
+ )
+ (func $1 (; 1 ;) (; has Stack IR ;) (type $1) (result f64)
+ (unreachable)
+ )
+ (func $2 (; 2 ;) (; has Stack IR ;) (type $2) (param $0 i32) (param $1 f64) (param $2 f64) (result i32)
+ (unreachable)
+ )
+ (func $3 (; 3 ;) (; has Stack IR ;) (type $3) (param $0 i64)
+ (unreachable)
+ )
+ (func $4 (; 4 ;) (; has Stack IR ;) (type $4) (param $0 f64) (result i32)
+ (local $1 i32)
+ (loop $label$1
+ (if
+ (i32.eqz
+ (get_local $1)
+ )
+ (block
+ (set_local $1
+ (i32.const -2147483648)
+ )
+ (br $label$1)
+ )
+ )
+ )
+ (i32.const -2766)
+ )
+)
diff --git a/test/passes/flatten_simplify-locals-nonesting_dfo_O3.wast b/test/passes/flatten_simplify-locals-nonesting_dfo_O3.wast
new file mode 100644
index 000000000..ef4586fcb
--- /dev/null
+++ b/test/passes/flatten_simplify-locals-nonesting_dfo_O3.wast
@@ -0,0 +1,112 @@
+(module
+ (func "if-select"
+ (local $var$0 i32)
+ (nop)
+ (drop
+ (if (result i32)
+ (select
+ (i32.const 65473)
+ (i32.const 1)
+ (get_local $var$0)
+ )
+ (i32.const -2405046)
+ (i32.const 1)
+ )
+ )
+ )
+ (func "unreachable-body-update-zext" (result f64)
+ (if
+ (i32.eqz
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ (f64.const -9223372036854775808)
+ )
+ (func "ssa-const" (param $var$0 i32) (param $var$1 f64) (param $var$2 f64) (result i32)
+ (block $label$1 (result i32)
+ (block $label$2
+ (if
+ (i32.const 1)
+ (block
+ (drop
+ (loop $label$5 (result i64)
+ (if (result i64)
+ (i32.const 0)
+ (i64.load offset=22
+ (i32.and
+ (br_if $label$1
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (i32.const 15)
+ )
+ (i64.const 1)
+ )
+ (i64.const 1)
+ )
+ )
+ )
+ )
+ )
+ (unreachable)
+ )
+ )
+ )
+ (func "if-nothing" (param $var$0 i64)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (block $label$1
+ (loop $label$2
+ (block $label$3
+ (block $label$4
+ (br_if $label$3
+ (i32.eqz
+ (if (result i32)
+ (i32.const 0)
+ (i32.const 0)
+ (get_local $var$2)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ )
+ (unreachable)
+ )
+ )
+ (func "only-dfo" (param $var$0 f64) (result i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (local $var$3 i32)
+ (local $var$4 i32)
+ (loop $label$1
+ (set_local $var$3
+ (tee_local $var$1
+ (tee_local $var$2
+ (get_local $var$1)
+ )
+ )
+ )
+ (if
+ (i32.eqz
+ (get_local $var$4)
+ )
+ (block
+ (set_local $var$4
+ (select
+ (get_local $var$3)
+ (i32.const -2147483648)
+ (get_local $var$2)
+ )
+ )
+ (br $label$1)
+ )
+ )
+ )
+ (i32.const -2766)
+ )
+)
+
diff --git a/test/passes/flatten_simplify-locals-nonesting_souperify-single-use.txt b/test/passes/flatten_simplify-locals-nonesting_souperify-single-use.txt
new file mode 100644
index 000000000..48b363409
--- /dev/null
+++ b/test/passes/flatten_simplify-locals-nonesting_souperify-single-use.txt
@@ -0,0 +1,5167 @@
+
+; function: $figure-1a
+
+; start LHS (in $figure-1a)
+%0:i64 = var
+%1:i64 = var
+%2 = eq %0, %1
+infer %2
+
+
+; start LHS (in $figure-1a)
+%0:i64 = var
+%1:i64 = var
+%2 = ne %0, %1
+infer %2
+
+
+; start LHS (in $figure-1a)
+%0:i64 = var
+%1:i64 = var
+%2 = eq %0, %1
+%3:i32 = zext %2
+%4:i64 = var
+%5 = ne %0, %4
+%6:i32 = zext %5
+%7 = and %3, %6
+infer %7
+
+
+; function: $figure-1b
+
+; start LHS (in $figure-1b)
+%0:i64 = var
+%1:i64 = var
+%2 = slt %0, %1
+infer %2
+
+
+; start LHS (in $figure-1b)
+%0:i64 = var
+%1:i64 = var
+%2 = eq %0, %1
+%3:i64 = var
+%4 = slt %1, %3
+pc %4 1:i1
+infer %2
+
+
+; start LHS (in $figure-1b)
+%0:i64 = var
+%1:i64 = var
+%2 = ne %0, %1
+%3:i64 = var
+%4 = slt %3, %1
+pc %4 1:i1
+infer %2
+
+
+; start LHS (in $figure-1b)
+%0:i64 = var
+%1:i64 = var
+%2 = eq %0, %1
+%3:i32 = zext %2
+%4:i64 = var
+%5 = ne %0, %4
+%6:i32 = zext %5
+%7 = and %3, %6
+%8 = slt %1, %4
+pc %8 1:i1
+infer %7
+
+
+; function: $figure-3-if
+
+; start LHS (in $figure-3-if)
+%0:i32 = var
+%1 = and %0, 1:i32
+infer %1
+
+
+; start LHS (in $figure-3-if)
+%0:i32 = var
+%1 = add %0, 1:i32
+%2 = and %0, 1:i32
+%3 = ne %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $figure-3-if)
+%0:i32 = var
+%1 = add %0, 2:i32
+%2 = and %0, 1:i32
+%3 = eq %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $figure-3-if)
+%0 = block 2
+%1:i32 = var
+%2 = add %1, 1:i32
+%3 = add %1, 2:i32
+%4 = phi %0, %2, %3
+%5 = and %4, 1:i32
+%6 = and %1, 1:i32
+%7 = ne %6, 0:i32
+blockpc %0 0 %7 1:i1
+%8 = eq %6, 0:i32
+blockpc %0 1 %8 1:i1
+infer %5
+
+
+; function: $flips
+
+; start LHS (in $flips)
+%0 = slt 0:i32, 0:i32
+infer %0
+
+
+; start LHS (in $flips)
+%0 = slt 0:i32, 0:i32
+%1:i32 = zext %0
+%2 = ult 0:i32, %1
+infer %2
+
+
+; start LHS (in $flips)
+%0 = slt 0:i32, 0:i32
+%1:i32 = zext %0
+%2 = ult 0:i32, %1
+%3:i32 = zext %2
+%4 = sle 0:i32, %3
+infer %4
+
+
+; start LHS (in $flips)
+%0 = slt 0:i32, 0:i32
+%1:i32 = zext %0
+%2 = ult 0:i32, %1
+%3:i32 = zext %2
+%4 = sle 0:i32, %3
+%5:i32 = zext %4
+%6 = ule 0:i32, %5
+infer %6
+
+
+; function: $various-conditions-1
+
+; start LHS (in $various-conditions-1)
+%0:i32 = var
+%1 = add %0, 1:i32
+%2 = ne %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; function: $various-conditions-2
+
+; start LHS (in $various-conditions-2)
+%0:i32 = var
+%1 = slt %0, 0:i32
+infer %1
+
+
+; start LHS (in $various-conditions-2)
+%0:i32 = var
+%1 = sub %0, 2:i32
+%2 = slt %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; function: $various-conditions-3
+
+; start LHS (in $various-conditions-3)
+%0:i32 = var
+%1 = sub %0, 4:i32
+%2:i32 = var
+%3 = ne %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; function: $various-conditions-4
+
+; function: $unaries
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = eq %0, 0:i32
+infer %1
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = cttz %0
+%2:i32 = var
+%3 = eq %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = ctlz %0
+%2 = eq %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = ctpop %0
+%2:i32 = var
+%3 = eq %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = ctlz %0
+%2:i32 = var
+%3 = ctpop %2
+%4 = sub %1, %3
+%5 = eq %0, 0:i32
+pc %5 1:i1
+infer %4
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = cttz %0
+%2:i32 = var
+%3 = ctlz %2
+%4 = ctpop %0
+%5 = sub %3, %4
+%6 = add %1, %5
+%7 = eq %2, 0:i32
+pc %7 1:i1
+infer %6
+
+
+; function: $unary-condition
+
+; start LHS (in $unary-condition)
+%0:i32 = var
+%1 = ule 1:i32, %0
+infer %1
+
+
+; start LHS (in $unary-condition)
+%0:i32 = var
+%1 = ule 1:i32, %0
+%2:i32 = zext %1
+%3 = cttz %2
+infer %3
+
+
+; start LHS (in $unary-condition)
+%0:i32 = var
+%1 = add %0, 2:i32
+%2 = ule 1:i32, %0
+%3:i32 = zext %2
+%4 = cttz %3
+%5 = ne %4, 0:i32
+pc %5 1:i1
+infer %1
+
+
+; function: $unary-condition-2
+
+; start LHS (in $unary-condition-2)
+%0:i32 = var
+%1 = ule 1:i32, %0
+infer %1
+
+
+; start LHS (in $unary-condition-2)
+%0:i32 = var
+%1 = ule 1:i32, %0
+%2:i32 = zext %1
+%3 = eq %2, 0:i32
+infer %3
+
+
+; start LHS (in $unary-condition-2)
+%0:i32 = var
+%1 = add %0, 2:i32
+%2 = ule 1:i32, %0
+%3:i32 = zext %2
+%4 = eq %3, 0:i32
+pc %4 1:i1
+infer %1
+
+
+; function: $if-else-cond
+
+; start LHS (in $if-else-cond)
+%0:i32 = var
+%1 = slt %0, 1:i32
+infer %1
+
+
+; start LHS (in $if-else-cond)
+%0:i32 = var
+%1 = add %0, 1:i32
+%2 = slt %0, 1:i32
+pc %2 1:i1
+infer %1
+
+
+; start LHS (in $if-else-cond)
+%0:i32 = var
+%1 = add %0, 2:i32
+%2 = slt %0, 1:i32
+%3:i32 = zext %2
+%4 = eq %3, 0:i32
+pc %4 1:i1
+infer %1
+
+
+; start LHS (in $if-else-cond)
+%0 = block 2
+%1:i32 = var
+%2 = add %1, 1:i32
+%3 = add %1, 2:i32
+%4 = phi %0, %2, %3
+%5 = and %4, 1:i32
+%6 = slt %1, 1:i32
+blockpc %0 0 %6 1:i1
+%7:i32 = zext %6
+%8 = eq %7, 0:i32
+blockpc %0 1 %8 1:i1
+infer %5
+
+
+; function: $trivial-ret
+
+; start LHS (in $trivial-ret)
+%0 = add 0:i32, 1:i32
+infer %0
+
+
+; function: $trivial-const
+
+; function: $trivial-const-block
+
+; function: $bad-phi-value
+
+; function: $bad-phi-value-2
+
+; function: $select
+
+; start LHS (in $select)
+%0 = ne 3:i32, 0:i32
+infer %0
+
+
+; start LHS (in $select)
+%0 = ne 3:i32, 0:i32
+%1 = select %0, 1:i32, 2:i32
+infer %1
+
+
+; function: $select-2
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1 = add %0, 1:i32
+infer %1
+
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1 = add 2:i32, %0
+infer %1
+
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1 = add 2:i32, %0
+%2 = ne %1, 0:i32
+infer %2
+
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1 = add 2:i32, %0
+%2 = ne %1, 0:i32
+%3:i32 = var
+%4 = add %3, %0
+%5 = add %3, 1:i32
+%6 = select %2, %4, %5
+infer %6
+
+
+; function: $block-phi-1
+
+; start LHS (in $block-phi-1)
+%0:i32 = var
+%1 = add %0, 1:i32
+infer %1
+
+
+; start LHS (in $block-phi-1)
+%0:i32 = var
+%1 = add %0, 2:i32
+infer %1
+
+
+; start LHS (in $block-phi-1)
+%0 = block 2
+%1:i32 = var
+%2 = add %1, 2:i32
+%3 = phi %0, %1, %2
+%4 = add %3, 3:i32
+infer %4
+
+
+; function: $block-phi-2
+
+; start LHS (in $block-phi-2)
+%0 = block 2
+%1 = phi %0, 1:i32, 2:i32
+%2 = add %1, 3:i32
+infer %2
+
+
+; function: $zero_init-phi-bad_type
+
+; function: $phi-bad-type
+
+; function: $phi-one-side-i1
+
+; start LHS (in $phi-one-side-i1)
+%0:i32 = var
+%1:i32 = var
+%2 = sle %0, %1
+infer %2
+
+
+; start LHS (in $phi-one-side-i1)
+%0:i32 = var
+%1:i32 = var
+%2 = eq %0, %1
+%3 = sle %0, %1
+pc %3 1:i1
+infer %2
+
+
+; start LHS (in $phi-one-side-i1)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+%3 = sle %0, %1
+%4:i32 = zext %3
+%5 = eq %4, 0:i32
+pc %5 1:i1
+infer %2
+
+
+; function: $call
+
+; start LHS (in $call)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; start LHS (in $call)
+%0:i32 = var
+%1 = add 10:i32, %0
+infer %1
+
+
+; start LHS (in $call)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+%3:i32 = var
+%4 = add 10:i32, %3
+%5 = mul %2, %4
+infer %5
+
+
+; function: $in-unreachable-1
+
+; function: $in-unreachable-2
+
+; function: $in-unreachable-3
+
+; function: $in-unreachable-4
+
+; function: $in-unreachable-br_if
+
+; function: $in-unreachable-big
+
+; function: $in-unreachable-operations
+
+; function: $merge-with-one-less
+
+; function: $deep
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+infer %1
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+infer %2
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+infer %3
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+infer %4
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+infer %5
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+infer %6
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+infer %7
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+infer %8
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; function: $two-pcs
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = slt %0, %1
+infer %2
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1 = eq %0, 0:i64
+%2:i64 = var
+%3 = slt %0, %2
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = add %0, %1
+%3 = eq %0, 0:i64
+%4 = slt %0, %1
+pc %3 1:i1
+pc %4 1:i1
+infer %2
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = sub %0, %1
+%3 = eq %0, 0:i64
+%4:i32 = zext %3
+%5 = eq %4, 0:i32
+%6 = slt %0, %1
+pc %5 1:i1
+pc %6 1:i1
+infer %2
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1 = eq %0, 0:i64
+%2:i64 = var
+%3 = slt %2, %0
+%4:i32 = zext %3
+%5 = eq %4, 0:i32
+pc %5 1:i1
+infer %1
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = mul %0, %1
+%3 = eq %1, 0:i64
+%4 = slt %0, %1
+%5:i32 = zext %4
+%6 = eq %5, 0:i32
+pc %3 1:i1
+pc %6 1:i1
+infer %2
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = sdiv %0, %1
+%3 = eq %1, 0:i64
+%4:i32 = zext %3
+%5 = eq %4, 0:i32
+%6 = slt %0, %1
+%7:i32 = zext %6
+%8 = eq %7, 0:i32
+pc %5 1:i1
+pc %8 1:i1
+infer %2
+
+
+; function: $loop-1
+
+; start LHS (in $loop-1)
+%0 = add 1:i32, 2:i32
+infer %0
+
+
+; function: $loop-2
+
+; start LHS (in $loop-2)
+%0 = add 1:i32, 3:i32
+infer %0
+
+
+; start LHS (in $loop-2)
+%0 = add 2:i32, 4:i32
+infer %0
+
+
+; start LHS (in $loop-2)
+%0 = add 1:i32, 3:i32
+%1 = add 2:i32, 4:i32
+%2 = add %0, %1
+infer %2
+
+
+; function: $loop-3
+
+; start LHS (in $loop-3)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-3)
+%0:i32 = var
+%1 = add %0, 4:i32
+infer %1
+
+
+; start LHS (in $loop-3)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; function: $loop-4
+
+; start LHS (in $loop-4)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-4)
+%0:i32 = var
+%1 = add %0, 2:i32
+infer %1
+
+
+; function: $loop-5
+
+; start LHS (in $loop-5)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-5)
+%0:i32 = var
+%1 = add %0, 2:i32
+infer %1
+
+
+; function: $loop-6
+
+; start LHS (in $loop-6)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-6)
+%0:i32 = var
+%1 = add %0, 2:i32
+infer %1
+
+
+; function: $loop-7
+
+; start LHS (in $loop-7)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-7)
+%0:i32 = var
+%1 = add %0, 5:i32
+infer %1
+
+
+; function: $loop-8
+
+; start LHS (in $loop-8)
+%0 = add 1:i32, 4:i32
+infer %0
+
+
+; start LHS (in $loop-8)
+%0:i32 = var
+%1 = sub 1:i32, %0
+infer %1
+
+
+; start LHS (in $loop-8)
+%0 = add 1:i32, 4:i32
+%1:i32 = var
+%2 = sub 1:i32, %1
+%3 = mul %0, %2
+infer %3
+
+
+; function: $loop-9
+
+; start LHS (in $loop-9)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; function: $loop-10
+
+; start LHS (in $loop-10)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; function: $loop-multicond-1
+
+; start LHS (in $loop-multicond-1)
+%0 = ne 6:i32, 0:i32
+infer %0
+
+
+; start LHS (in $loop-multicond-1)
+%0 = ne 6:i32, 0:i32
+%1 = select %0, 4:i32, 5:i32
+infer %1
+
+
+; function: $loop-multicond-2
+
+; start LHS (in $loop-multicond-2)
+%0:i32 = var
+%1 = add %0, 4:i32
+infer %1
+
+
+; start LHS (in $loop-multicond-2)
+%0:i32 = var
+%1 = add %0, 5:i32
+infer %1
+
+
+; start LHS (in $loop-multicond-2)
+%0 = add 3:i32, 6:i32
+infer %0
+
+
+; start LHS (in $loop-multicond-2)
+%0 = add 3:i32, 6:i32
+%1 = ne %0, 0:i32
+infer %1
+
+
+; start LHS (in $loop-multicond-2)
+%0 = add 3:i32, 6:i32
+%1 = ne %0, 0:i32
+%2:i32 = var
+%3:i32 = var
+%4 = select %1, %2, %3
+infer %4
+
+
+; function: $loop-block-1
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = add %0, 4:i32
+infer %1
+
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = add %0, 5:i32
+infer %1
+
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = add %0, 6:i32
+infer %1
+
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = ne %0, 0:i32
+infer %1
+
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = ne %0, 0:i32
+%2:i32 = var
+%3 = block 2
+%4:i32 = var
+%5:i32 = var
+%6 = phi %3, %4, %5
+%7 = select %1, %2, %6
+infer %7
+
+
+; function: $loop-block-2
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = add %0, 4:i32
+infer %1
+
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = add %0, 5:i32
+infer %1
+
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = add %0, 6:i32
+infer %1
+
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = ne %0, 0:i32
+infer %1
+
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = ne %0, 0:i32
+%2:i32 = var
+%3 = block 2
+%4:i32 = var
+%5:i32 = var
+%6 = phi %3, %4, %5
+%7 = select %1, %2, %6
+infer %7
+
+
+; function: $bad-phi-type
+
+; function: $loop-unreachable
+
+; function: $phi-value-turns-bad
+
+; start LHS (in $phi-value-turns-bad)
+%0:i32 = var
+%1 = ctlz %0
+%2 = eq %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; function: $multi-use
+
+; start LHS (in $multi-use)
+%0:i32 = var
+%1 = add %0, 1:i32
+infer %1
+
+
+; start LHS (in $multi-use)
+%0:i32 = var
+%1 = add %0, %0
+infer %1
+
+
+; function: $multi-use-2
+
+; start LHS (in $multi-use-2)
+%0:i32 = var
+%1 = add %0, 1:i32
+infer %1
+
+
+; start LHS (in $multi-use-2)
+%0:i32 = var
+%1 = mul %0, 2:i32
+infer %1
+
+
+; start LHS (in $multi-use-2)
+%0:i32 = var
+%1 = mul %0, 2:i32
+%2 = sub %1, %0
+infer %2
+
+
+; function: $many-single-uses-with-param
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = mul 10:i32, %0
+infer %1
+
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = cttz %0
+infer %1
+
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = cttz %0
+%2 = sub %1, 20:i32
+infer %2
+
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = mul 10:i32, %0
+%2 = cttz %0
+%3 = sub %2, 20:i32
+%4 = add %1, %3
+infer %4
+
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = mul 10:i32, %0
+%2 = cttz %0
+%3 = sub %2, 20:i32
+%4 = add %1, %3
+%5 = eq %4, 0:i32
+infer %5
+
+
+; function: $55
+
+; start LHS (in $55)
+%0:i32 = var
+%1 = add %0, -7:i32
+infer %1
+
+
+; start LHS (in $55)
+%0:i32 = var
+%1 = eq %0, 0:i32
+%2 = ne %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; start LHS (in $55)
+%0:i32 = var
+%1:i32 = var
+%2 = ne %0, %1
+%3 = ne %1, 0:i32
+pc %3 1:i1
+infer %2
+
+
+; function: $multiple-uses-to-non-expression
+
+; start LHS (in $multiple-uses-to-non-expression)
+%0:i32 = var
+%1 = add %0, 10:i32
+infer %1
+
+
+; start LHS (in $multiple-uses-to-non-expression)
+%0:i32 = var
+%1 = add %0, 20:i32
+infer %1
+
+
+; function: $nested-phi-forwarding
+
+; start LHS (in $nested-phi-forwarding)
+%0 = block 2
+%1:i32 = var
+%2 = block 2
+%3 = block 2
+%4 = phi %3, %1, 1:i32
+%5 = phi %2, %1, %4
+%6 = phi %0, %1, %5
+%7 = or 1:i32, %6
+infer %7
+
+
+; function: $zext-numGets
+
+; start LHS (in $zext-numGets)
+%0:i32 = var
+%1 = eq %0, 0:i32
+infer %1
+
+
+; start LHS (in $zext-numGets)
+%0 = block 2
+%1:i32 = var
+%2 = eq %1, 0:i32
+%3:i32 = zext %2
+%4 = phi %0, 1:i32, %3
+%5 = cttz %4
+infer %5
+
+
+; function: $zext-numGets-hasAnotherUse
+
+; start LHS (in $zext-numGets-hasAnotherUse)
+%0:i32 = var
+%1 = eq %0, 0:i32
+infer %1
+
+
+; start LHS (in $zext-numGets-hasAnotherUse)
+%0 = block 2
+%1:i32 = var
+%2 = eq %1, 0:i32
+%3:i32 = zext %2
+%4 = phi %0, 1:i32, %3
+%5 = cttz %4
+infer %5
+
+
+; function: $flipped-needs-right-origin
+
+; start LHS (in $flipped-needs-right-origin)
+%0 = block 2
+%1 = phi %0, 0:i32, 2:i32
+%2 = add %1, 4:i32
+infer %2
+
+
+; start LHS (in $flipped-needs-right-origin)
+%0 = block 2
+%1 = phi %0, 0:i32, 2:i32
+%2 = add %1, 4:i32
+%3 = sle %2, 3:i32
+infer %3
+
+
+; function: $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN
+
+; start LHS (in $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN)
+%0:i32 = var
+%1 = ule 1:i32, %0
+infer %1
+
+
+; start LHS (in $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN)
+%0:i32 = var
+%1:i32 = zext %0
+%2 = sub 4:i32, %1
+infer %2
+
+
+; function: $loop-of-set-connections
+
+; start LHS (in $loop-of-set-connections)
+%0 = add 0:i32, 1:i32
+%1 = ne 0:i32, 0:i32
+pc %1 1:i1
+infer %0
+
+
+; function: $conditions-in-conditions
+
+; start LHS (in $conditions-in-conditions)
+%0 = sub 0:i32, 1:i32
+%1 = ne 0:i32, 0:i32
+pc %1 1:i1
+infer %0
+
+
+; start LHS (in $conditions-in-conditions)
+%0 = block 2
+%1 = block 2
+%2 = phi %1, 0:i32, 1:i32
+%3 = phi %0, %2, 1:i32
+%4 = add %3, 16:i32
+%5 = ne 0:i32, 0:i32
+blockpc %1 0 %5 1:i1
+%6 = eq 0:i32, 0:i32
+blockpc %1 1 %6 1:i1
+%7:i32 = var
+%8 = phi %1, 1:i32, %7
+%9 = ne %8, 0:i32
+blockpc %0 0 %9 1:i1
+%10 = eq %8, 0:i32
+blockpc %0 1 %10 1:i1
+infer %4
+
+(module
+ (type $0 (func (param i64 i64 i64) (result i32)))
+ (type $1 (func (param i32) (result i32)))
+ (type $2 (func))
+ (type $3 (func (param i32)))
+ (type $4 (func (param i32 i32)))
+ (type $5 (func (result i32)))
+ (type $6 (func (param i32 i32) (result i32)))
+ (type $7 (func (result f64)))
+ (type $8 (func (param i32 i32 i32 i32)))
+ (type $9 (func (param i64 i64 i64) (result i64)))
+ (type $10 (func (param i32 i32 i32) (result i32)))
+ (type $11 (func (param i64 i64 i32 f32)))
+ (type $12 (func (param i32 i32 i32 i32 i32) (result i32)))
+ (memory $0 (shared 1 1))
+ (export "replaced-print-internal" (func $55))
+ (func $figure-1a (; 0 ;) (type $0) (param $a i64) (param $x i64) (param $y i64) (result i32)
+ (local $i i32)
+ (local $j i32)
+ (local $r i32)
+ (local $6 i64)
+ (local $7 i64)
+ (local $8 i32)
+ (local $9 i64)
+ (local $10 i64)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $12
+ (i64.eq
+ (get_local $a)
+ (get_local $x)
+ )
+ )
+ (set_local $13
+ (i64.ne
+ (get_local $a)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (i32.and
+ (get_local $12)
+ (get_local $13)
+ )
+ )
+ (return
+ (get_local $15)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $figure-1b (; 1 ;) (type $0) (param $a i64) (param $x i64) (param $y i64) (result i32)
+ (local $i i32)
+ (local $j i32)
+ (local $r i32)
+ (local $6 i64)
+ (local $7 i64)
+ (local $8 i32)
+ (local $9 i64)
+ (local $10 i64)
+ (local $11 i32)
+ (local $12 i64)
+ (local $13 i64)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (local $18 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $8
+ (i64.lt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (if
+ (get_local $8)
+ (block
+ (block $block
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (i64.eq
+ (get_local $a)
+ (get_local $x)
+ )
+ )
+ (set_local $16
+ (i64.ne
+ (get_local $a)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $18
+ (i32.and
+ (get_local $15)
+ (get_local $16)
+ )
+ )
+ (return
+ (get_local $18)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func $figure-3-if (; 2 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (block
+ (nop)
+ (set_local $2
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (if
+ (get_local $2)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $9)
+ )
+ )
+ (func $flips (; 3 ;) (type $2)
+ (local $x i32)
+ (local $y i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.ge_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.ge_u
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.gt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.gt_u
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (func $various-conditions-1 (; 4 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $various-conditions-2 (; 5 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (block
+ (nop)
+ (set_local $2
+ (i32.lt_s
+ (get_local $x)
+ (i32.const 0)
+ )
+ )
+ (if
+ (get_local $2)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.sub
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $various-conditions-3 (; 6 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (block
+ (set_local $1
+ (i32.reinterpret/f32
+ (f32.const 0)
+ )
+ )
+ (if
+ (get_local $1)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.sub
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $various-conditions-4 (; 7 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (block
+ (unreachable)
+ (if
+ (unreachable)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func $unaries (; 8 ;) (type $4) (param $x i32) (param $y i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (nop)
+ (set_local $3
+ (i32.eqz
+ (get_local $x)
+ )
+ )
+ (if
+ (get_local $3)
+ (block
+ (nop)
+ (set_local $5
+ (i32.ctz
+ (get_local $y)
+ )
+ )
+ (nop)
+ (set_local $7
+ (i32.clz
+ (get_local $x)
+ )
+ )
+ (nop)
+ (set_local $9
+ (i32.popcnt
+ (get_local $y)
+ )
+ )
+ (set_local $10
+ (i32.sub
+ (get_local $7)
+ (get_local $9)
+ )
+ )
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $5)
+ (get_local $10)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $unary-condition (; 9 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (block
+ (nop)
+ (set_local $2
+ (i32.gt_u
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $3
+ (i32.ctz
+ (get_local $2)
+ )
+ )
+ (if
+ (get_local $3)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $unary-condition-2 (; 10 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (block
+ (nop)
+ (set_local $2
+ (i32.gt_u
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $3
+ (i32.eqz
+ (get_local $2)
+ )
+ )
+ (if
+ (get_local $3)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $if-else-cond (; 11 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (block
+ (nop)
+ (set_local $2
+ (i32.lt_s
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (if
+ (get_local $2)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $9)
+ )
+ )
+ (func $trivial-ret (; 12 ;) (type $5) (result i32)
+ (local $0 i32)
+ (set_local $0
+ (i32.add
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+ (func $trivial-const (; 13 ;) (type $5) (result i32)
+ (return
+ (i32.const 0)
+ )
+ )
+ (func $trivial-const-block (; 14 ;) (type $5) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (block
+ (nop)
+ (nop)
+ )
+ (set_local $1
+ (i32.const 0)
+ )
+ (return
+ (get_local $1)
+ )
+ )
+ (func $bad-phi-value (; 15 ;) (type $5) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (block
+ (if
+ (i32.const 1)
+ (block
+ (nop)
+ (set_local $1
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ )
+ (set_local $1
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (if
+ (get_local $1)
+ (set_local $3
+ (i32.const 0)
+ )
+ (set_local $3
+ (i32.const 1)
+ )
+ )
+ )
+ (nop)
+ (return
+ (get_local $3)
+ )
+ )
+ (func $bad-phi-value-2 (; 16 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block
+ (if
+ (i32.const 1)
+ (block
+ (nop)
+ (set_local $2
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ )
+ (set_local $2
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (if
+ (get_local $2)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $x)
+ )
+ )
+ (func $select (; 17 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (set_local $1
+ (select
+ (i32.const 1)
+ (i32.const 2)
+ (i32.const 3)
+ )
+ )
+ (return
+ (get_local $1)
+ )
+ (unreachable)
+ )
+ (func $select-2 (; 18 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (nop)
+ (nop)
+ (set_local $4
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (set_local $6
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (set_local $8
+ (i32.add
+ (i32.const 2)
+ (get_local $y)
+ )
+ )
+ (set_local $9
+ (select
+ (get_local $4)
+ (get_local $6)
+ (get_local $8)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (func $block-phi-1 (; 19 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (block $out
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $y)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $10
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (return
+ (get_local $10)
+ )
+ )
+ (func $block-phi-2 (; 20 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block $out
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $y)
+ )
+ (nop)
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $6
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (return
+ (get_local $6)
+ )
+ )
+ (func $zero_init-phi-bad_type (; 21 ;) (type $7) (result f64)
+ (local $x f64)
+ (local $1 f64)
+ (local $2 f64)
+ (local $3 f64)
+ (block
+ (if
+ (i32.const 0)
+ (block
+ (set_local $x
+ (f64.const 1)
+ )
+ (nop)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $x)
+ )
+ )
+ (func $phi-bad-type (; 22 ;) (type $7) (result f64)
+ (local $0 f64)
+ (local $1 f64)
+ (local $2 f64)
+ (local $3 f64)
+ (block $label$1
+ (if
+ (i32.const 0)
+ (set_local $0
+ (f64.const 0)
+ )
+ (set_local $0
+ (f64.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $0)
+ )
+ )
+ (func $phi-one-side-i1 (; 23 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $i i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (block
+ (block
+ (nop)
+ (nop)
+ (set_local $5
+ (i32.le_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (if
+ (get_local $5)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $i
+ (i32.eq
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $i
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $i)
+ )
+ )
+ (func $call (; 24 ;) (type $5) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (set_local $0
+ (call $call)
+ )
+ (set_local $1
+ (call $call)
+ )
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (set_local $3
+ (call $call)
+ )
+ (set_local $4
+ (i32.add
+ (i32.const 10)
+ (get_local $3)
+ )
+ )
+ (set_local $5
+ (i32.mul
+ (get_local $2)
+ (get_local $4)
+ )
+ )
+ (return
+ (get_local $5)
+ )
+ (unreachable)
+ )
+ (func $in-unreachable-1 (; 25 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $5)
+ )
+ )
+ (func $in-unreachable-2 (; 26 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (block
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $4)
+ )
+ )
+ (func $in-unreachable-3 (; 27 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block $out
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (br $out)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $5)
+ )
+ )
+ (func $in-unreachable-4 (; 28 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block $out
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (br_table $out $out $out
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $5)
+ )
+ )
+ (func $in-unreachable-br_if (; 29 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (block
+ (block $out
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $x)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $6)
+ )
+ )
+ (func $in-unreachable-big (; 30 ;) (type $8) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (block
+ (block $label$1
+ (block $label$2
+ (block $label$3
+ (block
+ (nop)
+ (if
+ (get_local $2)
+ (block
+ (block
+ (nop)
+ (if
+ (get_local $0)
+ (block
+ (block $block
+ (set_local $1
+ (i32.const -8531)
+ )
+ (nop)
+ (br $label$3)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (block $block3
+ (set_local $1
+ (i32.const -8531)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ )
+ )
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ (br $label$2)
+ (unreachable)
+ )
+ (nop)
+ (set_local $6
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ (drop
+ (get_local $6)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (i32.store16
+ (i32.const 1)
+ (get_local $1)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (i32.store16
+ (i32.const 0)
+ (i32.const -8531)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (func $in-unreachable-operations (; 31 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (block $block
+ (unreachable)
+ (unreachable)
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $merge-with-one-less (; 32 ;) (type $1) (param $var$0 i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block $label$1
+ (block $label$2
+ (block $label$3
+ (block $label$4
+ (block $label$5
+ (set_local $1
+ (i32.load
+ (i32.const 1)
+ )
+ )
+ (br_table $label$5 $label$4 $label$3 $label$2
+ (get_local $1)
+ )
+ (unreachable)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (nop)
+ (set_local $var$0
+ (i32.const 8)
+ )
+ (nop)
+ (set_local $3
+ (i32.load
+ (get_local $var$0)
+ )
+ )
+ (f64.store
+ (get_local $3)
+ (f64.const 0)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (i32.store
+ (get_local $var$0)
+ (i32.const 16)
+ )
+ (nop)
+ (nop)
+ )
+ (set_local $6
+ (i32.const 1)
+ )
+ (return
+ (get_local $6)
+ )
+ )
+ (func $deep (; 33 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (local $18 i32)
+ (local $19 i32)
+ (local $20 i32)
+ (local $21 i32)
+ (local $22 i32)
+ (local $23 i32)
+ (local $24 i32)
+ (local $25 i32)
+ (local $26 i32)
+ (local $27 i32)
+ (local $28 i32)
+ (local $29 i32)
+ (local $30 i32)
+ (local $31 i32)
+ (local $32 i32)
+ (local $33 i32)
+ (local $34 i32)
+ (local $35 i32)
+ (local $36 i32)
+ (local $37 i32)
+ (local $38 i32)
+ (local $39 i32)
+ (local $40 i32)
+ (local $41 i32)
+ (local $42 i32)
+ (local $43 i32)
+ (local $44 i32)
+ (local $45 i32)
+ (local $46 i32)
+ (local $47 i32)
+ (local $48 i32)
+ (local $49 i32)
+ (local $50 i32)
+ (local $51 i32)
+ (local $52 i32)
+ (local $53 i32)
+ (local $54 i32)
+ (local $55 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $x)
+ )
+ )
+ (func $two-pcs (; 34 ;) (type $9) (param $x i64) (param $y i64) (param $t i64) (result i64)
+ (local $3 i64)
+ (local $4 i64)
+ (local $5 i32)
+ (local $6 i64)
+ (local $7 i32)
+ (local $8 i64)
+ (local $9 i64)
+ (local $10 i64)
+ (local $11 i64)
+ (local $12 i64)
+ (local $13 i64)
+ (local $14 i64)
+ (local $15 i32)
+ (local $16 i64)
+ (local $17 i64)
+ (local $18 i64)
+ (local $19 i64)
+ (local $20 i64)
+ (local $21 i64)
+ (local $22 i64)
+ (local $23 i64)
+ (local $24 i64)
+ (block
+ (block
+ (nop)
+ (nop)
+ (set_local $5
+ (i64.lt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (if
+ (get_local $5)
+ (block
+ (block
+ (nop)
+ (set_local $7
+ (i64.eqz
+ (get_local $x)
+ )
+ )
+ (if
+ (get_local $7)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $t
+ (i64.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $t
+ (i64.sub
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (block
+ (block
+ (nop)
+ (set_local $15
+ (i64.eqz
+ (get_local $y)
+ )
+ )
+ (if
+ (get_local $15)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $t
+ (i64.mul
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $t
+ (i64.div_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $t)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $23)
+ )
+ )
+ (func $loop-1 (; 35 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $4
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $4)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $5)
+ )
+ )
+ (func $loop-2 (; 36 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $9)
+ )
+ )
+ (func $loop-3 (; 37 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $10)
+ )
+ )
+ (func $loop-4 (; 38 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $7
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $8)
+ )
+ )
+ (func $loop-5 (; 39 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $7
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $8)
+ )
+ )
+ (func $loop-6 (; 40 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $y
+ (get_local $y)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $9)
+ )
+ )
+ (func $loop-7 (; 41 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (set_local $y
+ (i32.const 5)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $7
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $8)
+ )
+ )
+ (func $loop-8 (; 42 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $z i32)
+ (local $w i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (set_local $z
+ (get_local $x)
+ )
+ (nop)
+ (nop)
+ (set_local $w
+ (get_local $y)
+ )
+ (nop)
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 4)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $12
+ (i32.sub
+ (get_local $z)
+ (get_local $w)
+ )
+ )
+ (set_local $13
+ (i32.mul
+ (get_local $9)
+ (get_local $12)
+ )
+ )
+ (return
+ (get_local $13)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $14)
+ )
+ )
+ (func $loop-9 (; 43 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $t i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (set_local $t
+ (get_local $x)
+ )
+ (nop)
+ (nop)
+ (set_local $x
+ (get_local $y)
+ )
+ (nop)
+ (nop)
+ (set_local $y
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $10)
+ )
+ )
+ (func $loop-10 (; 44 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $t i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 1)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (set_local $t
+ (get_local $x)
+ )
+ (nop)
+ (nop)
+ (set_local $x
+ (get_local $y)
+ )
+ (nop)
+ (nop)
+ (set_local $y
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $10)
+ )
+ )
+ (func $loop-multicond-1 (; 45 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 3)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (set_local $x
+ (i32.const 4)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $t)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 5)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $t)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 6)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (select
+ (get_local $x)
+ (get_local $y)
+ (get_local $z)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $10)
+ )
+ )
+ (func $loop-multicond-2 (; 46 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 3)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 5)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $z
+ (i32.add
+ (get_local $z)
+ (i32.const 6)
+ )
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (select
+ (get_local $x)
+ (get_local $y)
+ (get_local $z)
+ )
+ )
+ (return
+ (get_local $15)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $loop-block-1 (; 47 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 3)
+ )
+ (nop)
+ (loop $loopy
+ (block $out
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 5)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $z
+ (i32.add
+ (get_local $z)
+ (i32.const 6)
+ )
+ )
+ (nop)
+ (br $loopy)
+ (unreachable)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (select
+ (get_local $x)
+ (get_local $y)
+ (get_local $z)
+ )
+ )
+ (return
+ (get_local $15)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $loop-block-2 (; 48 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 3)
+ )
+ (nop)
+ (block $out
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 5)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $z
+ (i32.add
+ (get_local $z)
+ (i32.const 6)
+ )
+ )
+ (nop)
+ (br $loopy)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (select
+ (get_local $x)
+ (get_local $y)
+ (get_local $z)
+ )
+ )
+ (return
+ (get_local $15)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $bad-phi-type (; 49 ;) (type $11) (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 f64)
+ (local $9 f64)
+ (local $10 f64)
+ (local $11 f64)
+ (block
+ (nop)
+ (if
+ (get_local $var$2)
+ (block
+ (loop $label$2
+ (block
+ (block
+ (block $label$3
+ (if
+ (i32.const 0)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $6
+ (i32.const 0)
+ )
+ (if
+ (get_local $6)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $label$2
+ (get_local $var$2)
+ )
+ (nop)
+ (nop)
+ )
+ (nop)
+ (set_local $10
+ (f64.const 0)
+ )
+ )
+ (nop)
+ (drop
+ (get_local $10)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $loop-unreachable (; 50 ;) (type $2)
+ (local $var$0 i32)
+ (local $var$1 f64)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 f64)
+ (local $12 f64)
+ (local $13 f64)
+ (loop $label$1
+ (block
+ (block $label$2
+ (block $label$3
+ (block $label$4
+ (if
+ (i32.const 1337)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (set_local $var$0
+ (get_local $var$0)
+ )
+ (nop)
+ (loop $label$6
+ (block $label$7
+ (nop)
+ (set_local $6
+ (get_local $var$0)
+ )
+ (br_if $label$7
+ (i32.const 65535)
+ )
+ (nop)
+ (drop
+ (get_local $6)
+ )
+ (nop)
+ (nop)
+ (set_local $6
+ (get_local $var$0)
+ )
+ (br_if $label$7
+ (i32.const 0)
+ )
+ (nop)
+ (drop
+ (get_local $6)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (br_if $label$6
+ (get_local $6)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (set_local $var$1
+ (get_local $var$1)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $phi-value-turns-bad (; 51 ;) (type $7) (result f64)
+ (local $var$0 i32)
+ (local $var$1 i32)
+ (local $var$2 f32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 f32)
+ (local $13 f32)
+ (local $14 f32)
+ (local $15 f32)
+ (local $16 f64)
+ (local $17 f64)
+ (block
+ (block
+ (nop)
+ (set_local $var$0
+ (i32.atomic.rmw16_u.sub offset=22
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (if
+ (get_local $var$0)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ (block
+ (block $block
+ (block
+ (loop $label$3
+ (block $label$4
+ (nop)
+ (set_local $6
+ (get_local $var$0)
+ )
+ (br_if $label$4
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (set_local $6
+ (i32.clz
+ (get_local $6)
+ )
+ )
+ )
+ (nop)
+ (drop
+ (get_local $6)
+ )
+ )
+ (nop)
+ (if
+ (get_local $6)
+ (nop)
+ )
+ )
+ (nop)
+ (nop)
+ )
+ (nop)
+ (set_local $14
+ (f32.const 1)
+ )
+ )
+ )
+ )
+ (nop)
+ (drop
+ (get_local $14)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $multi-use (; 52 ;) (type $1) (param $x i32) (result i32)
+ (local $temp i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $temp
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $8
+ (i32.add
+ (get_local $temp)
+ (get_local $temp)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ )
+ (func $multi-use-2 (; 53 ;) (type $1) (param $x i32) (result i32)
+ (local $temp i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $temp
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $temp)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $10
+ (i32.sub
+ (get_local $x)
+ (get_local $temp)
+ )
+ )
+ (return
+ (get_local $10)
+ )
+ )
+ (func $many-single-uses-with-param (; 54 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (nop)
+ (set_local $2
+ (i32.mul
+ (i32.const 10)
+ (get_local $x)
+ )
+ )
+ (nop)
+ (set_local $4
+ (i32.ctz
+ (get_local $x)
+ )
+ )
+ (set_local $5
+ (i32.sub
+ (get_local $4)
+ (i32.const 20)
+ )
+ )
+ (set_local $6
+ (i32.add
+ (get_local $2)
+ (get_local $5)
+ )
+ )
+ (set_local $7
+ (i32.eqz
+ (get_local $6)
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ (unreachable)
+ )
+ (func $55 (; 55 ;) (type $3) (param $var$0 i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (local $var$3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $var$0
+ (i32.add
+ (get_local $var$0)
+ (i32.const -7)
+ )
+ )
+ (nop)
+ (if
+ (get_local $var$0)
+ (block
+ (block $label$2
+ (block $label$3
+ (nop)
+ (set_local $var$1
+ (get_local $var$0)
+ )
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.const 12)
+ )
+ (br_if $label$3
+ (get_local $8)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (set_local $10
+ (i32.eqz
+ (get_local $var$1)
+ )
+ )
+ (br_if $label$2
+ (get_local $10)
+ )
+ (nop)
+ (block
+ (set_local $11
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (set_local $13
+ (i32.ne
+ (get_local $11)
+ (get_local $var$0)
+ )
+ )
+ (if
+ (get_local $13)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $multiple-uses-to-non-expression (; 56 ;) (type $3) (param $x i32)
+ (local $temp i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 10)
+ )
+ )
+ (nop)
+ (nop)
+ (i32.store
+ (i32.const 1)
+ (get_local $x)
+ )
+ (nop)
+ (nop)
+ (set_local $6
+ (i32.add
+ (get_local $x)
+ (i32.const 20)
+ )
+ )
+ (i32.store
+ (i32.const 2)
+ (get_local $6)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (func $nested-phi-forwarding (; 57 ;) (type $1) (param $var$0 i32) (result i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (block $label$1
+ (block $label$2
+ (loop $label$3
+ (block
+ (block $label$4
+ (block $label$5
+ (block $label$6
+ (block $label$7
+ (block $label$8
+ (nop)
+ (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4
+ (get_local $var$0)
+ )
+ (unreachable)
+ )
+ (nop)
+ (set_local $var$1
+ (i32.const 1)
+ )
+ (nop)
+ )
+ (nop)
+ (br $label$4)
+ (unreachable)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (nop)
+ (set_local $var$2
+ (i32.const 1)
+ )
+ (nop)
+ (br_if $label$3
+ (get_local $var$2)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (block $label$9
+ (nop)
+ (set_local $6
+ (i32.or
+ (i32.const 1)
+ (get_local $var$1)
+ )
+ )
+ (br_if $label$9
+ (get_local $6)
+ )
+ (nop)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (i32.store offset=176
+ (i32.const 0)
+ (get_local $var$2)
+ )
+ (nop)
+ (nop)
+ )
+ (set_local $9
+ (i32.const 0)
+ )
+ (return
+ (get_local $9)
+ )
+ )
+ (func $zext-numGets (; 58 ;) (type $4) (param $var$0 i32) (param $var$1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (block
+ (block $label$1
+ (set_local $2
+ (i32.load
+ (i32.const -8)
+ )
+ )
+ (set_local $3
+ (i32.const 1)
+ )
+ (br_if $label$1
+ (get_local $2)
+ )
+ (nop)
+ (drop
+ (get_local $3)
+ )
+ (nop)
+ (set_local $5
+ (i32.load
+ (i32.const -16)
+ )
+ )
+ (nop)
+ (set_local $3
+ (i32.eqz
+ (get_local $5)
+ )
+ )
+ )
+ (nop)
+ (set_local $8
+ (i32.ctz
+ (get_local $3)
+ )
+ )
+ (if
+ (get_local $8)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $zext-numGets-hasAnotherUse (; 59 ;) (type $4) (param $var$0 i32) (param $var$1 i32)
+ (local $temp i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (block $label$1
+ (set_local $3
+ (i32.load
+ (i32.const -8)
+ )
+ )
+ (set_local $4
+ (i32.const 1)
+ )
+ (br_if $label$1
+ (get_local $3)
+ )
+ (nop)
+ (drop
+ (get_local $4)
+ )
+ (nop)
+ (set_local $6
+ (i32.load
+ (i32.const -16)
+ )
+ )
+ (nop)
+ (set_local $temp
+ (i32.eqz
+ (get_local $6)
+ )
+ )
+ (nop)
+ (nop)
+ (drop
+ (get_local $temp)
+ )
+ (nop)
+ (nop)
+ (set_local $4
+ (get_local $temp)
+ )
+ )
+ (nop)
+ (set_local $11
+ (i32.ctz
+ (get_local $4)
+ )
+ )
+ (if
+ (get_local $11)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $flipped-needs-right-origin (; 60 ;) (type $1) (param $var$0 i32) (result i32)
+ (local $var$1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (block
+ (block $label$1
+ (set_local $2
+ (i32.load
+ (i32.const 1)
+ )
+ )
+ (br_if $label$1
+ (get_local $2)
+ )
+ (nop)
+ (set_local $var$1
+ (i32.const 2)
+ )
+ (nop)
+ )
+ (nop)
+ (block
+ (nop)
+ (set_local $4
+ (i32.add
+ (get_local $var$1)
+ (i32.const 4)
+ )
+ )
+ (set_local $5
+ (i32.gt_s
+ (i32.const 3)
+ (get_local $4)
+ )
+ )
+ (if
+ (get_local $5)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ )
+ (set_local $7
+ (i32.const 5)
+ )
+ (return
+ (get_local $7)
+ )
+ )
+ (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (; 61 ;) (type $10) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $var$1
+ (i32.gt_u
+ (get_local $var$1)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (i32.store
+ (get_local $var$1)
+ (i32.const 2)
+ )
+ (nop)
+ (nop)
+ (set_local $7
+ (i32.sub
+ (i32.const 4)
+ (get_local $var$1)
+ )
+ )
+ (i32.store offset=8
+ (i32.const 3)
+ (get_local $7)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $8)
+ )
+ )
+ (func $loop-of-set-connections (; 62 ;) (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (loop $label$1
+ (block
+ (if
+ (i32.const 0)
+ (block
+ (block $block
+ (nop)
+ (set_local $var$2
+ (i32.add
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $var$2
+ (get_local $var$2)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $conditions-in-conditions (; 63 ;) (type $10) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
+ (local $var$3 i32)
+ (local $var$4 i32)
+ (local $var$5 i32)
+ (local $var$6 i32)
+ (local $var$7 i32)
+ (local $var$8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (block
+ (set_local $var$1
+ (i32.const 1)
+ )
+ (nop)
+ (if
+ (i32.const 0)
+ (block
+ (loop $label$2
+ (block
+ (block
+ (nop)
+ (if
+ (get_local $var$1)
+ (nop)
+ )
+ )
+ (nop)
+ (set_local $var$3
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (set_local $var$1
+ (i32.sub
+ (i32.const 0)
+ (get_local $var$3)
+ )
+ )
+ (nop)
+ (br_if $label$2
+ (i32.const 0)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ )
+ (nop)
+ (block
+ (nop)
+ (if
+ (get_local $var$1)
+ (block
+ (set_local $var$3
+ (i32.const 1)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $14
+ (i32.add
+ (get_local $var$3)
+ (i32.const 16)
+ )
+ )
+ (i32.store
+ (i32.const 8)
+ (get_local $14)
+ )
+ (nop)
+ (i32.store
+ (i32.const 8)
+ (i32.const 64)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $15)
+ )
+ )
+)
diff --git a/test/passes/flatten_simplify-locals-nonesting_souperify-single-use.wast b/test/passes/flatten_simplify-locals-nonesting_souperify-single-use.wast
new file mode 100644
index 000000000..92941ca4c
--- /dev/null
+++ b/test/passes/flatten_simplify-locals-nonesting_souperify-single-use.wast
@@ -0,0 +1,1248 @@
+(module
+ (memory $0 (shared 1 1))
+ ;; Figure 1a from the Souper paper https://arxiv.org/pdf/1711.04422.pdf
+ (func $figure-1a (param $a i64) (param $x i64) (param $y i64) (result i32)
+ (local $i i32)
+ (local $j i32)
+ (local $r i32)
+ (set_local $i
+ (i64.eq
+ (get_local $a)
+ (get_local $x)
+ )
+ )
+ (set_local $j
+ (i64.ne
+ (get_local $a)
+ (get_local $y)
+ )
+ )
+ (set_local $r
+ (i32.and
+ (get_local $i)
+ (get_local $j)
+ )
+ )
+ (return (get_local $r))
+ )
+ ;; Figure 1b, with a potential path condition
+ (func $figure-1b (param $a i64) (param $x i64) (param $y i64) (result i32)
+ (local $i i32)
+ (local $j i32)
+ (local $r i32)
+ (if
+ (i64.lt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ (block
+ (set_local $i
+ (i64.eq
+ (get_local $a)
+ (get_local $x)
+ )
+ )
+ (set_local $j
+ (i64.ne
+ (get_local $a)
+ (get_local $y)
+ )
+ )
+ (set_local $r
+ (i32.and
+ (get_local $i)
+ (get_local $j)
+ )
+ )
+ (return (get_local $r))
+ )
+ (unreachable)
+ )
+ )
+ ;; Figure 3, simplified to an if
+ (func $figure-3-if (param $x i32) (result i32)
+ (if
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ (return
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ )
+ ;; flipping of greater than/or equals ops, which are not in Souper IR
+ (func $flips
+ (local $x i32)
+ (local $y i32)
+ (set_local $x (i32.ge_s (get_local $x) (get_local $y)))
+ (set_local $x (i32.ge_u (get_local $x) (get_local $y)))
+ (set_local $x (i32.gt_s (get_local $x) (get_local $y)))
+ (set_local $x (i32.gt_u (get_local $x) (get_local $y)))
+ )
+ (func $various-conditions-1 (param $x i32)
+ (if
+ (get_local $x)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ )
+ )
+ (func $various-conditions-2 (param $x i32)
+ (if
+ (i32.lt_s
+ (get_local $x)
+ (i32.const 0)
+ )
+ (set_local $x
+ (i32.sub
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ )
+ (func $various-conditions-3 (param $x i32)
+ (if
+ (i32.reinterpret/f32 (f32.const 0))
+ (set_local $x
+ (i32.sub
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ )
+ )
+ (func $various-conditions-4 (param $x i32)
+ (if
+ (unreachable)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ )
+ )
+ (func $unaries (param $x i32) (param $y i32)
+ (if
+ (i32.eqz
+ (get_local $x)
+ )
+ (set_local $x
+ (i32.add
+ (i32.ctz
+ (get_local $y)
+ )
+ (i32.sub
+ (i32.clz
+ (get_local $x)
+ )
+ (i32.popcnt
+ (get_local $y)
+ )
+ )
+ )
+ )
+ )
+ )
+ (func $unary-condition (param $x i32)
+ (if
+ (i32.ctz
+ (i32.gt_u
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ )
+ (func $unary-condition-2 (param $x i32)
+ (if
+ (i32.eqz
+ (i32.gt_u
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ )
+ (func $if-else-cond (param $x i32) (result i32)
+ (if
+ (i32.lt_s
+ (get_local $x)
+ (i32.const 1)
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ (return
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ )
+ (func $trivial-ret (result i32)
+ (i32.add
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (func $trivial-const (result i32)
+ (i32.const 0)
+ )
+ (func $trivial-const-block (result i32)
+ (nop)
+ (i32.const 0)
+ )
+ (func $bad-phi-value (result i32)
+ (if (result i32)
+ (if (result i32)
+ (i32.const 1)
+ (i32.load
+ (i32.const 0)
+ )
+ (i32.const 0)
+ )
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (func $bad-phi-value-2 (param $x i32) (result i32)
+ (if
+ (if (result i32)
+ (i32.const 1)
+ (i32.load
+ (i32.const 0)
+ )
+ (i32.const 0)
+ )
+ (set_local $x (i32.const 1))
+ (set_local $x (i32.const 2))
+ )
+ (get_local $x)
+ )
+ (func $select (param $x i32) (result i32)
+ (return
+ (select
+ (i32.const 1)
+ (i32.const 2)
+ (i32.const 3)
+ )
+ )
+ )
+ (func $select-2 (param $x i32) (param $y i32) (result i32)
+ (return
+ (select
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ (i32.add
+ (i32.const 2)
+ (get_local $y)
+ )
+ )
+ )
+ )
+ (func $block-phi-1 (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (br_if $out (get_local $y))
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (func $block-phi-2 (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (set_local $x
+ (i32.const 1)
+ )
+ (br_if $out (get_local $y))
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (func $zero_init-phi-bad_type (result f64)
+ (local $x f64)
+ (if
+ (i32.const 0)
+ (set_local $x
+ (f64.const 1)
+ )
+ )
+ (get_local $x)
+ )
+ (func $phi-bad-type (result f64)
+ (block $label$1 (result f64)
+ (if (result f64)
+ (i32.const 0)
+ (f64.const 0)
+ (f64.const 1)
+ )
+ )
+ )
+ (func $phi-one-side-i1 (param $x i32) (param $y i32) (result i32)
+ (local $i i32)
+ (if
+ (i32.le_s
+ (get_local $x)
+ (get_local $y)
+ )
+ (set_local $i
+ (i32.eq
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (set_local $i
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ )
+ (get_local $i)
+ )
+ (func $call (result i32)
+ (return
+ (i32.mul
+ (i32.add
+ (call $call)
+ (call $call)
+ )
+ (i32.add
+ (i32.const 10)
+ (call $call)
+ )
+ )
+ )
+ )
+ (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32)
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (return (get_local $x))
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; no phi here!
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32)
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; no phi here!
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-3 (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (br $out)
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; no phi here!
+ (return
+ (get_local $x)
+ )
+ )
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-4 (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (br_table $out $out $out (i32.const 1))
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; no phi here!
+ (return
+ (get_local $x)
+ )
+ )
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-br_if (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (br_if $out
+ (get_local $x)
+ )
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; there *IS* a phi here since it was a br_if
+ (return
+ (get_local $x)
+ )
+ )
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-big (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+ (block $label$1
+ (block $label$2
+ (block $label$3
+ (if
+ (get_local $2)
+ (if
+ (get_local $0)
+ (block
+ (set_local $1
+ (i32.const -8531)
+ )
+ (br $label$3)
+ )
+ (block
+ (set_local $1
+ (i32.const -8531)
+ )
+ (br $label$1)
+ )
+ )
+ )
+ (br $label$2)
+ )
+ (drop
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ (br $label$1)
+ )
+ (i32.store16
+ (i32.const 1)
+ (get_local $1)
+ )
+ (unreachable)
+ )
+ (i32.store16
+ (i32.const 0)
+ (i32.const -8531)
+ )
+ )
+ (func $in-unreachable-operations (param $x i32) (param $y i32) (result i32)
+ (block
+ (unreachable)
+ (if
+ (get_local $x)
+ (set_local $x
+ (i32.const 1)
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ (return
+ (get_local $x)
+ )
+ )
+ )
+ (func $merge-with-one-less (param $var$0 i32) (result i32)
+ (block $label$1
+ (block $label$2
+ (block $label$3
+ (block $label$4
+ (block $label$5
+ (br_table $label$5 $label$4 $label$3 $label$2
+ (i32.load
+ (i32.const 1)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (br $label$1)
+ )
+ (f64.store
+ (i32.load
+ (tee_local $var$0
+ (i32.const 8)
+ )
+ )
+ (f64.const 0)
+ )
+ (br $label$1)
+ )
+ (unreachable)
+ )
+ (i32.store
+ (get_local $var$0)
+ (i32.const 16)
+ )
+ (i32.const 1)
+ )
+ (func $deep (param $x i32) (result i32)
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (get_local $x)
+ )
+ (func $two-pcs (param $x i64) (param $y i64) (result i64)
+ (param $t i64)
+ (if
+ (i64.lt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ (if
+ (i64.eqz
+ (get_local $x)
+ )
+ (set_local $t
+ (i64.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (set_local $t
+ (i64.sub
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ )
+ (if
+ (i64.eqz
+ (get_local $y)
+ )
+ (set_local $t
+ (i64.mul
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (set_local $t
+ (i64.div_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ )
+ )
+ (return (get_local $t))
+ )
+ (func $loop-1 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ )
+ ;; neither needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-2 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (i32.add (get_local $y) (i32.const 4)))
+ )
+ ;; neither needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-3 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (i32.add (get_local $y) (i32.const 4)))
+ (br_if $loopy (get_local $y))
+ )
+ ;; both needed
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-4 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (br_if $loopy (get_local $y))
+ )
+ ;; only x needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-5 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (i32.const 2)) ;; same value
+ (br_if $loopy (get_local $y))
+ )
+ ;; only x needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-6 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (get_local $y)) ;; same value
+ (br_if $loopy (get_local $y))
+ )
+ ;; only x needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-7 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (i32.const 5)) ;; different!
+ (br_if $loopy (get_local $y))
+ )
+ ;; y changed but we don't need a phi for it
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-8 (param $x i32) (param $y i32) (result i32)
+ (local $z i32)
+ (local $w i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $z (get_local $x))
+ (set_local $w (get_local $y))
+ (set_local $x (i32.const 1)) ;; same!
+ (set_local $y (i32.const 4)) ;; different!
+ (br_if $loopy (get_local $y))
+ )
+ ;; x is always 3, and y needs a phi.
+ ;; each is also copied to another local, which we need
+ ;; to handle properly
+ (return
+ (i32.mul
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ (i32.sub
+ (get_local $z)
+ (get_local $w)
+ )
+ )
+ )
+ )
+ (func $loop-9 (param $x i32) (param $y i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $t (get_local $x))
+ (set_local $x (get_local $y))
+ (set_local $y (get_local $t))
+ (br_if $loopy (get_local $t))
+ )
+ ;; x and y swapped, so both need phis
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-10 (param $x i32) (param $y i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 1))
+ (loop $loopy ;; we swap the values. but we need a deeper analysis to figure that out...
+ (set_local $t (get_local $x))
+ (set_local $x (get_local $y))
+ (set_local $y (get_local $t))
+ (br_if $loopy (get_local $t))
+ )
+ ;; x and y swapped, but the same constant was swapped
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-multicond-1 (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (set_local $z (i32.const 3))
+ (loop $loopy
+ (set_local $x (i32.const 4))
+ (br_if $loopy (get_local $t))
+ (set_local $y (i32.const 5))
+ (br_if $loopy (get_local $t))
+ (set_local $z (i32.const 6))
+ )
+ (return (select (get_local $x) (get_local $y) (get_local $z)))
+ )
+ (func $loop-multicond-2 (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (set_local $z (i32.const 3))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 4)))
+ (br_if $loopy (get_local $t))
+ (set_local $y (i32.add (get_local $y) (i32.const 5)))
+ (br_if $loopy (get_local $t))
+ (set_local $z (i32.add (get_local $z) (i32.const 6)))
+ )
+ (return (select (get_local $x) (get_local $y) (get_local $z)))
+ )
+ (func $loop-block-1 (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (set_local $z (i32.const 3))
+ (loop $loopy
+ (block $out
+ (set_local $x (i32.add (get_local $x) (i32.const 4)))
+ (br_if $out (get_local $t))
+ (set_local $y (i32.add (get_local $y) (i32.const 5)))
+ (br_if $out (get_local $t))
+ (set_local $z (i32.add (get_local $z) (i32.const 6)))
+ (br $loopy)
+ )
+ )
+ (return (select (get_local $x) (get_local $y) (get_local $z)))
+ )
+ (func $loop-block-2 (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (set_local $z (i32.const 3))
+ (block $out
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 4)))
+ (br_if $out (get_local $t))
+ (set_local $y (i32.add (get_local $y) (i32.const 5)))
+ (br_if $out (get_local $t))
+ (set_local $z (i32.add (get_local $z) (i32.const 6)))
+ (br $loopy)
+ )
+ )
+ (return (select (get_local $x) (get_local $y) (get_local $z)))
+ )
+ (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32)
+ (if
+ (get_local $var$2)
+ (drop
+ (loop $label$2 (result f64)
+ (if
+ (block $label$3 (result i32)
+ (if
+ (i32.const 0)
+ (unreachable)
+ )
+ (nop)
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ (br_if $label$2
+ (get_local $var$2)
+ )
+ (f64.const 0)
+ )
+ )
+ )
+ )
+ (func $loop-unreachable
+ (local $var$0 i32)
+ (local $var$1 f64)
+ (loop $label$1
+ (set_local $var$1
+ (block $label$2 (result f64)
+ (block $label$3
+ (set_local $var$0
+ (block $label$4 (result i32)
+ (if
+ (i32.const 1337)
+ (unreachable)
+ )
+ (get_local $var$0)
+ )
+ )
+ (loop $label$6
+ (br_if $label$6
+ (block $label$7 (result i32)
+ (drop
+ (br_if $label$7
+ (get_local $var$0)
+ (i32.const 65535)
+ )
+ )
+ (drop
+ (br_if $label$7
+ (get_local $var$0)
+ (i32.const 0)
+ )
+ )
+ (unreachable)
+ )
+ )
+ )
+ )
+ (get_local $var$1)
+ )
+ )
+ (br $label$1)
+ )
+ )
+ (func $phi-value-turns-bad (result f64)
+ (local $var$0 i32)
+ (local $var$1 i32)
+ (local $var$2 f32)
+ (set_local $var$2
+ (if (result f32)
+ (tee_local $var$0
+ (i32.atomic.rmw16_u.sub offset=22
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ (unreachable)
+ (block (result f32)
+ (if
+ (loop $label$3 (result i32)
+ (block $label$4 (result i32)
+ (i32.clz
+ (br_if $label$4
+ (get_local $var$0)
+ (i32.const 1)
+ )
+ )
+ )
+ )
+ (nop)
+ )
+ (f32.const 1)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func $multi-use (param $x i32) (result i32)
+ (local $temp i32)
+ (set_local $temp (i32.add (get_local $x) (i32.const 1)))
+ (i32.add (get_local $temp) (get_local $temp))
+ )
+ (func $multi-use-2 (param $x i32) (result i32)
+ (local $temp i32)
+ (set_local $temp (i32.add (get_local $x) (i32.const 1)))
+ (set_local $x (i32.mul (get-local $temp) (i32.const 2)))
+ (i32.sub (get_local $x) (get_local $temp))
+ )
+ (func $many-single-uses-with-param (param $x i32) (result i32)
+ (return
+ (i32.eqz
+ (i32.add
+ (i32.mul
+ (i32.const 10)
+ (get_local $x)
+ )
+ (i32.sub
+ (i32.ctz
+ (get_local $x)
+ )
+ (i32.const 20)
+ )
+ )
+ )
+ )
+ )
+ (func "replaced-print-internal" (param $var$0 i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (local $var$3 i32)
+ (if
+ (tee_local $var$0
+ (i32.add
+ (get_local $var$0)
+ (i32.const -7)
+ )
+ )
+ (block $label$2
+ (block $label$3
+ (set_local $var$1
+ (get_local $var$0)
+ )
+ (br_if $label$3
+ (tee_local $var$3
+ (i32.const 12)
+ )
+ )
+ (unreachable)
+ )
+ (br_if $label$2
+ (i32.eqz
+ (get_local $var$1)
+ )
+ )
+ (if
+ (i32.ne
+ (i32.load
+ (i32.const 0)
+ )
+ (get_local $var$0)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ )
+ )
+ (func $multiple-uses-to-non-expression (param $x i32)
+ (local $temp i32)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 10)
+ )
+ )
+ (i32.store
+ (i32.const 1)
+ (get_local $x) ;; x+10 has two uses!
+ )
+ (i32.store
+ (i32.const 2)
+ (i32.add
+ (get_local $x)
+ (i32.const 20)
+ )
+ )
+ )
+ (func $nested-phi-forwarding (param $var$0 i32) (result i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (block $label$1
+ (block $label$2
+ (loop $label$3
+ (block $label$4
+ (block $label$5
+ (block $label$6
+ (block $label$7
+ (block $label$8
+ (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4
+ (get_local $var$0)
+ )
+ )
+ (set_local $var$1
+ (i32.const 1)
+ )
+ )
+ (br $label$4)
+ )
+ (unreachable)
+ )
+ (br $label$1)
+ )
+ (br_if $label$3
+ (tee_local $var$2
+ (i32.const 1)
+ )
+ )
+ )
+ )
+ (block $label$9
+ (br_if $label$9
+ (i32.or
+ (i32.const 1)
+ (get_local $var$1)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (i32.store offset=176
+ (i32.const 0)
+ (get_local $var$2)
+ )
+ (i32.const 0)
+ )
+ (func $zext-numGets (param $var$0 i32) (param $var$1 i32)
+ (if
+ (i32.ctz
+ (block $label$1 (result i32)
+ (drop
+ (br_if $label$1
+ (i32.const 1)
+ (i32.load
+ (i32.const -8)
+ )
+ )
+ )
+ (i32.eqz
+ (i32.load
+ (i32.const -16)
+ )
+ )
+ )
+ )
+ (unreachable)
+ )
+ )
+ (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32)
+ (local $temp i32)
+ (if
+ (i32.ctz
+ (block $label$1 (result i32)
+ (drop
+ (br_if $label$1
+ (i32.const 1)
+ (i32.load
+ (i32.const -8)
+ )
+ )
+ )
+ (set_local $temp
+ (i32.eqz
+ (i32.load
+ (i32.const -16)
+ )
+ )
+ )
+ (drop
+ (get_local $temp)
+ )
+ (get_local $temp)
+ )
+ )
+ (unreachable)
+ )
+ )
+ (func $flipped-needs-right-origin (param $var$0 i32) (result i32)
+ (local $var$1 i32)
+ (block $label$1
+ (br_if $label$1
+ (i32.load
+ (i32.const 1)
+ )
+ )
+ (set_local $var$1
+ (i32.const 2)
+ )
+ )
+ (if
+ (i32.gt_s
+ (i32.const 3)
+ (i32.add
+ (get_local $var$1)
+ (i32.const 4)
+ )
+ )
+ (unreachable)
+ )
+ (i32.const 5)
+ )
+ (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
+ (i32.store
+ (tee_local $var$1
+ (i32.gt_u
+ (get_local $var$1)
+ (i32.const 1)
+ )
+ )
+ (i32.const 2)
+ )
+ (i32.store offset=8
+ (i32.const 3)
+ (i32.sub
+ (i32.const 4)
+ (get_local $var$1)
+ )
+ )
+ (unreachable)
+ )
+ (func $loop-of-set-connections (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32)
+ (loop $label$1
+ (if
+ (i32.const 0)
+ (block
+ (set_local $var$2
+ (i32.add
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (br $label$1)
+ )
+ )
+ (set_local $var$3
+ (get_local $var$2)
+ )
+ (set_local $var$2
+ (get_local $var$3)
+ )
+ (br $label$1)
+ )
+ )
+ (func $conditions-in-conditions (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
+ (local $var$3 i32)
+ (local $var$4 i32)
+ (local $var$5 i32)
+ (local $var$6 i32)
+ (local $var$7 i32)
+ (local $var$8 i32)
+ (set_local $var$1
+ (i32.const 1)
+ )
+ (if
+ (i32.const 0)
+ (loop $label$2
+ (if
+ (get_local $var$1)
+ (nop)
+ )
+ (set_local $var$1
+ (i32.sub
+ (i32.const 0)
+ (tee_local $var$3
+ (i32.const 1)
+ )
+ )
+ )
+ (br_if $label$2
+ (i32.const 0)
+ )
+ )
+ )
+ (if
+ (get_local $var$1)
+ (set_local $var$3
+ (i32.const 1)
+ )
+ )
+ (i32.store
+ (i32.const 8)
+ (i32.add
+ (get_local $var$3)
+ (i32.const 16)
+ )
+ )
+ (i32.store
+ (i32.const 8)
+ (i32.const 64)
+ )
+ (unreachable)
+ )
+)
+
diff --git a/test/passes/flatten_simplify-locals-nonesting_souperify.txt b/test/passes/flatten_simplify-locals-nonesting_souperify.txt
new file mode 100644
index 000000000..25d3e6416
--- /dev/null
+++ b/test/passes/flatten_simplify-locals-nonesting_souperify.txt
@@ -0,0 +1,5186 @@
+
+; function: $figure-1a
+
+; start LHS (in $figure-1a)
+%0:i64 = var
+%1:i64 = var
+%2 = eq %0, %1
+infer %2
+
+
+; start LHS (in $figure-1a)
+%0:i64 = var
+%1:i64 = var
+%2 = ne %0, %1
+infer %2
+
+
+; start LHS (in $figure-1a)
+%0:i64 = var
+%1:i64 = var
+%2 = eq %0, %1
+%3:i32 = zext %2
+%4:i64 = var
+%5 = ne %0, %4
+%6:i32 = zext %5
+%7 = and %3, %6
+infer %7
+
+
+; function: $figure-1b
+
+; start LHS (in $figure-1b)
+%0:i64 = var
+%1:i64 = var
+%2 = slt %0, %1
+infer %2
+
+
+; start LHS (in $figure-1b)
+%0:i64 = var
+%1:i64 = var
+%2 = eq %0, %1
+%3:i64 = var
+%4 = slt %1, %3
+pc %4 1:i1
+infer %2
+
+
+; start LHS (in $figure-1b)
+%0:i64 = var
+%1:i64 = var
+%2 = ne %0, %1
+%3:i64 = var
+%4 = slt %3, %1
+pc %4 1:i1
+infer %2
+
+
+; start LHS (in $figure-1b)
+%0:i64 = var
+%1:i64 = var
+%2 = eq %0, %1
+%3:i32 = zext %2
+%4:i64 = var
+%5 = ne %0, %4
+%6:i32 = zext %5
+%7 = and %3, %6
+%8 = slt %1, %4
+pc %8 1:i1
+infer %7
+
+
+; function: $figure-3-if
+
+; start LHS (in $figure-3-if)
+%0:i32 = var
+%1 = and %0, 1:i32
+infer %1
+
+
+; start LHS (in $figure-3-if)
+%0:i32 = var
+%1 = add %0, 1:i32
+%2 = and %0, 1:i32
+%3 = ne %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $figure-3-if)
+%0:i32 = var
+%1 = add %0, 2:i32
+%2 = and %0, 1:i32
+%3 = eq %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $figure-3-if)
+%0 = block 2
+%1:i32 = var
+%2 = add %1, 1:i32
+%3 = add %1, 2:i32
+%4 = phi %0, %2, %3
+%5 = and %4, 1:i32
+%6 = and %1, 1:i32
+%7 = ne %6, 0:i32
+blockpc %0 0 %7 1:i1
+%8 = eq %6, 0:i32
+blockpc %0 1 %8 1:i1
+infer %5
+
+
+; function: $flips
+
+; start LHS (in $flips)
+%0 = slt 0:i32, 0:i32
+infer %0
+
+
+; start LHS (in $flips)
+%0 = slt 0:i32, 0:i32
+%1:i32 = zext %0
+%2 = ult 0:i32, %1
+infer %2
+
+
+; start LHS (in $flips)
+%0 = slt 0:i32, 0:i32
+%1:i32 = zext %0
+%2 = ult 0:i32, %1
+%3:i32 = zext %2
+%4 = sle 0:i32, %3
+infer %4
+
+
+; start LHS (in $flips)
+%0 = slt 0:i32, 0:i32
+%1:i32 = zext %0
+%2 = ult 0:i32, %1
+%3:i32 = zext %2
+%4 = sle 0:i32, %3
+%5:i32 = zext %4
+%6 = ule 0:i32, %5
+infer %6
+
+
+; function: $various-conditions-1
+
+; start LHS (in $various-conditions-1)
+%0:i32 = var
+%1 = add %0, 1:i32
+%2 = ne %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; function: $various-conditions-2
+
+; start LHS (in $various-conditions-2)
+%0:i32 = var
+%1 = slt %0, 0:i32
+infer %1
+
+
+; start LHS (in $various-conditions-2)
+%0:i32 = var
+%1 = sub %0, 2:i32
+%2 = slt %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; function: $various-conditions-3
+
+; start LHS (in $various-conditions-3)
+%0:i32 = var
+%1 = sub %0, 4:i32
+%2:i32 = var
+%3 = ne %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; function: $various-conditions-4
+
+; function: $unaries
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = eq %0, 0:i32
+infer %1
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = cttz %0
+%2:i32 = var
+%3 = eq %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = ctlz %0
+%2 = eq %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = ctpop %0
+%2:i32 = var
+%3 = eq %2, 0:i32
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = ctlz %0
+%2:i32 = var
+%3 = ctpop %2
+%4 = sub %1, %3
+%5 = eq %0, 0:i32
+pc %5 1:i1
+infer %4
+
+
+; start LHS (in $unaries)
+%0:i32 = var
+%1 = cttz %0
+%2:i32 = var
+%3 = ctlz %2
+%4 = ctpop %0
+%5 = sub %3, %4
+%6 = add %1, %5
+%7 = eq %2, 0:i32
+pc %7 1:i1
+infer %6
+
+
+; function: $unary-condition
+
+; start LHS (in $unary-condition)
+%0:i32 = var
+%1 = ule 1:i32, %0
+infer %1
+
+
+; start LHS (in $unary-condition)
+%0:i32 = var
+%1 = ule 1:i32, %0
+%2:i32 = zext %1
+%3 = cttz %2
+infer %3
+
+
+; start LHS (in $unary-condition)
+%0:i32 = var
+%1 = add %0, 2:i32
+%2 = ule 1:i32, %0
+%3:i32 = zext %2
+%4 = cttz %3
+%5 = ne %4, 0:i32
+pc %5 1:i1
+infer %1
+
+
+; function: $unary-condition-2
+
+; start LHS (in $unary-condition-2)
+%0:i32 = var
+%1 = ule 1:i32, %0
+infer %1
+
+
+; start LHS (in $unary-condition-2)
+%0:i32 = var
+%1 = ule 1:i32, %0
+%2:i32 = zext %1
+%3 = eq %2, 0:i32
+infer %3
+
+
+; start LHS (in $unary-condition-2)
+%0:i32 = var
+%1 = add %0, 2:i32
+%2 = ule 1:i32, %0
+%3:i32 = zext %2
+%4 = eq %3, 0:i32
+pc %4 1:i1
+infer %1
+
+
+; function: $if-else-cond
+
+; start LHS (in $if-else-cond)
+%0:i32 = var
+%1 = slt %0, 1:i32
+infer %1
+
+
+; start LHS (in $if-else-cond)
+%0:i32 = var
+%1 = add %0, 1:i32
+%2 = slt %0, 1:i32
+pc %2 1:i1
+infer %1
+
+
+; start LHS (in $if-else-cond)
+%0:i32 = var
+%1 = add %0, 2:i32
+%2 = slt %0, 1:i32
+%3:i32 = zext %2
+%4 = eq %3, 0:i32
+pc %4 1:i1
+infer %1
+
+
+; start LHS (in $if-else-cond)
+%0 = block 2
+%1:i32 = var
+%2 = add %1, 1:i32
+%3 = add %1, 2:i32
+%4 = phi %0, %2, %3
+%5 = and %4, 1:i32
+%6 = slt %1, 1:i32
+blockpc %0 0 %6 1:i1
+%7:i32 = zext %6
+%8 = eq %7, 0:i32
+blockpc %0 1 %8 1:i1
+infer %5
+
+
+; function: $trivial-ret
+
+; start LHS (in $trivial-ret)
+%0 = add 0:i32, 1:i32
+infer %0
+
+
+; function: $trivial-const
+
+; function: $trivial-const-block
+
+; function: $bad-phi-value
+
+; function: $bad-phi-value-2
+
+; function: $select
+
+; start LHS (in $select)
+%0 = ne 3:i32, 0:i32
+infer %0
+
+
+; start LHS (in $select)
+%0 = ne 3:i32, 0:i32
+%1 = select %0, 1:i32, 2:i32
+infer %1
+
+
+; function: $select-2
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1 = add %0, 1:i32
+infer %1
+
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1 = add 2:i32, %0
+infer %1
+
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1 = add 2:i32, %0
+%2 = ne %1, 0:i32
+infer %2
+
+
+; start LHS (in $select-2)
+%0:i32 = var
+%1 = add 2:i32, %0
+%2 = ne %1, 0:i32
+%3:i32 = var
+%4 = add %3, %0
+%5 = add %3, 1:i32
+%6 = select %2, %4, %5
+infer %6
+
+
+; function: $block-phi-1
+
+; start LHS (in $block-phi-1)
+%0:i32 = var
+%1 = add %0, 1:i32
+infer %1
+
+
+; start LHS (in $block-phi-1)
+%0:i32 = var
+%1 = add %0, 1:i32 (hasExternalUses)
+%2 = add %1, 2:i32
+infer %2
+
+
+; start LHS (in $block-phi-1)
+%0 = block 2
+%1:i32 = var
+%2 = add %1, 1:i32
+%3 = add %2, 2:i32
+%4 = phi %0, %2, %3
+%5 = add %4, 3:i32
+infer %5
+
+
+; function: $block-phi-2
+
+; start LHS (in $block-phi-2)
+%0 = block 2
+%1 = phi %0, 1:i32, 2:i32
+%2 = add %1, 3:i32
+infer %2
+
+
+; function: $zero_init-phi-bad_type
+
+; function: $phi-bad-type
+
+; function: $phi-one-side-i1
+
+; start LHS (in $phi-one-side-i1)
+%0:i32 = var
+%1:i32 = var
+%2 = sle %0, %1
+infer %2
+
+
+; start LHS (in $phi-one-side-i1)
+%0:i32 = var
+%1:i32 = var
+%2 = eq %0, %1
+%3 = sle %0, %1
+pc %3 1:i1
+infer %2
+
+
+; start LHS (in $phi-one-side-i1)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+%3 = sle %0, %1
+%4:i32 = zext %3
+%5 = eq %4, 0:i32
+pc %5 1:i1
+infer %2
+
+
+; function: $call
+
+; start LHS (in $call)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; start LHS (in $call)
+%0:i32 = var
+%1 = add 10:i32, %0
+infer %1
+
+
+; start LHS (in $call)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+%3:i32 = var
+%4 = add 10:i32, %3
+%5 = mul %2, %4
+infer %5
+
+
+; function: $in-unreachable-1
+
+; function: $in-unreachable-2
+
+; function: $in-unreachable-3
+
+; function: $in-unreachable-4
+
+; function: $in-unreachable-br_if
+
+; function: $in-unreachable-big
+
+; function: $in-unreachable-operations
+
+; function: $merge-with-one-less
+
+; function: $deep
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+infer %1
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+infer %2
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+infer %3
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+infer %4
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+infer %5
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+infer %6
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+infer %7
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+infer %8
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = xor %0, 1234:i32
+%2 = mul %1, 1234:i32
+%3 = xor %2, 1234:i32
+%4 = mul %3, 1234:i32
+%5 = xor %4, 1234:i32
+%6 = mul %5, 1234:i32
+%7 = xor %6, 1234:i32
+%8 = mul %7, 1234:i32
+%9 = xor %8, 1234:i32
+infer %9
+
+
+; start LHS (in $deep)
+%0:i32 = var
+%1 = mul %0, 1234:i32
+%2 = xor %1, 1234:i32
+%3 = mul %2, 1234:i32
+%4 = xor %3, 1234:i32
+%5 = mul %4, 1234:i32
+%6 = xor %5, 1234:i32
+%7 = mul %6, 1234:i32
+%8 = xor %7, 1234:i32
+%9 = mul %8, 1234:i32
+infer %9
+
+
+; function: $two-pcs
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = slt %0, %1
+infer %2
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1 = eq %0, 0:i64
+%2:i64 = var
+%3 = slt %0, %2
+pc %3 1:i1
+infer %1
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = add %0, %1
+%3 = eq %0, 0:i64
+%4 = slt %0, %1
+pc %3 1:i1
+pc %4 1:i1
+infer %2
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = sub %0, %1
+%3 = eq %0, 0:i64
+%4:i32 = zext %3
+%5 = eq %4, 0:i32
+%6 = slt %0, %1
+pc %5 1:i1
+pc %6 1:i1
+infer %2
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1 = eq %0, 0:i64
+%2:i64 = var
+%3 = slt %2, %0
+%4:i32 = zext %3
+%5 = eq %4, 0:i32
+pc %5 1:i1
+infer %1
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = mul %0, %1
+%3 = eq %1, 0:i64
+%4 = slt %0, %1
+%5:i32 = zext %4
+%6 = eq %5, 0:i32
+pc %3 1:i1
+pc %6 1:i1
+infer %2
+
+
+; start LHS (in $two-pcs)
+%0:i64 = var
+%1:i64 = var
+%2 = sdiv %0, %1
+%3 = eq %1, 0:i64
+%4:i32 = zext %3
+%5 = eq %4, 0:i32
+%6 = slt %0, %1
+%7:i32 = zext %6
+%8 = eq %7, 0:i32
+pc %5 1:i1
+pc %8 1:i1
+infer %2
+
+
+; function: $loop-1
+
+; start LHS (in $loop-1)
+%0 = add 1:i32, 2:i32
+infer %0
+
+
+; function: $loop-2
+
+; start LHS (in $loop-2)
+%0 = add 1:i32, 3:i32
+infer %0
+
+
+; start LHS (in $loop-2)
+%0 = add 2:i32, 4:i32
+infer %0
+
+
+; start LHS (in $loop-2)
+%0 = add 1:i32, 3:i32
+%1 = add 2:i32, 4:i32
+%2 = add %0, %1
+infer %2
+
+
+; function: $loop-3
+
+; start LHS (in $loop-3)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-3)
+%0:i32 = var
+%1 = add %0, 4:i32
+infer %1
+
+
+; start LHS (in $loop-3)
+%0:i32 = var
+%1 = add %0, 3:i32
+%2:i32 = var
+%3 = add %2, 4:i32 (hasExternalUses)
+%4 = add %1, %3
+infer %4
+
+
+; function: $loop-4
+
+; start LHS (in $loop-4)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-4)
+%0:i32 = var
+%1 = add %0, 3:i32
+%2 = add %1, 2:i32
+infer %2
+
+
+; function: $loop-5
+
+; start LHS (in $loop-5)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-5)
+%0:i32 = var
+%1 = add %0, 3:i32
+%2 = add %1, 2:i32
+infer %2
+
+
+; function: $loop-6
+
+; start LHS (in $loop-6)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-6)
+%0:i32 = var
+%1 = add %0, 3:i32
+%2 = add %1, 2:i32
+infer %2
+
+
+; function: $loop-7
+
+; start LHS (in $loop-7)
+%0:i32 = var
+%1 = add %0, 3:i32
+infer %1
+
+
+; start LHS (in $loop-7)
+%0:i32 = var
+%1 = add %0, 3:i32
+%2 = add %1, 5:i32
+infer %2
+
+
+; function: $loop-8
+
+; start LHS (in $loop-8)
+%0 = add 1:i32, 4:i32
+infer %0
+
+
+; start LHS (in $loop-8)
+%0:i32 = var
+%1 = sub 1:i32, %0
+infer %1
+
+
+; start LHS (in $loop-8)
+%0 = add 1:i32, 4:i32
+%1:i32 = var
+%2 = sub 1:i32, %1
+%3 = mul %0, %2
+infer %3
+
+
+; function: $loop-9
+
+; start LHS (in $loop-9)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; function: $loop-10
+
+; start LHS (in $loop-10)
+%0:i32 = var
+%1:i32 = var
+%2 = add %0, %1
+infer %2
+
+
+; function: $loop-multicond-1
+
+; start LHS (in $loop-multicond-1)
+%0 = ne 6:i32, 0:i32
+infer %0
+
+
+; start LHS (in $loop-multicond-1)
+%0 = ne 6:i32, 0:i32
+%1 = select %0, 4:i32, 5:i32
+infer %1
+
+
+; function: $loop-multicond-2
+
+; start LHS (in $loop-multicond-2)
+%0:i32 = var
+%1 = add %0, 4:i32
+infer %1
+
+
+; start LHS (in $loop-multicond-2)
+%0:i32 = var
+%1 = add %0, 5:i32
+infer %1
+
+
+; start LHS (in $loop-multicond-2)
+%0 = add 3:i32, 6:i32
+infer %0
+
+
+; start LHS (in $loop-multicond-2)
+%0 = add 3:i32, 6:i32
+%1 = ne %0, 0:i32
+infer %1
+
+
+; start LHS (in $loop-multicond-2)
+%0 = add 3:i32, 6:i32
+%1 = ne %0, 0:i32
+%2:i32 = var
+%3 = add %2, 4:i32
+%4:i32 = var
+%5 = add %4, 5:i32
+%6 = select %1, %3, %5
+infer %6
+
+
+; function: $loop-block-1
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = add %0, 4:i32
+infer %1
+
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = add %0, 5:i32
+infer %1
+
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = add %0, 6:i32
+infer %1
+
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = ne %0, 0:i32
+infer %1
+
+
+; start LHS (in $loop-block-1)
+%0:i32 = var
+%1 = ne %0, 0:i32
+%2:i32 = var
+%3 = add %2, 4:i32
+%4 = block 2
+%5:i32 = var
+%6 = add %5, 5:i32
+%7 = phi %4, %5, %6
+%8 = select %1, %3, %7
+infer %8
+
+
+; function: $loop-block-2
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = add %0, 4:i32
+infer %1
+
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = add %0, 5:i32
+infer %1
+
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = add %0, 6:i32
+infer %1
+
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = ne %0, 0:i32
+infer %1
+
+
+; start LHS (in $loop-block-2)
+%0:i32 = var
+%1 = ne %0, 0:i32
+%2:i32 = var
+%3 = add %2, 4:i32
+%4 = block 2
+%5:i32 = var
+%6 = add %5, 5:i32
+%7 = phi %4, %5, %6
+%8 = select %1, %3, %7
+infer %8
+
+
+; function: $bad-phi-type
+
+; function: $loop-unreachable
+
+; function: $phi-value-turns-bad
+
+; start LHS (in $phi-value-turns-bad)
+%0:i32 = var
+%1 = ctlz %0
+%2 = eq %0, 0:i32
+pc %2 1:i1
+infer %1
+
+
+; function: $multi-use
+
+; start LHS (in $multi-use)
+%0:i32 = var
+%1 = add %0, 1:i32
+infer %1
+
+
+; start LHS (in $multi-use)
+%0:i32 = var
+%1 = add %0, 1:i32
+%2 = add %1, %1
+infer %2
+
+
+; function: $multi-use-2
+
+; start LHS (in $multi-use-2)
+%0:i32 = var
+%1 = add %0, 1:i32
+infer %1
+
+
+; start LHS (in $multi-use-2)
+%0:i32 = var
+%1 = add %0, 1:i32 (hasExternalUses)
+%2 = mul %1, 2:i32
+infer %2
+
+
+; start LHS (in $multi-use-2)
+%0:i32 = var
+%1 = add %0, 1:i32
+%2 = mul %1, 2:i32
+%3 = sub %2, %1
+infer %3
+
+
+; function: $many-single-uses-with-param
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = mul 10:i32, %0
+infer %1
+
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = cttz %0
+infer %1
+
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = cttz %0
+%2 = sub %1, 20:i32
+infer %2
+
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = mul 10:i32, %0
+%2 = cttz %0
+%3 = sub %2, 20:i32
+%4 = add %1, %3
+infer %4
+
+
+; start LHS (in $many-single-uses-with-param)
+%0:i32 = var
+%1 = mul 10:i32, %0
+%2 = cttz %0
+%3 = sub %2, 20:i32
+%4 = add %1, %3
+%5 = eq %4, 0:i32
+infer %5
+
+
+; function: $55
+
+; start LHS (in $55)
+%0:i32 = var
+%1 = add %0, -7:i32
+infer %1
+
+
+; start LHS (in $55)
+%0:i32 = var
+%1 = add %0, -7:i32 (hasExternalUses)
+%2 = eq %1, 0:i32
+%3 = ne %1, 0:i32
+pc %3 1:i1
+infer %2
+
+
+; start LHS (in $55)
+%0:i32 = var
+%1:i32 = var
+%2 = add %1, -7:i32 (hasExternalUses)
+%3 = ne %0, %2
+%4 = ne %2, 0:i32
+pc %4 1:i1
+infer %3
+
+
+; function: $multiple-uses-to-non-expression
+
+; start LHS (in $multiple-uses-to-non-expression)
+%0:i32 = var
+%1 = add %0, 10:i32
+infer %1
+
+
+; start LHS (in $multiple-uses-to-non-expression)
+%0:i32 = var
+%1 = add %0, 10:i32 (hasExternalUses)
+%2 = add %1, 20:i32
+infer %2
+
+
+; function: $nested-phi-forwarding
+
+; start LHS (in $nested-phi-forwarding)
+%0 = block 2
+%1:i32 = var
+%2 = block 2
+%3 = block 2
+%4 = phi %3, %1, 1:i32
+%5 = phi %2, %1, %4
+%6 = phi %0, %1, %5
+%7 = or 1:i32, %6
+infer %7
+
+
+; function: $zext-numGets
+
+; start LHS (in $zext-numGets)
+%0:i32 = var
+%1 = eq %0, 0:i32
+infer %1
+
+
+; start LHS (in $zext-numGets)
+%0 = block 2
+%1:i32 = var
+%2 = eq %1, 0:i32
+%3:i32 = zext %2
+%4 = phi %0, 1:i32, %3
+%5 = cttz %4
+infer %5
+
+
+; function: $zext-numGets-hasAnotherUse
+
+; start LHS (in $zext-numGets-hasAnotherUse)
+%0:i32 = var
+%1 = eq %0, 0:i32
+infer %1
+
+
+; start LHS (in $zext-numGets-hasAnotherUse)
+%0 = block 2
+%1:i32 = var
+%2 = eq %1, 0:i32
+%3:i32 = zext %2
+%4 = phi %0, 1:i32, %3
+%5 = cttz %4
+infer %5
+
+
+; function: $flipped-needs-right-origin
+
+; start LHS (in $flipped-needs-right-origin)
+%0 = block 2
+%1 = phi %0, 0:i32, 2:i32
+%2 = add %1, 4:i32
+infer %2
+
+
+; start LHS (in $flipped-needs-right-origin)
+%0 = block 2
+%1 = phi %0, 0:i32, 2:i32
+%2 = add %1, 4:i32
+%3 = sle %2, 3:i32
+infer %3
+
+
+; function: $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN
+
+; start LHS (in $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN)
+%0:i32 = var
+%1 = ule 1:i32, %0
+infer %1
+
+
+; start LHS (in $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN)
+%0:i32 = var
+%1 = ule 1:i32, %0 (hasExternalUses)
+%2:i32 = zext %1
+%3 = sub 4:i32, %2
+infer %3
+
+
+; function: $loop-of-set-connections
+
+; start LHS (in $loop-of-set-connections)
+%0 = add 0:i32, 1:i32
+%1 = ne 0:i32, 0:i32
+pc %1 1:i1
+infer %0
+
+
+; function: $conditions-in-conditions
+
+; start LHS (in $conditions-in-conditions)
+%0 = sub 0:i32, 1:i32
+%1 = ne 0:i32, 0:i32
+pc %1 1:i1
+infer %0
+
+
+; start LHS (in $conditions-in-conditions)
+%0 = block 2
+%1 = block 2
+%2 = phi %1, 0:i32, 1:i32
+%3 = phi %0, %2, 1:i32
+%4 = add %3, 16:i32
+%5 = ne 0:i32, 0:i32
+blockpc %1 0 %5 1:i1
+%6 = eq 0:i32, 0:i32
+blockpc %1 1 %6 1:i1
+%7 = sub 0:i32, 1:i32
+%8 = phi %1, 1:i32, %7
+%9 = ne %8, 0:i32
+blockpc %0 0 %9 1:i1
+%10 = eq %8, 0:i32
+blockpc %0 1 %10 1:i1
+infer %4
+
+(module
+ (type $0 (func (param i64 i64 i64) (result i32)))
+ (type $1 (func (param i32) (result i32)))
+ (type $2 (func))
+ (type $3 (func (param i32)))
+ (type $4 (func (param i32 i32)))
+ (type $5 (func (result i32)))
+ (type $6 (func (param i32 i32) (result i32)))
+ (type $7 (func (result f64)))
+ (type $8 (func (param i32 i32 i32 i32)))
+ (type $9 (func (param i64 i64 i64) (result i64)))
+ (type $10 (func (param i32 i32 i32) (result i32)))
+ (type $11 (func (param i64 i64 i32 f32)))
+ (type $12 (func (param i32 i32 i32 i32 i32) (result i32)))
+ (memory $0 (shared 1 1))
+ (export "replaced-print-internal" (func $55))
+ (func $figure-1a (; 0 ;) (type $0) (param $a i64) (param $x i64) (param $y i64) (result i32)
+ (local $i i32)
+ (local $j i32)
+ (local $r i32)
+ (local $6 i64)
+ (local $7 i64)
+ (local $8 i32)
+ (local $9 i64)
+ (local $10 i64)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $12
+ (i64.eq
+ (get_local $a)
+ (get_local $x)
+ )
+ )
+ (set_local $13
+ (i64.ne
+ (get_local $a)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (i32.and
+ (get_local $12)
+ (get_local $13)
+ )
+ )
+ (return
+ (get_local $15)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $figure-1b (; 1 ;) (type $0) (param $a i64) (param $x i64) (param $y i64) (result i32)
+ (local $i i32)
+ (local $j i32)
+ (local $r i32)
+ (local $6 i64)
+ (local $7 i64)
+ (local $8 i32)
+ (local $9 i64)
+ (local $10 i64)
+ (local $11 i32)
+ (local $12 i64)
+ (local $13 i64)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (local $18 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $8
+ (i64.lt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (if
+ (get_local $8)
+ (block
+ (block $block
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (i64.eq
+ (get_local $a)
+ (get_local $x)
+ )
+ )
+ (set_local $16
+ (i64.ne
+ (get_local $a)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $18
+ (i32.and
+ (get_local $15)
+ (get_local $16)
+ )
+ )
+ (return
+ (get_local $18)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func $figure-3-if (; 2 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (block
+ (nop)
+ (set_local $2
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (if
+ (get_local $2)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $9)
+ )
+ )
+ (func $flips (; 3 ;) (type $2)
+ (local $x i32)
+ (local $y i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.ge_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.ge_u
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.gt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.gt_u
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (func $various-conditions-1 (; 4 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $various-conditions-2 (; 5 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (block
+ (nop)
+ (set_local $2
+ (i32.lt_s
+ (get_local $x)
+ (i32.const 0)
+ )
+ )
+ (if
+ (get_local $2)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.sub
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $various-conditions-3 (; 6 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (block
+ (set_local $1
+ (i32.reinterpret/f32
+ (f32.const 0)
+ )
+ )
+ (if
+ (get_local $1)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.sub
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $various-conditions-4 (; 7 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (block
+ (unreachable)
+ (if
+ (unreachable)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func $unaries (; 8 ;) (type $4) (param $x i32) (param $y i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (nop)
+ (set_local $3
+ (i32.eqz
+ (get_local $x)
+ )
+ )
+ (if
+ (get_local $3)
+ (block
+ (nop)
+ (set_local $5
+ (i32.ctz
+ (get_local $y)
+ )
+ )
+ (nop)
+ (set_local $7
+ (i32.clz
+ (get_local $x)
+ )
+ )
+ (nop)
+ (set_local $9
+ (i32.popcnt
+ (get_local $y)
+ )
+ )
+ (set_local $10
+ (i32.sub
+ (get_local $7)
+ (get_local $9)
+ )
+ )
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $5)
+ (get_local $10)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $unary-condition (; 9 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (block
+ (nop)
+ (set_local $2
+ (i32.gt_u
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $3
+ (i32.ctz
+ (get_local $2)
+ )
+ )
+ (if
+ (get_local $3)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $unary-condition-2 (; 10 ;) (type $3) (param $x i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (block
+ (nop)
+ (set_local $2
+ (i32.gt_u
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $3
+ (i32.eqz
+ (get_local $2)
+ )
+ )
+ (if
+ (get_local $3)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $if-else-cond (; 11 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (block
+ (nop)
+ (set_local $2
+ (i32.lt_s
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (if
+ (get_local $2)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $9)
+ )
+ )
+ (func $trivial-ret (; 12 ;) (type $5) (result i32)
+ (local $0 i32)
+ (set_local $0
+ (i32.add
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+ (func $trivial-const (; 13 ;) (type $5) (result i32)
+ (return
+ (i32.const 0)
+ )
+ )
+ (func $trivial-const-block (; 14 ;) (type $5) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (block
+ (nop)
+ (nop)
+ )
+ (set_local $1
+ (i32.const 0)
+ )
+ (return
+ (get_local $1)
+ )
+ )
+ (func $bad-phi-value (; 15 ;) (type $5) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (block
+ (if
+ (i32.const 1)
+ (block
+ (nop)
+ (set_local $1
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ )
+ (set_local $1
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (if
+ (get_local $1)
+ (set_local $3
+ (i32.const 0)
+ )
+ (set_local $3
+ (i32.const 1)
+ )
+ )
+ )
+ (nop)
+ (return
+ (get_local $3)
+ )
+ )
+ (func $bad-phi-value-2 (; 16 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block
+ (if
+ (i32.const 1)
+ (block
+ (nop)
+ (set_local $2
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ )
+ (set_local $2
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (if
+ (get_local $2)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $x)
+ )
+ )
+ (func $select (; 17 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (set_local $1
+ (select
+ (i32.const 1)
+ (i32.const 2)
+ (i32.const 3)
+ )
+ )
+ (return
+ (get_local $1)
+ )
+ (unreachable)
+ )
+ (func $select-2 (; 18 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (nop)
+ (nop)
+ (set_local $4
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (set_local $6
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (set_local $8
+ (i32.add
+ (i32.const 2)
+ (get_local $y)
+ )
+ )
+ (set_local $9
+ (select
+ (get_local $4)
+ (get_local $6)
+ (get_local $8)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (func $block-phi-1 (; 19 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (block $out
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $y)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $10
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (return
+ (get_local $10)
+ )
+ )
+ (func $block-phi-2 (; 20 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block $out
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $y)
+ )
+ (nop)
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $6
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (return
+ (get_local $6)
+ )
+ )
+ (func $zero_init-phi-bad_type (; 21 ;) (type $7) (result f64)
+ (local $x f64)
+ (local $1 f64)
+ (local $2 f64)
+ (local $3 f64)
+ (block
+ (if
+ (i32.const 0)
+ (block
+ (set_local $x
+ (f64.const 1)
+ )
+ (nop)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $x)
+ )
+ )
+ (func $phi-bad-type (; 22 ;) (type $7) (result f64)
+ (local $0 f64)
+ (local $1 f64)
+ (local $2 f64)
+ (local $3 f64)
+ (block $label$1
+ (if
+ (i32.const 0)
+ (set_local $0
+ (f64.const 0)
+ )
+ (set_local $0
+ (f64.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $0)
+ )
+ )
+ (func $phi-one-side-i1 (; 23 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $i i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (block
+ (block
+ (nop)
+ (nop)
+ (set_local $5
+ (i32.le_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (if
+ (get_local $5)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $i
+ (i32.eq
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $i
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $i)
+ )
+ )
+ (func $call (; 24 ;) (type $5) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (set_local $0
+ (call $call)
+ )
+ (set_local $1
+ (call $call)
+ )
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (set_local $3
+ (call $call)
+ )
+ (set_local $4
+ (i32.add
+ (i32.const 10)
+ (get_local $3)
+ )
+ )
+ (set_local $5
+ (i32.mul
+ (get_local $2)
+ (get_local $4)
+ )
+ )
+ (return
+ (get_local $5)
+ )
+ (unreachable)
+ )
+ (func $in-unreachable-1 (; 25 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $5)
+ )
+ )
+ (func $in-unreachable-2 (; 26 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (block
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $4)
+ )
+ )
+ (func $in-unreachable-3 (; 27 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block $out
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (br $out)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $5)
+ )
+ )
+ (func $in-unreachable-4 (; 28 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block $out
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (br_table $out $out $out
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $5)
+ )
+ )
+ (func $in-unreachable-br_if (; 29 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (block
+ (block $out
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (block $block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $x)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $6)
+ )
+ )
+ (func $in-unreachable-big (; 30 ;) (type $8) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (block
+ (block $label$1
+ (block $label$2
+ (block $label$3
+ (block
+ (nop)
+ (if
+ (get_local $2)
+ (block
+ (block
+ (nop)
+ (if
+ (get_local $0)
+ (block
+ (block $block
+ (set_local $1
+ (i32.const -8531)
+ )
+ (nop)
+ (br $label$3)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (block
+ (block $block3
+ (set_local $1
+ (i32.const -8531)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ )
+ )
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ (br $label$2)
+ (unreachable)
+ )
+ (nop)
+ (set_local $6
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ (drop
+ (get_local $6)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (i32.store16
+ (i32.const 1)
+ (get_local $1)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (i32.store16
+ (i32.const 0)
+ (i32.const -8531)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (func $in-unreachable-operations (; 31 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (block $block
+ (unreachable)
+ (unreachable)
+ (block
+ (nop)
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ )
+ (block
+ (set_local $x
+ (i32.const 2)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $x)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $merge-with-one-less (; 32 ;) (type $1) (param $var$0 i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (block $label$1
+ (block $label$2
+ (block $label$3
+ (block $label$4
+ (block $label$5
+ (set_local $1
+ (i32.load
+ (i32.const 1)
+ )
+ )
+ (br_table $label$5 $label$4 $label$3 $label$2
+ (get_local $1)
+ )
+ (unreachable)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (nop)
+ (set_local $var$0
+ (i32.const 8)
+ )
+ (nop)
+ (set_local $3
+ (i32.load
+ (get_local $var$0)
+ )
+ )
+ (f64.store
+ (get_local $3)
+ (f64.const 0)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (i32.store
+ (get_local $var$0)
+ (i32.const 16)
+ )
+ (nop)
+ (nop)
+ )
+ (set_local $6
+ (i32.const 1)
+ )
+ (return
+ (get_local $6)
+ )
+ )
+ (func $deep (; 33 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (local $18 i32)
+ (local $19 i32)
+ (local $20 i32)
+ (local $21 i32)
+ (local $22 i32)
+ (local $23 i32)
+ (local $24 i32)
+ (local $25 i32)
+ (local $26 i32)
+ (local $27 i32)
+ (local $28 i32)
+ (local $29 i32)
+ (local $30 i32)
+ (local $31 i32)
+ (local $32 i32)
+ (local $33 i32)
+ (local $34 i32)
+ (local $35 i32)
+ (local $36 i32)
+ (local $37 i32)
+ (local $38 i32)
+ (local $39 i32)
+ (local $40 i32)
+ (local $41 i32)
+ (local $42 i32)
+ (local $43 i32)
+ (local $44 i32)
+ (local $45 i32)
+ (local $46 i32)
+ (local $47 i32)
+ (local $48 i32)
+ (local $49 i32)
+ (local $50 i32)
+ (local $51 i32)
+ (local $52 i32)
+ (local $53 i32)
+ (local $54 i32)
+ (local $55 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.xor
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $x)
+ (i32.const 1234)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (return
+ (get_local $x)
+ )
+ )
+ (func $two-pcs (; 34 ;) (type $9) (param $x i64) (param $y i64) (param $t i64) (result i64)
+ (local $3 i64)
+ (local $4 i64)
+ (local $5 i32)
+ (local $6 i64)
+ (local $7 i32)
+ (local $8 i64)
+ (local $9 i64)
+ (local $10 i64)
+ (local $11 i64)
+ (local $12 i64)
+ (local $13 i64)
+ (local $14 i64)
+ (local $15 i32)
+ (local $16 i64)
+ (local $17 i64)
+ (local $18 i64)
+ (local $19 i64)
+ (local $20 i64)
+ (local $21 i64)
+ (local $22 i64)
+ (local $23 i64)
+ (local $24 i64)
+ (block
+ (block
+ (nop)
+ (nop)
+ (set_local $5
+ (i64.lt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (if
+ (get_local $5)
+ (block
+ (block
+ (nop)
+ (set_local $7
+ (i64.eqz
+ (get_local $x)
+ )
+ )
+ (if
+ (get_local $7)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $t
+ (i64.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $t
+ (i64.sub
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (block
+ (block
+ (nop)
+ (set_local $15
+ (i64.eqz
+ (get_local $y)
+ )
+ )
+ (if
+ (get_local $15)
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $t
+ (i64.mul
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ (block
+ (nop)
+ (nop)
+ (nop)
+ (set_local $t
+ (i64.div_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (return
+ (get_local $t)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $23)
+ )
+ )
+ (func $loop-1 (; 35 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $4
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $4)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $5)
+ )
+ )
+ (func $loop-2 (; 36 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $9)
+ )
+ )
+ (func $loop-3 (; 37 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $10)
+ )
+ )
+ (func $loop-4 (; 38 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $7
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $8)
+ )
+ )
+ (func $loop-5 (; 39 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $7
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $8)
+ )
+ )
+ (func $loop-6 (; 40 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $y
+ (get_local $y)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $9)
+ )
+ )
+ (func $loop-7 (; 41 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (nop)
+ (set_local $y
+ (i32.const 5)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $7
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $8)
+ )
+ )
+ (func $loop-8 (; 42 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $z i32)
+ (local $w i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (set_local $z
+ (get_local $x)
+ )
+ (nop)
+ (nop)
+ (set_local $w
+ (get_local $y)
+ )
+ (nop)
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 4)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $12
+ (i32.sub
+ (get_local $z)
+ (get_local $w)
+ )
+ )
+ (set_local $13
+ (i32.mul
+ (get_local $9)
+ (get_local $12)
+ )
+ )
+ (return
+ (get_local $13)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $14)
+ )
+ )
+ (func $loop-9 (; 43 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $t i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (set_local $t
+ (get_local $x)
+ )
+ (nop)
+ (nop)
+ (set_local $x
+ (get_local $y)
+ )
+ (nop)
+ (nop)
+ (set_local $y
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $10)
+ )
+ )
+ (func $loop-10 (; 44 ;) (type $6) (param $x i32) (param $y i32) (result i32)
+ (local $t i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 1)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (set_local $t
+ (get_local $x)
+ )
+ (nop)
+ (nop)
+ (set_local $x
+ (get_local $y)
+ )
+ (nop)
+ (nop)
+ (set_local $y
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $y)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $10)
+ )
+ )
+ (func $loop-multicond-1 (; 45 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 3)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (set_local $x
+ (i32.const 4)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $t)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 5)
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $t)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 6)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $9
+ (select
+ (get_local $x)
+ (get_local $y)
+ (get_local $z)
+ )
+ )
+ (return
+ (get_local $9)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $10)
+ )
+ )
+ (func $loop-multicond-2 (; 46 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 3)
+ )
+ (nop)
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 5)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $loopy
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $z
+ (i32.add
+ (get_local $z)
+ (i32.const 6)
+ )
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (select
+ (get_local $x)
+ (get_local $y)
+ (get_local $z)
+ )
+ )
+ (return
+ (get_local $15)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $loop-block-1 (; 47 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 3)
+ )
+ (nop)
+ (loop $loopy
+ (block $out
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 5)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $z
+ (i32.add
+ (get_local $z)
+ (i32.const 6)
+ )
+ )
+ (nop)
+ (br $loopy)
+ (unreachable)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (select
+ (get_local $x)
+ (get_local $y)
+ (get_local $z)
+ )
+ )
+ (return
+ (get_local $15)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $loop-block-2 (; 48 ;) (type $10) (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (local $17 i32)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (nop)
+ (set_local $y
+ (i32.const 2)
+ )
+ (nop)
+ (set_local $z
+ (i32.const 3)
+ )
+ (nop)
+ (block $out
+ (loop $loopy
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $y
+ (i32.add
+ (get_local $y)
+ (i32.const 5)
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $out
+ (get_local $t)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $z
+ (i32.add
+ (get_local $z)
+ (i32.const 6)
+ )
+ )
+ (nop)
+ (br $loopy)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $15
+ (select
+ (get_local $x)
+ (get_local $y)
+ (get_local $z)
+ )
+ )
+ (return
+ (get_local $15)
+ )
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $bad-phi-type (; 49 ;) (type $11) (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 f64)
+ (local $9 f64)
+ (local $10 f64)
+ (local $11 f64)
+ (block
+ (nop)
+ (if
+ (get_local $var$2)
+ (block
+ (loop $label$2
+ (block
+ (block
+ (block $label$3
+ (if
+ (i32.const 0)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $6
+ (i32.const 0)
+ )
+ (if
+ (get_local $6)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (br_if $label$2
+ (get_local $var$2)
+ )
+ (nop)
+ (nop)
+ )
+ (nop)
+ (set_local $10
+ (f64.const 0)
+ )
+ )
+ (nop)
+ (drop
+ (get_local $10)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $loop-unreachable (; 50 ;) (type $2)
+ (local $var$0 i32)
+ (local $var$1 f64)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 f64)
+ (local $12 f64)
+ (local $13 f64)
+ (loop $label$1
+ (block
+ (block $label$2
+ (block $label$3
+ (block $label$4
+ (if
+ (i32.const 1337)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (set_local $var$0
+ (get_local $var$0)
+ )
+ (nop)
+ (loop $label$6
+ (block $label$7
+ (nop)
+ (set_local $6
+ (get_local $var$0)
+ )
+ (br_if $label$7
+ (i32.const 65535)
+ )
+ (nop)
+ (drop
+ (get_local $6)
+ )
+ (nop)
+ (nop)
+ (set_local $6
+ (get_local $var$0)
+ )
+ (br_if $label$7
+ (i32.const 0)
+ )
+ (nop)
+ (drop
+ (get_local $6)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (br_if $label$6
+ (get_local $6)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (nop)
+ (nop)
+ )
+ (nop)
+ (set_local $var$1
+ (get_local $var$1)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $phi-value-turns-bad (; 51 ;) (type $7) (result f64)
+ (local $var$0 i32)
+ (local $var$1 i32)
+ (local $var$2 f32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 f32)
+ (local $13 f32)
+ (local $14 f32)
+ (local $15 f32)
+ (local $16 f64)
+ (local $17 f64)
+ (block
+ (block
+ (nop)
+ (set_local $var$0
+ (i32.atomic.rmw16_u.sub offset=22
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (if
+ (get_local $var$0)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ (block
+ (block $block
+ (block
+ (loop $label$3
+ (block $label$4
+ (nop)
+ (set_local $6
+ (get_local $var$0)
+ )
+ (br_if $label$4
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (set_local $6
+ (i32.clz
+ (get_local $6)
+ )
+ )
+ )
+ (nop)
+ (drop
+ (get_local $6)
+ )
+ )
+ (nop)
+ (if
+ (get_local $6)
+ (nop)
+ )
+ )
+ (nop)
+ (nop)
+ )
+ (nop)
+ (set_local $14
+ (f32.const 1)
+ )
+ )
+ )
+ )
+ (nop)
+ (drop
+ (get_local $14)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $16)
+ )
+ )
+ (func $multi-use (; 52 ;) (type $1) (param $x i32) (result i32)
+ (local $temp i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $temp
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $8
+ (i32.add
+ (get_local $temp)
+ (get_local $temp)
+ )
+ )
+ (return
+ (get_local $8)
+ )
+ )
+ (func $multi-use-2 (; 53 ;) (type $1) (param $x i32) (result i32)
+ (local $temp i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $temp
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.mul
+ (get_local $temp)
+ (i32.const 2)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ )
+ (set_local $10
+ (i32.sub
+ (get_local $x)
+ (get_local $temp)
+ )
+ )
+ (return
+ (get_local $10)
+ )
+ )
+ (func $many-single-uses-with-param (; 54 ;) (type $1) (param $x i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (nop)
+ (set_local $2
+ (i32.mul
+ (i32.const 10)
+ (get_local $x)
+ )
+ )
+ (nop)
+ (set_local $4
+ (i32.ctz
+ (get_local $x)
+ )
+ )
+ (set_local $5
+ (i32.sub
+ (get_local $4)
+ (i32.const 20)
+ )
+ )
+ (set_local $6
+ (i32.add
+ (get_local $2)
+ (get_local $5)
+ )
+ )
+ (set_local $7
+ (i32.eqz
+ (get_local $6)
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ (unreachable)
+ )
+ (func $55 (; 55 ;) (type $3) (param $var$0 i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (local $var$3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $var$0
+ (i32.add
+ (get_local $var$0)
+ (i32.const -7)
+ )
+ )
+ (nop)
+ (if
+ (get_local $var$0)
+ (block
+ (block $label$2
+ (block $label$3
+ (nop)
+ (set_local $var$1
+ (get_local $var$0)
+ )
+ (nop)
+ (nop)
+ (set_local $8
+ (i32.const 12)
+ )
+ (br_if $label$3
+ (get_local $8)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (set_local $10
+ (i32.eqz
+ (get_local $var$1)
+ )
+ )
+ (br_if $label$2
+ (get_local $10)
+ )
+ (nop)
+ (block
+ (set_local $11
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (set_local $13
+ (i32.ne
+ (get_local $11)
+ (get_local $var$0)
+ )
+ )
+ (if
+ (get_local $13)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $multiple-uses-to-non-expression (; 56 ;) (type $3) (param $x i32)
+ (local $temp i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 10)
+ )
+ )
+ (nop)
+ (nop)
+ (i32.store
+ (i32.const 1)
+ (get_local $x)
+ )
+ (nop)
+ (nop)
+ (set_local $6
+ (i32.add
+ (get_local $x)
+ (i32.const 20)
+ )
+ )
+ (i32.store
+ (i32.const 2)
+ (get_local $6)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (func $nested-phi-forwarding (; 57 ;) (type $1) (param $var$0 i32) (result i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (block $label$1
+ (block $label$2
+ (loop $label$3
+ (block
+ (block $label$4
+ (block $label$5
+ (block $label$6
+ (block $label$7
+ (block $label$8
+ (nop)
+ (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4
+ (get_local $var$0)
+ )
+ (unreachable)
+ )
+ (nop)
+ (set_local $var$1
+ (i32.const 1)
+ )
+ (nop)
+ )
+ (nop)
+ (br $label$4)
+ (unreachable)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (nop)
+ (set_local $var$2
+ (i32.const 1)
+ )
+ (nop)
+ (br_if $label$3
+ (get_local $var$2)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ (block $label$9
+ (nop)
+ (set_local $6
+ (i32.or
+ (i32.const 1)
+ (get_local $var$1)
+ )
+ )
+ (br_if $label$9
+ (get_local $6)
+ )
+ (nop)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (nop)
+ (i32.store offset=176
+ (i32.const 0)
+ (get_local $var$2)
+ )
+ (nop)
+ (nop)
+ )
+ (set_local $9
+ (i32.const 0)
+ )
+ (return
+ (get_local $9)
+ )
+ )
+ (func $zext-numGets (; 58 ;) (type $4) (param $var$0 i32) (param $var$1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (block
+ (block $label$1
+ (set_local $2
+ (i32.load
+ (i32.const -8)
+ )
+ )
+ (set_local $3
+ (i32.const 1)
+ )
+ (br_if $label$1
+ (get_local $2)
+ )
+ (nop)
+ (drop
+ (get_local $3)
+ )
+ (nop)
+ (set_local $5
+ (i32.load
+ (i32.const -16)
+ )
+ )
+ (nop)
+ (set_local $3
+ (i32.eqz
+ (get_local $5)
+ )
+ )
+ )
+ (nop)
+ (set_local $8
+ (i32.ctz
+ (get_local $3)
+ )
+ )
+ (if
+ (get_local $8)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $zext-numGets-hasAnotherUse (; 59 ;) (type $4) (param $var$0 i32) (param $var$1 i32)
+ (local $temp i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (block
+ (block $label$1
+ (set_local $3
+ (i32.load
+ (i32.const -8)
+ )
+ )
+ (set_local $4
+ (i32.const 1)
+ )
+ (br_if $label$1
+ (get_local $3)
+ )
+ (nop)
+ (drop
+ (get_local $4)
+ )
+ (nop)
+ (set_local $6
+ (i32.load
+ (i32.const -16)
+ )
+ )
+ (nop)
+ (set_local $temp
+ (i32.eqz
+ (get_local $6)
+ )
+ )
+ (nop)
+ (nop)
+ (drop
+ (get_local $temp)
+ )
+ (nop)
+ (nop)
+ (set_local $4
+ (get_local $temp)
+ )
+ )
+ (nop)
+ (set_local $11
+ (i32.ctz
+ (get_local $4)
+ )
+ )
+ (if
+ (get_local $11)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ )
+ (func $flipped-needs-right-origin (; 60 ;) (type $1) (param $var$0 i32) (result i32)
+ (local $var$1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (block
+ (block $label$1
+ (set_local $2
+ (i32.load
+ (i32.const 1)
+ )
+ )
+ (br_if $label$1
+ (get_local $2)
+ )
+ (nop)
+ (set_local $var$1
+ (i32.const 2)
+ )
+ (nop)
+ )
+ (nop)
+ (block
+ (nop)
+ (set_local $4
+ (i32.add
+ (get_local $var$1)
+ (i32.const 4)
+ )
+ )
+ (set_local $5
+ (i32.gt_s
+ (i32.const 3)
+ (get_local $4)
+ )
+ )
+ (if
+ (get_local $5)
+ (block
+ (unreachable)
+ (unreachable)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ )
+ (set_local $7
+ (i32.const 5)
+ )
+ (return
+ (get_local $7)
+ )
+ )
+ (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (; 61 ;) (type $10) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
+ (local $3 i32)
+ (local $4 i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (local $8 i32)
+ (local $9 i32)
+ (block
+ (nop)
+ (nop)
+ (set_local $var$1
+ (i32.gt_u
+ (get_local $var$1)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (i32.store
+ (get_local $var$1)
+ (i32.const 2)
+ )
+ (nop)
+ (nop)
+ (set_local $7
+ (i32.sub
+ (i32.const 4)
+ (get_local $var$1)
+ )
+ )
+ (i32.store offset=8
+ (i32.const 3)
+ (get_local $7)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $8)
+ )
+ )
+ (func $loop-of-set-connections (; 62 ;) (type $12) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32)
+ (local $5 i32)
+ (local $6 i32)
+ (local $7 i32)
+ (loop $label$1
+ (block
+ (if
+ (i32.const 0)
+ (block
+ (block $block
+ (nop)
+ (set_local $var$2
+ (i32.add
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ )
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (nop)
+ (set_local $var$2
+ (get_local $var$2)
+ )
+ (nop)
+ (br $label$1)
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $conditions-in-conditions (; 63 ;) (type $10) (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
+ (local $var$3 i32)
+ (local $var$4 i32)
+ (local $var$5 i32)
+ (local $var$6 i32)
+ (local $var$7 i32)
+ (local $var$8 i32)
+ (local $9 i32)
+ (local $10 i32)
+ (local $11 i32)
+ (local $12 i32)
+ (local $13 i32)
+ (local $14 i32)
+ (local $15 i32)
+ (local $16 i32)
+ (block
+ (set_local $var$1
+ (i32.const 1)
+ )
+ (nop)
+ (if
+ (i32.const 0)
+ (block
+ (loop $label$2
+ (block
+ (block
+ (nop)
+ (if
+ (get_local $var$1)
+ (nop)
+ )
+ )
+ (nop)
+ (set_local $var$3
+ (i32.const 1)
+ )
+ (nop)
+ (nop)
+ (set_local $var$1
+ (i32.sub
+ (i32.const 0)
+ (get_local $var$3)
+ )
+ )
+ (nop)
+ (br_if $label$2
+ (i32.const 0)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ (nop)
+ )
+ )
+ (nop)
+ (block
+ (nop)
+ (if
+ (get_local $var$1)
+ (block
+ (set_local $var$3
+ (i32.const 1)
+ )
+ (nop)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (set_local $14
+ (i32.add
+ (get_local $var$3)
+ (i32.const 16)
+ )
+ )
+ (i32.store
+ (i32.const 8)
+ (get_local $14)
+ )
+ (nop)
+ (i32.store
+ (i32.const 8)
+ (i32.const 64)
+ )
+ (nop)
+ (unreachable)
+ (unreachable)
+ )
+ (nop)
+ (return
+ (get_local $15)
+ )
+ )
+)
diff --git a/test/passes/flatten_simplify-locals-nonesting_souperify.wast b/test/passes/flatten_simplify-locals-nonesting_souperify.wast
new file mode 100644
index 000000000..92941ca4c
--- /dev/null
+++ b/test/passes/flatten_simplify-locals-nonesting_souperify.wast
@@ -0,0 +1,1248 @@
+(module
+ (memory $0 (shared 1 1))
+ ;; Figure 1a from the Souper paper https://arxiv.org/pdf/1711.04422.pdf
+ (func $figure-1a (param $a i64) (param $x i64) (param $y i64) (result i32)
+ (local $i i32)
+ (local $j i32)
+ (local $r i32)
+ (set_local $i
+ (i64.eq
+ (get_local $a)
+ (get_local $x)
+ )
+ )
+ (set_local $j
+ (i64.ne
+ (get_local $a)
+ (get_local $y)
+ )
+ )
+ (set_local $r
+ (i32.and
+ (get_local $i)
+ (get_local $j)
+ )
+ )
+ (return (get_local $r))
+ )
+ ;; Figure 1b, with a potential path condition
+ (func $figure-1b (param $a i64) (param $x i64) (param $y i64) (result i32)
+ (local $i i32)
+ (local $j i32)
+ (local $r i32)
+ (if
+ (i64.lt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ (block
+ (set_local $i
+ (i64.eq
+ (get_local $a)
+ (get_local $x)
+ )
+ )
+ (set_local $j
+ (i64.ne
+ (get_local $a)
+ (get_local $y)
+ )
+ )
+ (set_local $r
+ (i32.and
+ (get_local $i)
+ (get_local $j)
+ )
+ )
+ (return (get_local $r))
+ )
+ (unreachable)
+ )
+ )
+ ;; Figure 3, simplified to an if
+ (func $figure-3-if (param $x i32) (result i32)
+ (if
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ (return
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ )
+ ;; flipping of greater than/or equals ops, which are not in Souper IR
+ (func $flips
+ (local $x i32)
+ (local $y i32)
+ (set_local $x (i32.ge_s (get_local $x) (get_local $y)))
+ (set_local $x (i32.ge_u (get_local $x) (get_local $y)))
+ (set_local $x (i32.gt_s (get_local $x) (get_local $y)))
+ (set_local $x (i32.gt_u (get_local $x) (get_local $y)))
+ )
+ (func $various-conditions-1 (param $x i32)
+ (if
+ (get_local $x)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ )
+ )
+ (func $various-conditions-2 (param $x i32)
+ (if
+ (i32.lt_s
+ (get_local $x)
+ (i32.const 0)
+ )
+ (set_local $x
+ (i32.sub
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ )
+ (func $various-conditions-3 (param $x i32)
+ (if
+ (i32.reinterpret/f32 (f32.const 0))
+ (set_local $x
+ (i32.sub
+ (get_local $x)
+ (i32.const 4)
+ )
+ )
+ )
+ )
+ (func $various-conditions-4 (param $x i32)
+ (if
+ (unreachable)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ )
+ )
+ (func $unaries (param $x i32) (param $y i32)
+ (if
+ (i32.eqz
+ (get_local $x)
+ )
+ (set_local $x
+ (i32.add
+ (i32.ctz
+ (get_local $y)
+ )
+ (i32.sub
+ (i32.clz
+ (get_local $x)
+ )
+ (i32.popcnt
+ (get_local $y)
+ )
+ )
+ )
+ )
+ )
+ )
+ (func $unary-condition (param $x i32)
+ (if
+ (i32.ctz
+ (i32.gt_u
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ )
+ (func $unary-condition-2 (param $x i32)
+ (if
+ (i32.eqz
+ (i32.gt_u
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ )
+ (func $if-else-cond (param $x i32) (result i32)
+ (if
+ (i32.lt_s
+ (get_local $x)
+ (i32.const 1)
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ (return
+ (i32.and
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ )
+ (func $trivial-ret (result i32)
+ (i32.add
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (func $trivial-const (result i32)
+ (i32.const 0)
+ )
+ (func $trivial-const-block (result i32)
+ (nop)
+ (i32.const 0)
+ )
+ (func $bad-phi-value (result i32)
+ (if (result i32)
+ (if (result i32)
+ (i32.const 1)
+ (i32.load
+ (i32.const 0)
+ )
+ (i32.const 0)
+ )
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (func $bad-phi-value-2 (param $x i32) (result i32)
+ (if
+ (if (result i32)
+ (i32.const 1)
+ (i32.load
+ (i32.const 0)
+ )
+ (i32.const 0)
+ )
+ (set_local $x (i32.const 1))
+ (set_local $x (i32.const 2))
+ )
+ (get_local $x)
+ )
+ (func $select (param $x i32) (result i32)
+ (return
+ (select
+ (i32.const 1)
+ (i32.const 2)
+ (i32.const 3)
+ )
+ )
+ )
+ (func $select-2 (param $x i32) (param $y i32) (result i32)
+ (return
+ (select
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ (i32.add
+ (i32.const 2)
+ (get_local $y)
+ )
+ )
+ )
+ )
+ (func $block-phi-1 (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 1)
+ )
+ )
+ (br_if $out (get_local $y))
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 2)
+ )
+ )
+ )
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (func $block-phi-2 (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (set_local $x
+ (i32.const 1)
+ )
+ (br_if $out (get_local $y))
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ (i32.add
+ (get_local $x)
+ (i32.const 3)
+ )
+ )
+ (func $zero_init-phi-bad_type (result f64)
+ (local $x f64)
+ (if
+ (i32.const 0)
+ (set_local $x
+ (f64.const 1)
+ )
+ )
+ (get_local $x)
+ )
+ (func $phi-bad-type (result f64)
+ (block $label$1 (result f64)
+ (if (result f64)
+ (i32.const 0)
+ (f64.const 0)
+ (f64.const 1)
+ )
+ )
+ )
+ (func $phi-one-side-i1 (param $x i32) (param $y i32) (result i32)
+ (local $i i32)
+ (if
+ (i32.le_s
+ (get_local $x)
+ (get_local $y)
+ )
+ (set_local $i
+ (i32.eq
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (set_local $i
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ )
+ (get_local $i)
+ )
+ (func $call (result i32)
+ (return
+ (i32.mul
+ (i32.add
+ (call $call)
+ (call $call)
+ )
+ (i32.add
+ (i32.const 10)
+ (call $call)
+ )
+ )
+ )
+ )
+ (func $in-unreachable-1 (param $x i32) (param $y i32) (result i32)
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (return (get_local $x))
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; no phi here!
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-2 (param $x i32) (param $y i32) (result i32)
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; no phi here!
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-3 (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (br $out)
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; no phi here!
+ (return
+ (get_local $x)
+ )
+ )
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-4 (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (br_table $out $out $out (i32.const 1))
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; no phi here!
+ (return
+ (get_local $x)
+ )
+ )
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-br_if (param $x i32) (param $y i32) (result i32)
+ (block $out
+ (if
+ (get_local $x)
+ (block
+ (set_local $x
+ (i32.const 1)
+ )
+ (br_if $out
+ (get_local $x)
+ )
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ ;; there *IS* a phi here since it was a br_if
+ (return
+ (get_local $x)
+ )
+ )
+ (return
+ (get_local $x)
+ )
+ )
+ (func $in-unreachable-big (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+ (block $label$1
+ (block $label$2
+ (block $label$3
+ (if
+ (get_local $2)
+ (if
+ (get_local $0)
+ (block
+ (set_local $1
+ (i32.const -8531)
+ )
+ (br $label$3)
+ )
+ (block
+ (set_local $1
+ (i32.const -8531)
+ )
+ (br $label$1)
+ )
+ )
+ )
+ (br $label$2)
+ )
+ (drop
+ (i32.load
+ (i32.const 0)
+ )
+ )
+ (br $label$1)
+ )
+ (i32.store16
+ (i32.const 1)
+ (get_local $1)
+ )
+ (unreachable)
+ )
+ (i32.store16
+ (i32.const 0)
+ (i32.const -8531)
+ )
+ )
+ (func $in-unreachable-operations (param $x i32) (param $y i32) (result i32)
+ (block
+ (unreachable)
+ (if
+ (get_local $x)
+ (set_local $x
+ (i32.const 1)
+ )
+ (set_local $x
+ (i32.const 2)
+ )
+ )
+ (return
+ (get_local $x)
+ )
+ )
+ )
+ (func $merge-with-one-less (param $var$0 i32) (result i32)
+ (block $label$1
+ (block $label$2
+ (block $label$3
+ (block $label$4
+ (block $label$5
+ (br_table $label$5 $label$4 $label$3 $label$2
+ (i32.load
+ (i32.const 1)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (br $label$1)
+ )
+ (f64.store
+ (i32.load
+ (tee_local $var$0
+ (i32.const 8)
+ )
+ )
+ (f64.const 0)
+ )
+ (br $label$1)
+ )
+ (unreachable)
+ )
+ (i32.store
+ (get_local $var$0)
+ (i32.const 16)
+ )
+ (i32.const 1)
+ )
+ (func $deep (param $x i32) (result i32)
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.xor (get_local $x) (i32.const 1234)))
+ (set_local $x (i32.mul (get_local $x) (i32.const 1234)))
+ (get_local $x)
+ )
+ (func $two-pcs (param $x i64) (param $y i64) (result i64)
+ (param $t i64)
+ (if
+ (i64.lt_s
+ (get_local $x)
+ (get_local $y)
+ )
+ (if
+ (i64.eqz
+ (get_local $x)
+ )
+ (set_local $t
+ (i64.add
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (set_local $t
+ (i64.sub
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ )
+ (if
+ (i64.eqz
+ (get_local $y)
+ )
+ (set_local $t
+ (i64.mul
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ (set_local $t
+ (i64.div_s
+ (get_local $x)
+ (get_local $y)
+ )
+ )
+ )
+ )
+ (return (get_local $t))
+ )
+ (func $loop-1 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ )
+ ;; neither needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-2 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (i32.add (get_local $y) (i32.const 4)))
+ )
+ ;; neither needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-3 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (i32.add (get_local $y) (i32.const 4)))
+ (br_if $loopy (get_local $y))
+ )
+ ;; both needed
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-4 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (br_if $loopy (get_local $y))
+ )
+ ;; only x needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-5 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (i32.const 2)) ;; same value
+ (br_if $loopy (get_local $y))
+ )
+ ;; only x needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-6 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (get_local $y)) ;; same value
+ (br_if $loopy (get_local $y))
+ )
+ ;; only x needed a phi
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-7 (param $x i32) (param $y i32) (result i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 3)))
+ (set_local $y (i32.const 5)) ;; different!
+ (br_if $loopy (get_local $y))
+ )
+ ;; y changed but we don't need a phi for it
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-8 (param $x i32) (param $y i32) (result i32)
+ (local $z i32)
+ (local $w i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $z (get_local $x))
+ (set_local $w (get_local $y))
+ (set_local $x (i32.const 1)) ;; same!
+ (set_local $y (i32.const 4)) ;; different!
+ (br_if $loopy (get_local $y))
+ )
+ ;; x is always 3, and y needs a phi.
+ ;; each is also copied to another local, which we need
+ ;; to handle properly
+ (return
+ (i32.mul
+ (i32.add
+ (get_local $x)
+ (get_local $y)
+ )
+ (i32.sub
+ (get_local $z)
+ (get_local $w)
+ )
+ )
+ )
+ )
+ (func $loop-9 (param $x i32) (param $y i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (loop $loopy
+ (set_local $t (get_local $x))
+ (set_local $x (get_local $y))
+ (set_local $y (get_local $t))
+ (br_if $loopy (get_local $t))
+ )
+ ;; x and y swapped, so both need phis
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-10 (param $x i32) (param $y i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 1))
+ (loop $loopy ;; we swap the values. but we need a deeper analysis to figure that out...
+ (set_local $t (get_local $x))
+ (set_local $x (get_local $y))
+ (set_local $y (get_local $t))
+ (br_if $loopy (get_local $t))
+ )
+ ;; x and y swapped, but the same constant was swapped
+ (return (i32.add (get_local $x) (get_local $y)))
+ )
+ (func $loop-multicond-1 (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (set_local $z (i32.const 3))
+ (loop $loopy
+ (set_local $x (i32.const 4))
+ (br_if $loopy (get_local $t))
+ (set_local $y (i32.const 5))
+ (br_if $loopy (get_local $t))
+ (set_local $z (i32.const 6))
+ )
+ (return (select (get_local $x) (get_local $y) (get_local $z)))
+ )
+ (func $loop-multicond-2 (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (set_local $z (i32.const 3))
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 4)))
+ (br_if $loopy (get_local $t))
+ (set_local $y (i32.add (get_local $y) (i32.const 5)))
+ (br_if $loopy (get_local $t))
+ (set_local $z (i32.add (get_local $z) (i32.const 6)))
+ )
+ (return (select (get_local $x) (get_local $y) (get_local $z)))
+ )
+ (func $loop-block-1 (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (set_local $z (i32.const 3))
+ (loop $loopy
+ (block $out
+ (set_local $x (i32.add (get_local $x) (i32.const 4)))
+ (br_if $out (get_local $t))
+ (set_local $y (i32.add (get_local $y) (i32.const 5)))
+ (br_if $out (get_local $t))
+ (set_local $z (i32.add (get_local $z) (i32.const 6)))
+ (br $loopy)
+ )
+ )
+ (return (select (get_local $x) (get_local $y) (get_local $z)))
+ )
+ (func $loop-block-2 (param $x i32) (param $y i32) (param $z i32) (result i32)
+ (local $t i32)
+ (set_local $x (i32.const 1))
+ (set_local $y (i32.const 2))
+ (set_local $z (i32.const 3))
+ (block $out
+ (loop $loopy
+ (set_local $x (i32.add (get_local $x) (i32.const 4)))
+ (br_if $out (get_local $t))
+ (set_local $y (i32.add (get_local $y) (i32.const 5)))
+ (br_if $out (get_local $t))
+ (set_local $z (i32.add (get_local $z) (i32.const 6)))
+ (br $loopy)
+ )
+ )
+ (return (select (get_local $x) (get_local $y) (get_local $z)))
+ )
+ (func $bad-phi-type (param $var$0 i64) (param $var$1 i64) (param $var$2 i32) (param $var$3 f32)
+ (if
+ (get_local $var$2)
+ (drop
+ (loop $label$2 (result f64)
+ (if
+ (block $label$3 (result i32)
+ (if
+ (i32.const 0)
+ (unreachable)
+ )
+ (nop)
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ (br_if $label$2
+ (get_local $var$2)
+ )
+ (f64.const 0)
+ )
+ )
+ )
+ )
+ (func $loop-unreachable
+ (local $var$0 i32)
+ (local $var$1 f64)
+ (loop $label$1
+ (set_local $var$1
+ (block $label$2 (result f64)
+ (block $label$3
+ (set_local $var$0
+ (block $label$4 (result i32)
+ (if
+ (i32.const 1337)
+ (unreachable)
+ )
+ (get_local $var$0)
+ )
+ )
+ (loop $label$6
+ (br_if $label$6
+ (block $label$7 (result i32)
+ (drop
+ (br_if $label$7
+ (get_local $var$0)
+ (i32.const 65535)
+ )
+ )
+ (drop
+ (br_if $label$7
+ (get_local $var$0)
+ (i32.const 0)
+ )
+ )
+ (unreachable)
+ )
+ )
+ )
+ )
+ (get_local $var$1)
+ )
+ )
+ (br $label$1)
+ )
+ )
+ (func $phi-value-turns-bad (result f64)
+ (local $var$0 i32)
+ (local $var$1 i32)
+ (local $var$2 f32)
+ (set_local $var$2
+ (if (result f32)
+ (tee_local $var$0
+ (i32.atomic.rmw16_u.sub offset=22
+ (i32.const 0)
+ (i32.const 0)
+ )
+ )
+ (unreachable)
+ (block (result f32)
+ (if
+ (loop $label$3 (result i32)
+ (block $label$4 (result i32)
+ (i32.clz
+ (br_if $label$4
+ (get_local $var$0)
+ (i32.const 1)
+ )
+ )
+ )
+ )
+ (nop)
+ )
+ (f32.const 1)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (func $multi-use (param $x i32) (result i32)
+ (local $temp i32)
+ (set_local $temp (i32.add (get_local $x) (i32.const 1)))
+ (i32.add (get_local $temp) (get_local $temp))
+ )
+ (func $multi-use-2 (param $x i32) (result i32)
+ (local $temp i32)
+ (set_local $temp (i32.add (get_local $x) (i32.const 1)))
+ (set_local $x (i32.mul (get-local $temp) (i32.const 2)))
+ (i32.sub (get_local $x) (get_local $temp))
+ )
+ (func $many-single-uses-with-param (param $x i32) (result i32)
+ (return
+ (i32.eqz
+ (i32.add
+ (i32.mul
+ (i32.const 10)
+ (get_local $x)
+ )
+ (i32.sub
+ (i32.ctz
+ (get_local $x)
+ )
+ (i32.const 20)
+ )
+ )
+ )
+ )
+ )
+ (func "replaced-print-internal" (param $var$0 i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (local $var$3 i32)
+ (if
+ (tee_local $var$0
+ (i32.add
+ (get_local $var$0)
+ (i32.const -7)
+ )
+ )
+ (block $label$2
+ (block $label$3
+ (set_local $var$1
+ (get_local $var$0)
+ )
+ (br_if $label$3
+ (tee_local $var$3
+ (i32.const 12)
+ )
+ )
+ (unreachable)
+ )
+ (br_if $label$2
+ (i32.eqz
+ (get_local $var$1)
+ )
+ )
+ (if
+ (i32.ne
+ (i32.load
+ (i32.const 0)
+ )
+ (get_local $var$0)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ )
+ )
+ (func $multiple-uses-to-non-expression (param $x i32)
+ (local $temp i32)
+ (set_local $x
+ (i32.add
+ (get_local $x)
+ (i32.const 10)
+ )
+ )
+ (i32.store
+ (i32.const 1)
+ (get_local $x) ;; x+10 has two uses!
+ )
+ (i32.store
+ (i32.const 2)
+ (i32.add
+ (get_local $x)
+ (i32.const 20)
+ )
+ )
+ )
+ (func $nested-phi-forwarding (param $var$0 i32) (result i32)
+ (local $var$1 i32)
+ (local $var$2 i32)
+ (block $label$1
+ (block $label$2
+ (loop $label$3
+ (block $label$4
+ (block $label$5
+ (block $label$6
+ (block $label$7
+ (block $label$8
+ (br_table $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$8 $label$2 $label$2 $label$2 $label$6 $label$2 $label$2 $label$7 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$2 $label$5 $label$4
+ (get_local $var$0)
+ )
+ )
+ (set_local $var$1
+ (i32.const 1)
+ )
+ )
+ (br $label$4)
+ )
+ (unreachable)
+ )
+ (br $label$1)
+ )
+ (br_if $label$3
+ (tee_local $var$2
+ (i32.const 1)
+ )
+ )
+ )
+ )
+ (block $label$9
+ (br_if $label$9
+ (i32.or
+ (i32.const 1)
+ (get_local $var$1)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (i32.store offset=176
+ (i32.const 0)
+ (get_local $var$2)
+ )
+ (i32.const 0)
+ )
+ (func $zext-numGets (param $var$0 i32) (param $var$1 i32)
+ (if
+ (i32.ctz
+ (block $label$1 (result i32)
+ (drop
+ (br_if $label$1
+ (i32.const 1)
+ (i32.load
+ (i32.const -8)
+ )
+ )
+ )
+ (i32.eqz
+ (i32.load
+ (i32.const -16)
+ )
+ )
+ )
+ )
+ (unreachable)
+ )
+ )
+ (func $zext-numGets-hasAnotherUse (param $var$0 i32) (param $var$1 i32)
+ (local $temp i32)
+ (if
+ (i32.ctz
+ (block $label$1 (result i32)
+ (drop
+ (br_if $label$1
+ (i32.const 1)
+ (i32.load
+ (i32.const -8)
+ )
+ )
+ )
+ (set_local $temp
+ (i32.eqz
+ (i32.load
+ (i32.const -16)
+ )
+ )
+ )
+ (drop
+ (get_local $temp)
+ )
+ (get_local $temp)
+ )
+ )
+ (unreachable)
+ )
+ )
+ (func $flipped-needs-right-origin (param $var$0 i32) (result i32)
+ (local $var$1 i32)
+ (block $label$1
+ (br_if $label$1
+ (i32.load
+ (i32.const 1)
+ )
+ )
+ (set_local $var$1
+ (i32.const 2)
+ )
+ )
+ (if
+ (i32.gt_s
+ (i32.const 3)
+ (i32.add
+ (get_local $var$1)
+ (i32.const 4)
+ )
+ )
+ (unreachable)
+ )
+ (i32.const 5)
+ )
+ (func $non-expr-nodes-may-have-multiple-uses-too-its-the-ORIGIN (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
+ (i32.store
+ (tee_local $var$1
+ (i32.gt_u
+ (get_local $var$1)
+ (i32.const 1)
+ )
+ )
+ (i32.const 2)
+ )
+ (i32.store offset=8
+ (i32.const 3)
+ (i32.sub
+ (i32.const 4)
+ (get_local $var$1)
+ )
+ )
+ (unreachable)
+ )
+ (func $loop-of-set-connections (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (param $var$3 i32) (param $var$4 i32) (result i32)
+ (loop $label$1
+ (if
+ (i32.const 0)
+ (block
+ (set_local $var$2
+ (i32.add
+ (i32.const 0)
+ (i32.const 1)
+ )
+ )
+ (br $label$1)
+ )
+ )
+ (set_local $var$3
+ (get_local $var$2)
+ )
+ (set_local $var$2
+ (get_local $var$3)
+ )
+ (br $label$1)
+ )
+ )
+ (func $conditions-in-conditions (param $var$0 i32) (param $var$1 i32) (param $var$2 i32) (result i32)
+ (local $var$3 i32)
+ (local $var$4 i32)
+ (local $var$5 i32)
+ (local $var$6 i32)
+ (local $var$7 i32)
+ (local $var$8 i32)
+ (set_local $var$1
+ (i32.const 1)
+ )
+ (if
+ (i32.const 0)
+ (loop $label$2
+ (if
+ (get_local $var$1)
+ (nop)
+ )
+ (set_local $var$1
+ (i32.sub
+ (i32.const 0)
+ (tee_local $var$3
+ (i32.const 1)
+ )
+ )
+ )
+ (br_if $label$2
+ (i32.const 0)
+ )
+ )
+ )
+ (if
+ (get_local $var$1)
+ (set_local $var$3
+ (i32.const 1)
+ )
+ )
+ (i32.store
+ (i32.const 8)
+ (i32.add
+ (get_local $var$3)
+ (i32.const 16)
+ )
+ )
+ (i32.store
+ (i32.const 8)
+ (i32.const 64)
+ )
+ (unreachable)
+ )
+)
+