blob: 3f21ae0b3aa124a77a5e0e2e936650312040c727 [file] [log] [blame] [edit]
(module
(type $none_=>_none (func))
(type $none_=>_i32 (func (result i32)))
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
(type $i32_=>_i32 (func (param i32) (result i32)))
(func $ifs
(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
(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
(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
(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
(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
(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
(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 (param $x i32) (param $y i32) (result i32)
(block $out
(block $out2
(block
(drop
(local.get $x)
)
(block
(br_if $out
(local.get $y)
)
(nop)
)
)
(block
(if
(local.get $x)
(br_if $out
(local.get $y)
)
(br_if $out2
(local.get $y)
)
)
(nop)
)
(if
(i32.const 1234)
(if
(local.get $x)
(block
(nop)
(br_if $out
(local.get $y)
)
(nop)
)
(block
(nop)
(br_if $out2
(local.get $y)
)
(nop)
)
)
)
(if
(local.get $x)
(block $left
(br_if $left
(local.get $y)
)
(nop)
)
(block
(br_if $out
(local.get $y)
)
(nop)
)
)
(if
(local.get $x)
(block
(br_if $out
(local.get $y)
)
(nop)
)
(block $right
(br_if $right
(local.get $y)
)
(nop)
)
)
)
(return
(i32.const 10)
)
)
(return
(i32.const 20)
)
)
(func $block
(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
(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
(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
(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
(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
(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
(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 (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
(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
(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
(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
(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
(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
(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 (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 (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 (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 (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
(unreachable)
)
(func $just-return (result i32)
(return
(i32.add
(i32.const 1)
(i32.const 2)
)
)
)
(func $drop-if-with-value-but-unreachable
(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
(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
(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
(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
(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
(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
(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)
)
)
(func $if-suffix (param $x i32) (result i32)
(block
(if
(local.get $x)
(block
)
(drop
(call $if-suffix
(i32.const -1)
)
)
)
(local.set $x
(i32.const 1)
)
)
(block (result i32)
(if
(local.get $x)
(block
)
(drop
(call $if-suffix
(i32.const -2)
)
)
)
(i32.const 2)
)
)
)