diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/passes/flatten_dfo_O3.txt | 50 | ||||
-rw-r--r-- | test/passes/flatten_dfo_O3.wast | 187 | ||||
-rw-r--r-- | test/passes/flatten_simplify-locals-nonesting_dfo_O3.txt | 41 | ||||
-rw-r--r-- | test/passes/flatten_simplify-locals-nonesting_dfo_O3.wast | 112 | ||||
-rw-r--r-- | test/passes/flatten_simplify-locals-nonesting_souperify-single-use.txt | 5167 | ||||
-rw-r--r-- | test/passes/flatten_simplify-locals-nonesting_souperify-single-use.wast | 1248 | ||||
-rw-r--r-- | test/passes/flatten_simplify-locals-nonesting_souperify.txt | 5186 | ||||
-rw-r--r-- | test/passes/flatten_simplify-locals-nonesting_souperify.wast | 1248 |
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) + ) +) + |