blob: 31a5fdc565f62c9276fee516f529c8baca5b9543 [file] [log] [blame]
(module
(type $0 (func))
(type $1 (func (result i32)))
(memory $0 0)
(func $push1 (type $0)
(local $x i32)
(block $out
(br_if $out
(i32.const 2)
)
(set_local $x
(i32.const 1)
)
(drop
(get_local $x)
)
)
)
(func $push2 (type $0)
(local $x i32)
(local $y i32)
(block $out
(br_if $out
(i32.const 2)
)
(set_local $x
(i32.const 1)
)
(set_local $y
(i32.const 3)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
)
)
(func $push1-twice (type $0)
(local $x i32)
(block $out
(br_if $out
(i32.const 2)
)
(br_if $out
(i32.const 3)
)
(set_local $x
(i32.const 1)
)
(drop
(get_local $x)
)
)
)
(func $push1-twiceb (type $0)
(local $x i32)
(block $out
(br_if $out
(i32.const 2)
)
(nop)
(br_if $out
(i32.const 3)
)
(set_local $x
(i32.const 1)
)
(drop
(get_local $x)
)
)
)
(func $push2-twice (type $0)
(local $x i32)
(local $y i32)
(block $out
(br_if $out
(i32.const 2)
)
(br_if $out
(i32.const 2)
)
(set_local $x
(i32.const 1)
)
(set_local $y
(i32.const 3)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
)
)
(func $ignore-last (type $0)
(local $x i32)
(block $out
(set_local $x
(i32.const 1)
)
(br_if $out
(i32.const 2)
)
)
)
(func $ignore-last2 (type $0)
(local $x i32)
(block $out
(set_local $x
(i32.const 1)
)
(nop)
(nop)
(br_if $out
(i32.const 2)
)
)
)
(func $push-if (type $0)
(local $x i32)
(block $out
(if
(i32.const 2)
(nop)
)
(set_local $x
(i32.const 1)
)
(drop
(get_local $x)
)
)
)
(func $push-dropped (type $1) (result i32)
(local $x i32)
(block $out i32
(drop
(br_if $out
(i32.const 2)
(i32.const 3)
)
)
(set_local $x
(i32.const 1)
)
(drop
(get_local $x)
)
(i32.const 4)
)
)
(func $push-past-stuff (type $0)
(local $x i32)
(block $out
(call $push-past-stuff)
(drop
(i32.const 1)
)
(br_if $out
(i32.const 2)
)
(set_local $x
(i32.const 1)
)
(drop
(get_local $x)
)
)
)
(func $fail-then-push (type $0)
(local $x i32)
(local $y i32)
(block $out
(set_local $x
(i32.const 1)
)
(drop
(get_local $x)
)
(br_if $out
(i32.const 2)
)
(br_if $out
(i32.const 3)
)
(set_local $y
(i32.const 1)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
)
)
(func $used (type $0)
(local $x i32)
(block $out
(set_local $x
(i32.const 1)
)
(br_if $out
(get_local $x)
)
(drop
(get_local $x)
)
)
)
(func $not-sfa (type $0)
(local $x i32)
(set_local $x
(i32.const 1)
)
(block $out
(set_local $x
(i32.const 1)
)
(br_if $out
(i32.const 2)
)
(drop
(get_local $x)
)
)
)
(func $not-sfa2 (type $0)
(local $x i32)
(drop
(get_local $x)
)
(block $out
(set_local $x
(i32.const 1)
)
(br_if $out
(i32.const 2)
)
(drop
(get_local $x)
)
)
)
(func $used-out (type $0)
(local $x i32)
(block $out
(set_local $x
(i32.const 1)
)
(br_if $out
(i32.const 2)
)
(drop
(get_local $x)
)
)
(drop
(get_local $x)
)
)
(func $value-might-interfere (type $0)
(local $x i32)
(block $out
(br_if $out
(i32.const 2)
)
(set_local $x
(i32.load
(i32.const 0)
)
)
(drop
(get_local $x)
)
)
)
(func $value-interferes (type $0)
(local $x i32)
(block $out
(set_local $x
(i32.load
(i32.const 0)
)
)
(i32.store
(i32.const 1)
(i32.const 3)
)
(br_if $out
(i32.const 2)
)
(drop
(get_local $x)
)
)
)
(func $value-interferes-accumulation (type $0)
(local $x i32)
(block $out
(set_local $x
(i32.load
(i32.const 0)
)
)
(nop)
(i32.store
(i32.const 1)
(i32.const 3)
)
(nop)
(br_if $out
(i32.const 2)
)
(drop
(get_local $x)
)
)
)
(func $value-interferes-in-pushpoint (type $0)
(local $x i32)
(block $out
(set_local $x
(i32.load
(i32.const 0)
)
)
(if
(i32.const 1)
(call $value-interferes)
)
(drop
(get_local $x)
)
)
)
(func $values-might-interfere (type $0)
(local $x i32)
(local $y i32)
(block $out
(set_local $x
(call $push-dropped)
)
(set_local $y
(call $push-dropped)
)
(br_if $out
(i32.const 2)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
)
)
(func $unpushed-interferes (type $0)
(local $x i32)
(local $y i32)
(block $out
(set_local $x
(call $push-dropped)
)
(set_local $y
(call $push-dropped)
)
(br_if $out
(i32.const 2)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
)
(drop
(get_local $y)
)
)
(func $unpushed-ignorable (type $0)
(local $x i32)
(local $y i32)
(block $out
(set_local $x
(i32.const 1)
)
(br_if $out
(i32.const 2)
)
(set_local $y
(i32.const 3)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
)
(drop
(get_local $x)
)
)
(func $unpushed-ignorable-side-effect (type $0)
(local $x i32)
(local $y i32)
(block $out
(set_local $x
(call $push-dropped)
)
(br_if $out
(i32.const 2)
)
(set_local $y
(i32.const 3)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
)
)
(func $unpushed-side-effect-into-drop (type $0)
(local $x i32)
(block $out
(set_local $x
(call $push-dropped)
)
(br_if $out
(i32.const 1)
)
(drop
(get_local $x)
)
)
)
(func $unpushed-side-effect-into-if (type $0)
(local $x i32)
(block $out
(set_local $x
(call $push-dropped)
)
(br_if $out
(i32.const 1)
)
(if
(get_local $x)
(nop)
)
)
)
)