blob: c037c95ef9082539c3aa13f0ad0b66707600d1a7 [file] [edit]
(module
(type $0 (func))
(type $1 (func (param i32 i32) (result i32)))
(type $2 (func (result i32)))
(memory $0 0)
(func $ifs (; 0 ;) (type $0)
(if
(i32.const 0)
(nop)
)
(block
(drop
(i32.const 0)
)
(nop)
)
(if
(i32.const 0)
(nop)
(unreachable)
)
(drop
(block (result i32)
(drop
(i32.const 0)
)
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(drop
(if (result i32)
(i32.const 0)
(i32.add
(i32.const 1)
(i32.const 2)
)
(i32.add
(i32.const 1)
(i32.const 333333333)
)
)
)
)
(func $ifs-blocks (; 1 ;) (type $0)
(block
(drop
(i32.const 0)
)
(block
(nop)
)
)
(block
(if
(i32.const 0)
(unreachable)
(block
)
)
(nop)
)
(block
(if
(i32.const 0)
(block
)
(unreachable)
)
(nop)
)
(if
(i32.const 0)
(block
(nop)
(unreachable)
)
(nop)
)
(if
(i32.const 0)
(nop)
(block
(nop)
(unreachable)
)
)
)
(func $ifs-blocks-big (; 2 ;) (type $0)
(block
(drop
(i32.const 0)
)
(block
(drop
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
)
(block
(if
(i32.const 0)
(unreachable)
(block
)
)
(drop
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(block
(if
(i32.const 0)
(block
)
(unreachable)
)
(drop
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(if
(i32.const 0)
(block
(drop
(i32.add
(i32.const 1)
(i32.const 2)
)
)
(unreachable)
)
(drop
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(if
(i32.const 0)
(drop
(i32.add
(i32.const 1)
(i32.const 2)
)
)
(block
(drop
(i32.add
(i32.const 1)
(i32.const 2)
)
)
(unreachable)
)
)
)
(func $ifs-blocks-long (; 3 ;) (type $0)
(block
(if
(i32.const 1)
(block
(drop
(i32.const -1234)
)
(drop
(i32.const -1000)
)
)
(drop
(i32.const 999)
)
)
(drop
(i32.const 1)
)
(nop)
(unreachable)
)
(drop
(block (result i32)
(if
(i32.const 2)
(block
(drop
(i32.const -1234)
)
(drop
(i32.const -1000)
)
)
(drop
(i32.const 999)
)
)
(drop
(i32.const 1)
)
(nop)
(unreachable)
(i32.const 2)
)
)
(drop
(block (result i32)
(if
(i32.const 3)
(block
(drop
(i32.const -1234)
)
(drop
(i32.const -1000)
)
)
(drop
(i32.const 999)
)
)
(drop
(i32.const 1)
)
(nop)
(i32.const 2)
)
)
)
(func $if-worth-it-i-dunno (; 4 ;) (type $0)
(block $folding-inner0
(block
(if
(i32.const 0)
(if
(i32.const 0)
(block
(drop
(i32.const -1234)
)
(drop
(i32.const -1000)
)
(br $folding-inner0)
)
(block
(drop
(i32.const 999)
)
(drop
(i32.const 1)
)
(br $folding-inner0)
)
)
)
(if
(i32.const 0)
(block
(if
(i32.const 0)
(block
(drop
(i32.const -1234)
)
(drop
(i32.const -1000)
)
)
(block
(drop
(i32.const 999)
)
(drop
(i32.const 1)
)
)
)
(unreachable)
(br $folding-inner0)
)
)
(if
(i32.const 0)
(block
(if
(i32.const 0)
(block
)
(block
(drop
(i32.const 999)
)
(drop
(i32.const 1)
)
)
)
(br $folding-inner0)
)
)
(if
(i32.const 0)
(block
(if
(i32.const 0)
(block
(drop
(i32.const -1234)
)
(drop
(i32.const -1000)
)
)
(block
)
)
(br $folding-inner0)
)
)
(block
(block
(if
(i32.const 9999)
(block
(drop
(i32.const -51234)
)
(drop
(i32.const -51000)
)
)
(block
(drop
(i32.const 5999)
)
(drop
(i32.const 51)
)
)
)
(br $folding-inner0)
)
)
(drop
(block (result i32)
(block (result i32)
(if
(i32.const 9999)
(block
(drop
(i32.const -51234)
)
(drop
(i32.const -51000)
)
)
(block
(drop
(i32.const 5999)
)
(drop
(i32.const 51)
)
)
)
(unreachable)
(i32.const 10)
)
)
)
(block
(drop
(if (result i32)
(i32.const 9999)
(block (result i32)
(drop
(i32.const -51234)
)
(drop
(i32.const -51000)
)
(unreachable)
(i32.const 10)
)
(block (result i32)
(drop
(i32.const 5999)
)
(drop
(i32.const 51)
)
(unreachable)
(i32.const 10)
)
)
)
)
)
)
(unreachable)
(unreachable)
)
(func $no-grandparent (; 5 ;) (type $0)
(if
(i32.const 9999)
(block
(drop
(i32.const -51234)
)
(drop
(i32.const -51000)
)
(unreachable)
(unreachable)
)
(block
(drop
(i32.const 5999)
)
(drop
(i32.const 51)
)
(unreachable)
(unreachable)
)
)
)
(func $yes-grandparent (; 6 ;) (type $0)
(block
(if
(i32.const 9999)
(block
(drop
(i32.const -51234)
)
(drop
(i32.const -51000)
)
)
(block
(drop
(i32.const 5999)
)
(drop
(i32.const 51)
)
)
)
(unreachable)
(unreachable)
)
)
(func $ifs-named-block (; 7 ;) (type $1) (param $x i32) (param $y i32) (result i32)
(block $out
(block $out2
(block
(drop
(get_local $x)
)
(block
(br_if $out
(get_local $y)
)
(nop)
)
)
(block
(if
(get_local $x)
(br_if $out
(get_local $y)
)
(br_if $out2
(get_local $y)
)
)
(nop)
)
(if
(i32.const 1234)
(if
(get_local $x)
(block
(nop)
(br_if $out
(get_local $y)
)
(nop)
)
(block
(nop)
(br_if $out2
(get_local $y)
)
(nop)
)
)
)
(if
(get_local $x)
(block $left
(br_if $left
(get_local $y)
)
(nop)
)
(block
(br_if $out
(get_local $y)
)
(nop)
)
)
(if
(get_local $x)
(block
(br_if $out
(get_local $y)
)
(nop)
)
(block $right
(br_if $right
(get_local $y)
)
(nop)
)
)
)
(return
(i32.const 10)
)
)
(return
(i32.const 20)
)
)
(func $block (; 8 ;) (type $0)
(block $x
(if
(i32.const 0)
(br $x)
)
(if
(i32.const 0)
(br $x)
)
(br $x)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(func $block2 (; 9 ;) (type $0)
(block $x
(if
(i32.const 0)
(block
(drop
(i32.const 1)
)
(drop
(i32.const 333333)
)
(br $x)
)
)
(if
(i32.const 0)
(block
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br $x)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br $x)
)
)
(func $block3 (; 10 ;) (type $0)
(block $x
(if
(i32.const 0)
(block
(drop
(i32.const 1000)
)
(br $x)
)
)
(if
(i32.const 0)
(block
(drop
(i32.const 2000)
)
(drop
(i32.const 3000)
)
(br $x)
)
)
(drop
(i32.const 4000)
)
(drop
(i32.const 5000)
)
(drop
(i32.const 6000)
)
(br $x)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(func $mixture (; 11 ;) (type $0)
(block $out
(block
(drop
(i32.const 1)
)
(block
(drop
(i32.const 2)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(br $out)
)
)
)
(block $out2
(block
(if
(i32.const 1)
(drop
(i32.const 3)
)
(block
(drop
(i32.const 4)
)
(drop
(i32.const 5)
)
)
)
(drop
(i32.const 2)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(br $out2)
)
)
(block
(block $out3
(block
(drop
(i32.const 1)
)
(block
(br $out3)
)
)
(block
(drop
(i32.const 1)
)
(block
(br $out3)
)
)
(br $out3)
)
(drop
(i32.const 2)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
)
)
(func $block-corners (; 12 ;) (type $0)
(block
(block $x
(if
(i32.const 0)
(br $x)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(drop
(block $y (result i32)
(if
(i32.const 0)
(block
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br $y
(i32.const 3)
)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br $y
(i32.const 3)
)
)
)
(drop
(block $z (result i32)
(if
(i32.const 0)
(block
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br $z
(i32.const 2)
)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(i32.const 3)
)
)
(block $w
(if
(i32.const 0)
(block
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br_if $w
(i32.const 3)
)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(block $x1
(if
(i32.const 0)
(block
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br $x1)
(nop)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(block $side
(block $x2
(br_table $x2 $side
(i32.const 0)
)
(if
(i32.const 0)
(block
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br $x2)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(block $x3
(br_table $side $x3
(i32.const 0)
)
(if
(i32.const 0)
(block
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(br $x3)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
)
)
(func $terminating (; 13 ;) (type $0)
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
)
(return)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(unreachable)
)
(func $terminating-unreachable (; 14 ;) (type $0)
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
(unreachable)
)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(unreachable)
)
(func $terminating-value (; 15 ;) (type $2) (result i32)
(block $folding-inner0
(return
(block (result i32)
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
(i32.const 4)
)
)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(unreachable)
)
(func $terminating-just-2 (; 16 ;) (type $0)
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(block
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(drop
(i32.const 10)
)
(unreachable)
)
)
)
(return)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(unreachable)
)
(func $terminating-shortness (; 17 ;) (type $0)
(block $folding-inner1
(block
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner1)
)
(if
(i32.const 3)
(block
(drop
(i32.const 10)
)
(br $folding-inner0)
)
)
)
(return)
)
(nop)
(br $folding-inner1)
)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(unreachable)
)
(func $terminating-multiple-separate (; 18 ;) (type $0)
(block $folding-inner1
(block
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 1)
(br $folding-inner1)
)
(if
(i32.const 1)
(br $folding-inner1)
)
)
(return)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(drop
(i32.const 1)
)
(unreachable)
)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(drop
(i32.const 2)
)
(unreachable)
)
(func $terminating-just-worth-it (; 19 ;) (type $0)
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
)
(return)
)
(nop)
(nop)
(nop)
(unreachable)
)
(func $terminating-not-worth-it (; 20 ;) (type $0)
(if
(i32.const 1)
(block
(nop)
(nop)
(unreachable)
)
)
(if
(i32.const 2)
(block
(nop)
(nop)
(unreachable)
)
)
(if
(i32.const 3)
(block
(nop)
(nop)
(unreachable)
)
)
)
(func $terminating-return (; 21 ;) (type $0)
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
)
(return)
)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(nop)
(return)
)
(func $terminating-return-value (; 22 ;) (type $2) (result i32)
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
(if
(i32.const 3)
(block
(nop)
(return
(i32.add
(i32.const 111111111)
(i32.const 2222222)
)
)
)
)
(return
(i32.const 1234)
)
)
)
(nop)
(return
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(func $terminating-fallthrough-value (; 23 ;) (type $2) (result i32)
(block $folding-inner0
(return
(block (result i32)
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
(if
(i32.const 3)
(block
(nop)
(return
(i32.add
(i32.const 111111111)
(i32.const 2222222)
)
)
)
)
(i32.const 1234)
)
)
)
(nop)
(return
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(func $big-return (; 24 ;) (type $2) (result i32)
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
(if
(i32.const 4)
(br $folding-inner0)
)
(if
(i32.const 5)
(br $folding-inner0)
)
(if
(i32.const 6)
(br $folding-inner0)
)
(unreachable)
)
)
(return
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(func $return-mix (; 25 ;) (type $2) (result i32)
(block $folding-inner0
(block
(if
(i32.const 1)
(br $folding-inner0)
)
(if
(i32.const 2)
(br $folding-inner0)
)
(if
(i32.const 3)
(br $folding-inner0)
)
(if
(i32.const 4)
(br $folding-inner0)
)
(if
(i32.const 3)
(return
(i32.add
(i32.const 1)
(i32.const 234567)
)
)
)
(br $folding-inner0)
)
)
(return
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(func $just-unreachable (; 26 ;) (type $0)
(unreachable)
)
(func $just-return (; 27 ;) (type $2) (result i32)
(return
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(func $drop-if-with-value-but-unreachable (; 28 ;) (type $0)
(if
(i32.const 0)
(nop)
)
(block
(drop
(i32.const 0)
)
(block
(nop)
)
)
(if
(i32.const 0)
(nop)
(unreachable)
)
(nop)
(drop
(block (result i32)
(drop
(unreachable)
)
(block (result i32)
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
)
(drop
(if (result i32)
(i32.const 0)
(i32.add
(i32.const 1)
(i32.const 2)
)
(i32.add
(i32.const 1)
(i32.const 333333333)
)
)
)
)
(func $nested-control-flow (; 29 ;) (type $0)
(block $out
(block
(block $x
(if
(i32.const 0)
(br $x)
)
(if
(i32.const 0)
(br $x)
)
(br $x)
)
(if
(i32.const 1)
(br $out)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(drop
(i32.const 3)
)
)
)
(func $nested-control-flow-dangerous (; 30 ;) (type $0)
(block $folding-inner0
(block $out
(block
(if
(i32.const 0)
(block
(if
(i32.const 1)
(br $out)
)
(br $folding-inner0)
)
)
(if
(i32.const 0)
(block
(if
(i32.const 1)
(br $out)
)
(br $folding-inner0)
)
)
(if
(i32.const 1)
(br $out)
)
(br $folding-inner0)
)
(drop
(i32.const 3)
)
)
(return)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(return)
)
(func $nested-control-flow-dangerous-but-ok (; 31 ;) (type $0)
(block $folding-inner0
(block
(block $middle
(block
(if
(i32.const 0)
(block
(if
(i32.add
(i32.const 0)
(i32.const 1)
)
(br $middle)
)
(br $folding-inner0)
)
)
(if
(i32.const 0)
(block
(if
(i32.add
(i32.const 0)
(i32.const 1)
)
(br $middle)
)
(br $folding-inner0)
)
)
(if
(i32.add
(i32.const 0)
(i32.const 1)
)
(br $middle)
)
(br $folding-inner0)
)
)
(drop
(i32.const 3)
)
)
(return)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(return)
)
(func $nested-control-flow-dangerous-but-ok-b (; 32 ;) (type $0)
(block $out
(block $middle
(block
(if
(i32.const 0)
(block
(if
(i32.add
(i32.const 0)
(i32.const 1)
)
(br $middle)
)
(br $out)
)
)
(if
(i32.const 0)
(block
(if
(i32.add
(i32.const 0)
(i32.const 1)
)
(br $middle)
)
(br $out)
)
)
(if
(i32.add
(i32.const 0)
(i32.const 1)
)
(br $middle)
)
)
)
(unreachable)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(drop
(i32.const 3)
)
(drop
(i32.const 4)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
(drop
(i32.const 3)
)
(drop
(i32.const 4)
)
)
(func $nested-control-flow-dangerous-but-ok-c (; 33 ;) (type $0)
(block $x
(block
(block $out
(block
(if
(i32.const 0)
(br $out)
)
(if
(i32.const 0)
(br $out)
)
(br $out)
)
(unreachable)
)
(if
(i32.add
(i32.const 0)
(i32.const 1)
)
(br $x)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(unreachable)
)
(drop
(i32.const 5)
)
)
(func $nested-control-flow-dangerous-but-ok-d (; 34 ;) (type $0)
(block
(block $out
(block
(if
(i32.const 0)
(br $out)
)
(if
(i32.const 0)
(br $out)
)
(br $out)
)
)
(block $x
(if
(i32.add
(i32.const 0)
(i32.const 1)
)
(br $x)
)
)
(drop
(i32.const 1)
)
(drop
(i32.const 2)
)
)
(drop
(i32.const 3)
)
)
)