summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/passes/flatten-control-flow.txt1177
-rw-r--r--test/passes/flatten-control-flow.wast776
2 files changed, 1953 insertions, 0 deletions
diff --git a/test/passes/flatten-control-flow.txt b/test/passes/flatten-control-flow.txt
new file mode 100644
index 000000000..d94536712
--- /dev/null
+++ b/test/passes/flatten-control-flow.txt
@@ -0,0 +1,1177 @@
+(module
+ (type $ii (func (param i32 i32)))
+ (type $1 (func))
+ (type $2 (func (result i32)))
+ (type $3 (func (param i32) (result i32)))
+ (type $4 (func (param i64 i64) (result i64)))
+ (global $x (mut i32) (i32.const 0))
+ (table 1 1 anyfunc)
+ (elem (i32.const 0) $call-me)
+ (memory $0 10)
+ (func $call-me (type $ii) (param $0 i32) (param $1 i32)
+ (nop)
+ )
+ (func $code-to-kill (type $1)
+ (local $x 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)
+ (block $out
+ (br $out)
+ (drop
+ (i32.const 0)
+ )
+ (if
+ (i32.const 1)
+ (drop
+ (i32.const 2)
+ )
+ )
+ (br_table $out $out $out $out
+ (i32.const 3)
+ )
+ (call $code-to-kill)
+ )
+ (if
+ (i32.const 0)
+ (block $out1
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $out3
+ (return)
+ (drop
+ (i32.const 0)
+ )
+ )
+ )
+ (block $out4
+ (br_table $out4 $out4 $out4 $out4
+ (i32.const 4)
+ )
+ (drop
+ (i32.const 0)
+ )
+ )
+ (block $out5
+ (br_if $out5
+ (i32.const 3)
+ )
+ (drop
+ (i32.const 0)
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $block4
+ (if
+ (i32.const 0)
+ (block $out8
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ )
+ (block $out9
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.const 0)
+ )
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $out11
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $out13
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $out15
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ )
+ (block $out16
+ (block $in
+ (br_if $out16
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (if
+ (i32.const 0)
+ (block $block11
+ (block $out18
+ (block $in19
+ (br_if $in19
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (drop
+ (i32.const 10)
+ )
+ )
+ )
+ (block $out20
+ (block $in21
+ (br_table $out20 $in21
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (block $out22
+ (block $in23
+ (br_table $in23 $out22
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (if
+ (i32.const 0)
+ (block $block13
+ (block $out25
+ (block $in26
+ (br_table $in26 $in26
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (drop
+ (i32.const 10)
+ )
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $block15
+ (drop
+ (i32.const 10)
+ )
+ (drop
+ (i32.const 42)
+ )
+ (unreachable)
+ (block
+ (unreachable)
+ )
+ (unreachable)
+ (return)
+ )
+ )
+ (if
+ (i32.const 0)
+ (loop $loop-in18
+ (unreachable)
+ )
+ )
+ (block $out29
+ (loop $in30
+ (br_if $out29
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $block20
+ (loop $in32
+ (br_if $in32
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ (drop
+ (i32.const 10)
+ )
+ )
+ )
+ (if
+ (i32.const 1)
+ (block
+ (set_local $4
+ (i32.const 123)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 2)
+ (unreachable)
+ )
+ (if
+ (i32.const 3)
+ (unreachable)
+ )
+ (if
+ (i32.const -1)
+ (block
+ (set_local $6
+ (i32.const 123)
+ )
+ (set_local $7
+ (i32.const 456)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const -2)
+ (block
+ (set_local $8
+ (i32.const 139)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const -3)
+ (block
+ (set_local $10
+ (i32.const 246)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const -4)
+ (unreachable)
+ )
+ (if
+ (i32.const 11)
+ (unreachable)
+ )
+ (if
+ (i32.const 22)
+ (block
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 33)
+ (block
+ (set_local $11
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 44)
+ (unreachable)
+ )
+ (if
+ (i32.const 55)
+ (unreachable)
+ )
+ (if
+ (i32.const 66)
+ (block
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 77)
+ (block
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 88)
+ (block
+ (set_local $14
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 99)
+ (unreachable)
+ )
+ (if
+ (i32.const 100)
+ (block
+ (set_local $15
+ (i32.const 123)
+ )
+ (set_local $16
+ (i32.const 456)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 101)
+ (block
+ (set_local $17
+ (i32.const 123)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 102)
+ (block
+ (unreachable)
+ )
+ )
+ (drop
+ (i32.const 1337)
+ )
+ )
+ (func $killer (type $1)
+ (unreachable)
+ (drop
+ (i32.const 1000)
+ )
+ )
+ (func $target (type $1)
+ (drop
+ (i32.const 2000)
+ )
+ )
+ (func $typed-block-none-then-unreachable (type $2) (result i32)
+ (local $0 i32)
+ (block $top-typed
+ (block $switch$0
+ (return
+ (i32.const 0)
+ )
+ (br $switch$0)
+ )
+ (return
+ (i32.const 1)
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+ (func $typed-block-remove-br-changes-type (type $3) (param $$$0 i32) (result i32)
+ (local $1 i32)
+ (block
+ (block $switch$7
+ (block $switch-default$10
+ (block $switch-case$9
+ (block $switch-case$8
+ (br_table $switch-case$9 $switch-case$8 $switch-default$10
+ (i32.const -1)
+ )
+ )
+ )
+ (return
+ (get_local $$$0)
+ )
+ (br $switch$7)
+ )
+ (return
+ (get_local $$$0)
+ )
+ )
+ (return
+ (i32.const 0)
+ )
+ )
+ (return
+ (get_local $1)
+ )
+ )
+ (func $global (type $1)
+ (unreachable)
+ (drop
+ (get_global $x)
+ )
+ (set_global $x
+ (i32.const 1)
+ )
+ )
+ (func $ret (type $2) (result i32)
+ (local $0 i32)
+ (block
+ (return
+ (i32.const 0)
+ )
+ (nop)
+ (set_local $0
+ (i32.const 0)
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+ (func $unreachable-br (type $2) (result i32)
+ (local $0 i32)
+ (block $out
+ (block
+ (set_local $0
+ (i32.const 0)
+ )
+ (br $out)
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+ (func $unreachable-br-loop (type $2) (result i32)
+ (loop $out
+ (br $out)
+ )
+ )
+ (func $unreachable-block-ends-switch (type $2) (result i32)
+ (local $0 i32)
+ (block $label$0
+ (block $label$3
+ (nop)
+ (block
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (set_local $0
+ (i32.const 19)
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+ (func $unreachable-block-ends-br_if (type $2) (result i32)
+ (local $0 i32)
+ (block $label$0
+ (block $label$2
+ (nop)
+ (block
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (set_local $0
+ (i32.const 19)
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+ (func $unreachable-brs-3 (type $2) (result i32)
+ (local $0 i32)
+ (block $label$0
+ (block
+ (block
+ (set_local $0
+ (i32.const 18)
+ )
+ (br $label$0)
+ )
+ )
+ (set_local $0
+ (i32.const 21)
+ )
+ )
+ (return
+ (get_local $0)
+ )
+ )
+ (func $unreachable-brs-4 (type $3) (param $var$0 i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (set_local $3
+ (i32.const 1)
+ )
+ (block $label$0
+ (block $label$1
+ (block
+ (block
+ (unreachable)
+ )
+ )
+ (set_local $2
+ (i32.const 4)
+ )
+ )
+ (set_local $1
+ (i32.const 16)
+ )
+ )
+ )
+ (func $call-unreach (type $4) (param $var$0 i64) (param $var$1 i64) (result i64)
+ (local $2 i64)
+ (local $3 i64)
+ (local $4 i64)
+ (local $5 i64)
+ (local $6 i64)
+ (local $7 i64)
+ (if
+ (i64.eqz
+ (get_local $var$0)
+ )
+ (block
+ (block $label$0
+ (set_local $3
+ (get_local $var$1)
+ )
+ )
+ (set_local $7
+ (get_local $3)
+ )
+ )
+ (block
+ (block $label$1
+ (block
+ (set_local $5
+ (i64.sub
+ (get_local $var$0)
+ (i64.const 1)
+ )
+ )
+ (block
+ (block $block
+ (set_local $2
+ (get_local $var$0)
+ )
+ (nop)
+ (set_local $4
+ (get_local $2)
+ )
+ )
+ (unreachable)
+ )
+ )
+ )
+ (set_local $7
+ (get_local $6)
+ )
+ )
+ )
+ (return
+ (get_local $7)
+ )
+ )
+ (func $test-flatten (type $1)
+ (local $0 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)
+ (block $out
+ (drop
+ (i32.add
+ (i32.const 1)
+ (i32.const 2)
+ )
+ )
+ (block
+ (block
+ (set_local $0
+ (i32.const 1)
+ )
+ (br $out)
+ )
+ )
+ (block
+ (block
+ (br $out)
+ )
+ )
+ (block
+ (block
+ (set_local $2
+ (i32.const 1)
+ )
+ (br_table $out $out $out $out
+ (i32.const 3)
+ )
+ )
+ )
+ (block
+ (block
+ (set_local $4
+ (i32.const 1)
+ )
+ (block $block
+ (drop
+ (i32.const 2)
+ )
+ (drop
+ (i32.const 3)
+ )
+ (set_local $3
+ (i32.const 4)
+ )
+ )
+ (set_local $5
+ (i32.add
+ (get_local $4)
+ (get_local $3)
+ )
+ )
+ )
+ (drop
+ (get_local $5)
+ )
+ )
+ (block
+ (block
+ (set_local $9
+ (i32.const 1)
+ )
+ (block $in
+ (block
+ (block $switch-in
+ (block
+ (set_local $6
+ (i32.const 2)
+ )
+ (set_local $7
+ (get_local $6)
+ )
+ (set_local $8
+ (get_local $6)
+ )
+ (br_table $in $switch-in $in
+ (i32.const 777)
+ )
+ )
+ )
+ (drop
+ (get_local $8)
+ )
+ )
+ (block
+ (set_local $7
+ (i32.const 3)
+ )
+ (br $in)
+ )
+ (set_local $7
+ (i32.const 4)
+ )
+ )
+ (set_local $10
+ (i32.add
+ (get_local $9)
+ (get_local $7)
+ )
+ )
+ )
+ (drop
+ (get_local $10)
+ )
+ )
+ (block
+ (block
+ (set_local $12
+ (i32.const 1)
+ )
+ (loop $loop-in
+ (set_local $11
+ (i32.const 5)
+ )
+ )
+ (set_local $13
+ (i32.add
+ (get_local $12)
+ (get_local $11)
+ )
+ )
+ )
+ (drop
+ (get_local $13)
+ )
+ )
+ (block
+ (block
+ (set_local $15
+ (i32.const 1)
+ )
+ (if
+ (i32.const 6)
+ (set_local $14
+ (i32.const 7)
+ )
+ (set_local $14
+ (i32.const 8)
+ )
+ )
+ (set_local $16
+ (i32.add
+ (get_local $15)
+ (get_local $14)
+ )
+ )
+ )
+ (drop
+ (get_local $16)
+ )
+ )
+ (drop
+ (select
+ (i32.const 9)
+ (i32.const 10)
+ (i32.const 11)
+ )
+ )
+ (block
+ (block
+ (br $out)
+ )
+ )
+ (block
+ (block
+ (set_local $19
+ (i32.const 9)
+ )
+ (br $out)
+ )
+ )
+ (block
+ (block
+ (set_local $21
+ (i32.const 9)
+ )
+ (set_local $22
+ (i32.const 10)
+ )
+ (br $out)
+ )
+ )
+ (block
+ (block
+ (if
+ (i32.const 11)
+ (set_local $23
+ (i32.const 12)
+ )
+ (set_local $23
+ (i32.const 13)
+ )
+ )
+ (set_local $24
+ (i32.const 9)
+ )
+ (set_local $25
+ (i32.const 10)
+ )
+ (set_local $26
+ (select
+ (get_local $23)
+ (get_local $24)
+ (get_local $25)
+ )
+ )
+ )
+ (drop
+ (get_local $26)
+ )
+ )
+ (block
+ (block
+ (set_local $28
+ (i32.const 9)
+ )
+ (if
+ (i32.const 11)
+ (set_local $27
+ (i32.const 12)
+ )
+ (set_local $27
+ (i32.const 13)
+ )
+ )
+ (set_local $29
+ (i32.const 10)
+ )
+ (set_local $30
+ (select
+ (get_local $28)
+ (get_local $27)
+ (get_local $29)
+ )
+ )
+ )
+ (drop
+ (get_local $30)
+ )
+ )
+ (block
+ (block
+ (set_local $32
+ (i32.const 9)
+ )
+ (set_local $33
+ (i32.const 10)
+ )
+ (if
+ (i32.const 11)
+ (set_local $31
+ (i32.const 12)
+ )
+ (set_local $31
+ (i32.const 13)
+ )
+ )
+ (set_local $34
+ (select
+ (get_local $32)
+ (get_local $33)
+ (get_local $31)
+ )
+ )
+ )
+ (drop
+ (get_local $34)
+ )
+ )
+ (block
+ (block
+ (if
+ (i32.const 11)
+ (set_local $35
+ (i32.const 12)
+ )
+ (set_local $35
+ (i32.const 13)
+ )
+ )
+ (set_local $37
+ (i32.const 14)
+ )
+ (if
+ (i32.const 15)
+ (set_local $36
+ (i32.const 16)
+ )
+ (set_local $36
+ (i32.const 17)
+ )
+ )
+ (set_local $38
+ (select
+ (get_local $35)
+ (get_local $37)
+ (get_local $36)
+ )
+ )
+ )
+ (drop
+ (get_local $38)
+ )
+ )
+ (block
+ (block
+ (set_local $39
+ (i32.const 1)
+ )
+ (return)
+ )
+ )
+ (block
+ (block
+ (set_local $40
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ )
+ (block
+ (block
+ (if
+ (i32.const 5)
+ (set_local $41
+ (i32.const 6)
+ )
+ (set_local $41
+ (i32.const 7)
+ )
+ )
+ (if
+ (get_local $41)
+ (set_local $43
+ (i32.const 8)
+ )
+ (block
+ (if
+ (i32.const 9)
+ (set_local $42
+ (i32.const 10)
+ )
+ (set_local $42
+ (i32.const 11)
+ )
+ )
+ (set_local $43
+ (get_local $42)
+ )
+ )
+ )
+ )
+ (drop
+ (get_local $43)
+ )
+ )
+ (block
+ (block $temp
+ (block
+ (block
+ (set_local $44
+ (i32.const 1)
+ )
+ (br_if $temp
+ (i32.const 2)
+ )
+ )
+ (set_local $44
+ (get_local $44)
+ )
+ )
+ )
+ (drop
+ (get_local $44)
+ )
+ )
+ )
+ )
+ (func $flatten-return-value (type $2) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (block
+ (block
+ (block
+ (set_local $0
+ (i32.const 1)
+ )
+ (return
+ (i32.const 2)
+ )
+ )
+ )
+ (set_local $1
+ (i32.const 3)
+ )
+ )
+ (return
+ (get_local $1)
+ )
+ )
+ (func $unbug (type $1)
+ (local $12 i32)
+ (local $432 i32)
+ (local $430 i32)
+ (local $431 i32)
+ (local $9 i32)
+ (local $5 i32)
+ (local $433 i32)
+ (local $7 i32)
+ (block $block
+ (if
+ (i32.eq
+ (get_local $12)
+ (i32.const 65535)
+ )
+ (block $block39
+ (block $label$78
+ (set_local $430
+ (i32.const 0)
+ )
+ )
+ (set_local $432
+ (get_local $430)
+ )
+ )
+ (block $block40
+ (block $label$79
+ (set_local $431
+ (i32.lt_u
+ (get_local $9)
+ (i32.load16_u offset=2
+ (i32.add
+ (get_local $5)
+ (i32.mul
+ (get_local $12)
+ (i32.const 12)
+ )
+ )
+ )
+ )
+ )
+ )
+ (set_local $432
+ (get_local $431)
+ )
+ )
+ )
+ (set_local $433
+ (i32.const 1)
+ )
+ (set_local $7
+ (i32.xor
+ (get_local $432)
+ (get_local $433)
+ )
+ )
+ )
+ (drop
+ (get_local $7)
+ )
+ )
+ (func $outer-block-typed (type $3) (param $var$0 i32) (result i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (local $4 i32)
+ (block $block
+ (block
+ (block
+ (set_local $2
+ (i32.const 1)
+ )
+ (block $label$0
+ (set_local $1
+ (i32.const 16)
+ )
+ )
+ (set_local $3
+ (i32.add
+ (get_local $2)
+ (get_local $1)
+ )
+ )
+ )
+ (set_local $4
+ (get_local $3)
+ )
+ )
+ )
+ (return
+ (get_local $4)
+ )
+ )
+ (func $nested-br_if-with-value (type $2) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (block $label$0
+ (block
+ (block
+ (block $block
+ (set_local $1
+ (get_local $0)
+ )
+ )
+ (block
+ (set_local $2
+ (i32.const 0)
+ )
+ (br_if $label$0
+ (get_local $1)
+ )
+ )
+ )
+ (drop
+ (get_local $2)
+ )
+ )
+ (set_local $2
+ (i32.const 1)
+ )
+ )
+ (return
+ (get_local $2)
+ )
+ )
+)
diff --git a/test/passes/flatten-control-flow.wast b/test/passes/flatten-control-flow.wast
new file mode 100644
index 000000000..30965c1bf
--- /dev/null
+++ b/test/passes/flatten-control-flow.wast
@@ -0,0 +1,776 @@
+(module
+ (type $ii (func (param i32 i32)))
+ (type $1 (func))
+ (type $2 (func (result i32)))
+ (type $3 (func (param i32) (result i32)))
+ (type $4 (func (param i64 i64) (result i64)))
+ (global $x (mut i32) (i32.const 0))
+ (table 1 1 anyfunc)
+ (elem (i32.const 0) $call-me)
+ (memory $0 10)
+ (func $call-me (param $0 i32) (param $1 i32)
+ (nop)
+ )
+ (func $code-to-kill
+ (local $x i32)
+ (block $out
+ (br $out)
+ (drop
+ (i32.const 0)
+ )
+ (if
+ (i32.const 1)
+ (drop
+ (i32.const 2)
+ )
+ )
+ (br_table $out $out $out $out
+ (i32.const 3)
+ )
+ (call $code-to-kill)
+ )
+ (if
+ (i32.const 0)
+ (block $out1
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $out3
+ (return)
+ (drop
+ (i32.const 0)
+ )
+ )
+ )
+ (block $out4
+ (br_table $out4 $out4 $out4 $out4
+ (i32.const 4)
+ )
+ (drop
+ (i32.const 0)
+ )
+ )
+ (block $out5
+ (br_if $out5
+ (i32.const 3)
+ )
+ (drop
+ (i32.const 0)
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $block4
+ (if
+ (i32.const 0)
+ (block $out8
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ )
+ (block $out9
+ (unreachable)
+ (drop
+ (i32.const 0)
+ )
+ )
+ )
+ (drop
+ (i32.const 0)
+ )
+ )
+ )
+ (if
+ (i32.const 0)
+ (drop
+ (block $out11 i32
+ (br $out11
+ (unreachable)
+ )
+ (drop
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ )
+ )
+ (if
+ (i32.const 0)
+ (drop
+ (block $out13 i32
+ (br_if $out13
+ (unreachable)
+ (i32.const 0)
+ )
+ (drop
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ )
+ )
+ (if
+ (i32.const 0)
+ (drop
+ (block $out15 i32
+ (br_if $out15
+ (unreachable)
+ (unreachable)
+ )
+ (drop
+ (i32.const 0)
+ )
+ (unreachable)
+ )
+ )
+ )
+ (block $out16
+ (block $in
+ (br_if $out16
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (if
+ (i32.const 0)
+ (block $block11
+ (block $out18
+ (block $in19
+ (br_if $in19
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (drop
+ (i32.const 10)
+ )
+ )
+ )
+ (block $out20
+ (block $in21
+ (br_table $out20 $in21
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (block $out22
+ (block $in23
+ (br_table $in23 $out22
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (if
+ (i32.const 0)
+ (block $block13
+ (block $out25
+ (block $in26
+ (br_table $in26 $in26
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (drop
+ (i32.const 10)
+ )
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $block15
+ (drop
+ (i32.const 10)
+ )
+ (drop
+ (i32.const 42)
+ )
+ (unreachable)
+ (return
+ (unreachable)
+ )
+ (unreachable)
+ (return)
+ )
+ )
+ (if
+ (i32.const 0)
+ (loop $loop-in18
+ (unreachable)
+ )
+ )
+ (block $out29
+ (loop $in30
+ (br_if $out29
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 0)
+ (block $block20
+ (loop $in32
+ (br_if $in32
+ (i32.const 1)
+ )
+ (unreachable)
+ )
+ (drop
+ (i32.const 10)
+ )
+ )
+ )
+ (if
+ (i32.const 1)
+ (call $call-me
+ (i32.const 123)
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 2)
+ (call $call-me
+ (unreachable)
+ (i32.const 0)
+ )
+ )
+ (if
+ (i32.const 3)
+ (call $call-me
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const -1)
+ (call_indirect $ii
+ (i32.const 123)
+ (i32.const 456)
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const -2)
+ (call_indirect $ii
+ (i32.const 139)
+ (unreachable)
+ (i32.const 0)
+ )
+ )
+ (if
+ (i32.const -3)
+ (call_indirect $ii
+ (i32.const 246)
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const -4)
+ (call_indirect $ii
+ (unreachable)
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 11)
+ (set_local $x
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 22)
+ (drop
+ (i32.load
+ (unreachable)
+ )
+ )
+ )
+ (if
+ (i32.const 33)
+ (i32.store
+ (i32.const 0)
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 44)
+ (i32.store
+ (unreachable)
+ (i32.const 0)
+ )
+ )
+ (if
+ (i32.const 55)
+ (i32.store
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 66)
+ (drop
+ (i32.eqz
+ (unreachable)
+ )
+ )
+ )
+ (if
+ (i32.const 77)
+ (drop
+ (i32.add
+ (unreachable)
+ (i32.const 0)
+ )
+ )
+ )
+ (if
+ (i32.const 88)
+ (drop
+ (i32.add
+ (i32.const 0)
+ (unreachable)
+ )
+ )
+ )
+ (if
+ (i32.const 99)
+ (i32.add
+ (unreachable)
+ (unreachable)
+ )
+ )
+ (if
+ (i32.const 100)
+ (drop
+ (select
+ (i32.const 123)
+ (i32.const 456)
+ (unreachable)
+ )
+ )
+ )
+ (if
+ (i32.const 101)
+ (drop
+ (select
+ (i32.const 123)
+ (unreachable)
+ (i32.const 456)
+ )
+ )
+ )
+ (if
+ (i32.const 102)
+ (drop
+ (select
+ (unreachable)
+ (i32.const 123)
+ (i32.const 456)
+ )
+ )
+ )
+ (drop
+ (i32.const 1337)
+ )
+ )
+ (func $killer (type $1)
+ (unreachable)
+ (drop
+ (i32.const 1000)
+ )
+ )
+ (func $target (type $1)
+ (drop
+ (i32.const 2000)
+ )
+ )
+ (func $typed-block-none-then-unreachable (type $2) (result i32)
+ (block $top-typed i32
+ (block $switch$0
+ (return
+ (i32.const 0)
+ )
+ (br $switch$0)
+ )
+ (return
+ (i32.const 1)
+ )
+ )
+ )
+ (func $typed-block-remove-br-changes-type (type $3) (param $$$0 i32) (result i32)
+ (block $switch$7
+ (block $switch-default$10
+ (block $switch-case$9
+ (block $switch-case$8
+ (br_table $switch-case$9 $switch-case$8 $switch-default$10
+ (i32.const -1)
+ )
+ )
+ )
+ (return
+ (get_local $$$0)
+ )
+ (br $switch$7)
+ )
+ (return
+ (get_local $$$0)
+ )
+ )
+ (return
+ (i32.const 0)
+ )
+ )
+ (func $global (type $1)
+ (unreachable)
+ (drop
+ (get_global $x)
+ )
+ (set_global $x
+ (i32.const 1)
+ )
+ )
+ (func $ret (type $2) (result i32)
+ (return
+ (i32.const 0)
+ )
+ (nop)
+ (i32.const 0)
+ )
+ (func $unreachable-br (type $2) (result i32)
+ (block $out i32
+ (br $out
+ (br $out
+ (i32.const 0)
+ )
+ )
+ )
+ )
+ (func $unreachable-br-loop (type $2) (result i32)
+ (loop $out
+ (br $out)
+ )
+ )
+ (func $unreachable-block-ends-switch (type $2) (result i32)
+ (block $label$0 i32
+ (block $label$3
+ (nop)
+ (br_table $label$3
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (i32.const 19)
+ )
+ )
+ (func $unreachable-block-ends-br_if (result i32)
+ (block $label$0 i32
+ (block $label$2
+ (nop)
+ (br_if $label$2
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (i32.const 19)
+ )
+ )
+ (func $unreachable-brs-3 (result i32)
+ (block $label$0 i32
+ (br $label$0
+ (grow_memory
+ (br $label$0
+ (i32.const 18)
+ )
+ )
+ )
+ (i32.const 21)
+ )
+ )
+ (func $unreachable-brs-4 (param $var$0 i32) (result i32)
+ (i32.add
+ (i32.const 1)
+ (block $label$0 i32
+ (br $label$0
+ (block $label$1 i32
+ (drop
+ (br_if $label$0
+ (i32.const 4104)
+ (unreachable)
+ )
+ )
+ (i32.const 4)
+ )
+ )
+ (i32.const 16)
+ )
+ )
+ )
+ (func $call-unreach (param $var$0 i64) (param $var$1 i64) (result i64)
+ (local $2 i64)
+ (if i64
+ (i64.eqz
+ (get_local $var$0)
+ )
+ (block $label$0 i64
+ (get_local $var$1)
+ )
+ (block $label$1 i64
+ (call $call-unreach
+ (i64.sub
+ (get_local $var$0)
+ (i64.const 1)
+ )
+ (i64.mul
+ (block $block i64
+ (set_local $2
+ (get_local $var$0)
+ )
+ (nop)
+ (get_local $2)
+ )
+ (unreachable)
+ )
+ )
+ )
+ )
+ )
+
+ ;; flatten-specific
+ (func $test-flatten
+ (block $out
+ (drop (i32.add (i32.const 1) (i32.const 2)))
+ (drop (i32.add (i32.const 1) (br $out)))
+ (drop (i32.add (br $out) (i32.const 1)))
+ (drop (i32.add (i32.const 1) (br_table $out $out $out $out (i32.const 3))))
+ (drop (i32.add (i32.const 1)
+ (block i32
+ (drop (i32.const 2))
+ (drop (i32.const 3))
+ (i32.const 4)
+ )
+ ))
+ (drop (i32.add (i32.const 1)
+ (block $in i32
+ (drop
+ (block $switch-in i32
+ (br_table $in $switch-in $in (i32.const 2) (i32.const 777))
+ )
+ )
+ (br $in (i32.const 3))
+ (i32.const 4)
+ )
+ ))
+ (drop (i32.add (i32.const 1)
+ (loop i32
+ (i32.const 5)
+ )
+ ))
+ (drop (i32.add (i32.const 1)
+ (if i32
+ (i32.const 6)
+ (i32.const 7)
+ (i32.const 8)
+ )
+ ))
+ (drop
+ (select
+ (i32.const 9)
+ (i32.const 10)
+ (i32.const 11)
+ )
+ )
+ (drop
+ (select
+ (br $out)
+ (i32.const 10)
+ (i32.const 11)
+ )
+ )
+ (drop
+ (select
+ (i32.const 9)
+ (br $out)
+ (i32.const 11)
+ )
+ )
+ (drop
+ (select
+ (i32.const 9)
+ (i32.const 10)
+ (br $out)
+ )
+ )
+ (drop
+ (select
+ (if i32
+ (i32.const 11)
+ (i32.const 12)
+ (i32.const 13)
+ )
+ (i32.const 9)
+ (i32.const 10)
+ )
+ )
+ (drop
+ (select
+ (i32.const 9)
+ (if i32
+ (i32.const 11)
+ (i32.const 12)
+ (i32.const 13)
+ )
+ (i32.const 10)
+ )
+ )
+ (drop
+ (select
+ (i32.const 9)
+ (i32.const 10)
+ (if i32
+ (i32.const 11)
+ (i32.const 12)
+ (i32.const 13)
+ )
+ )
+ )
+ (drop
+ (select
+ (if i32
+ (i32.const 11)
+ (i32.const 12)
+ (i32.const 13)
+ )
+ (i32.const 14)
+ (if i32
+ (i32.const 15)
+ (i32.const 16)
+ (i32.const 17)
+ )
+ )
+ )
+ (drop (i32.add (i32.const 1) (return)))
+ (drop (i32.add (i32.const 1) (unreachable)))
+ (drop
+ (if i32
+ (if i32
+ (i32.const 5)
+ (i32.const 6)
+ (i32.const 7)
+ )
+ (i32.const 8)
+ (if i32
+ (i32.const 9)
+ (i32.const 10)
+ (i32.const 11)
+ )
+ )
+ )
+ (drop
+ (block $temp i32
+ (br_if $temp
+ (i32.const 1)
+ (i32.const 2)
+ )
+ )
+ )
+ )
+ )
+ (func $flatten-return-value (result i32)
+ (drop (i32.add (i32.const 1) (return (i32.const 2))))
+ (i32.const 3)
+ )
+ (func $unbug
+ (local $12 i32)
+ (local $432 i32)
+ (local $430 i32)
+ (local $431 i32)
+ (local $9 i32)
+ (local $5 i32)
+ (local $433 i32)
+ (drop
+ (block i32
+ (if
+ (i32.eq
+ (get_local $12)
+ (i32.const 65535)
+ )
+ (block
+ (block $label$78
+ (set_local $430
+ (i32.const 0)
+ )
+ )
+ (set_local $432
+ (get_local $430)
+ )
+ )
+ (block
+ (block $label$79
+ (set_local $431
+ (i32.lt_u
+ (get_local $9)
+ (i32.load16_u offset=2
+ (i32.add
+ (get_local $5)
+ (i32.mul
+ (get_local $12)
+ (i32.const 12)
+ )
+ )
+ )
+ )
+ )
+ )
+ (set_local $432
+ (get_local $431)
+ )
+ )
+ )
+ (set_local $433
+ (i32.const 1)
+ )
+ (i32.xor
+ (get_local $432)
+ (get_local $433)
+ )
+ )
+ )
+ )
+ (func $outer-block-typed (type $3) (param $var$0 i32) (result i32)
+ (block i32
+ (i32.add
+ (i32.const 1)
+ (block $label$0 i32
+ (i32.const 16)
+ )
+ )
+ )
+ )
+ (func $nested-br_if-with-value (result i32)
+ (local $0 i32)
+ (block $label$0 i32
+ (drop
+ (br_if $label$0
+ (i32.const 0)
+ (block i32
+ (get_local $0)
+ )
+ )
+ )
+ (i32.const 1)
+ )
+ )
+)