blob: 2b3111e91b3881d0281e6900c1eac83fb10cc050 [file] [log] [blame] [edit]
(module
(type $i32_i32_=>_none (func (param i32 i32)))
(type $i32_=>_none (func (param i32)))
(type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
(type $i32_=>_i32 (func (param i32) (result i32)))
(type $none_=>_i32 (func (result i32)))
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
(import "rt" "retain" (func $~lib/rt/pure/__retain (param i32) (result i32)))
(import "rt" "release" (func $~lib/rt/pure/__release (param i32)))
(import "rc" "getRetainedRef" (func $getRetainedRef (result i32)))
(func $eliminates.linearArgument (param $0 i32)
(local.set $0
(local.get $0)
)
(nop)
)
(func $eliminates.linearLocal (param $0 i32)
(local $1 i32)
(local.set $1
(local.get $0)
)
(nop)
)
(func $eliminates.linearChain (param $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local.set $1
(local.get $0)
)
(local.set $2
(local.get $1)
)
(local.set $3
(local.get $2)
)
(nop)
(nop)
(nop)
)
(func $eliminates.balancedReleases (param $0 i32) (param $cond i32)
(local $2 i32)
(local.set $2
(local.get $0)
)
(if
(local.get $cond)
(nop)
(nop)
)
)
(func $eliminates.partialReleases (param $0 i32) (param $cond i32)
(local $2 i32)
(local.set $2
(local.get $0)
)
(if
(local.get $cond)
(nop)
)
)
(func $eliminates.balancedRetains (param $0 i32) (param $cond1 i32) (param $cond2 i32)
(local $3 i32)
(if
(local.get $cond1)
(if
(local.get $cond2)
(local.set $3
(local.get $0)
)
(local.set $3
(local.get $0)
)
)
(local.set $3
(local.get $0)
)
)
(nop)
)
(func $eliminates.balancedInsideLoop (param $0 i32) (param $cond i32)
(local $flat i32)
(block $break|0
(loop $continue|0
(local.set $flat
(i32.eqz
(local.get $cond)
)
)
(br_if $break|0
(local.get $flat)
)
(local.set $0
(local.get $0)
)
(nop)
(br $continue|0)
)
(unreachable)
)
)
(func $eliminates.balancedOutsideLoop (param $0 i32) (param $cond i32)
(local $flat i32)
(local.set $0
(local.get $0)
)
(block $break|0
(loop $continue|0
(local.set $flat
(i32.eqz
(local.get $cond)
)
)
(br_if $break|0
(local.get $flat)
)
(br $continue|0)
)
(unreachable)
)
(nop)
)
(func $eliminates.balancedInsideOutsideLoop (param $0 i32) (param $cond i32)
(local $flat i32)
(local.set $0
(local.get $0)
)
(block $break|0
(loop $continue|0
(local.set $flat
(i32.eqz
(local.get $cond)
)
)
(br_if $break|0
(local.get $flat)
)
(nop)
(local.set $0
(local.get $0)
)
(br $continue|0)
)
(unreachable)
)
(nop)
)
(func $eliminates.balancedInsideOutsideLoopWithBranch (param $0 i32) (param $cond1 i32) (param $cond2 i32)
(local $flat i32)
(local.set $0
(local.get $0)
)
(block $break|0
(loop $continue|0
(local.set $flat
(i32.eqz
(local.get $cond1)
)
)
(br_if $break|0
(local.get $flat)
)
(if
(local.get $cond2)
(block $block
(nop)
(return)
)
)
(nop)
(local.set $0
(local.get $0)
)
(br $continue|0)
)
(unreachable)
)
(nop)
)
(func $eliminates.replace (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local.set $0
(local.get $0)
)
(local.set $1
(local.get $1)
)
(local.set $2
(local.get $1)
)
(local.set $3
(local.get $0)
)
(if
(i32.ne
(local.get $2)
(local.get $3)
)
(local.set $2
(local.get $2)
)
(nop)
)
(local.set $0
(local.get $2)
)
(nop)
(nop)
)
(func $eliminates.replaceAlreadyRetained (param $0 i32) (result i32)
(local $1 i32)
(block $block
(local.set $0
(local.get $0)
)
(local.set $1
(call $getRetainedRef)
)
(nop)
(local.set $0
(local.get $1)
)
(return
(local.get $0)
)
)
)
(func $keeps.partialRetains (param $0 i32) (param $cond i32)
(if
(local.get $cond)
(local.set $0
(call $~lib/rt/pure/__retain
(local.get $0)
)
)
)
(call $~lib/rt/pure/__release
(local.get $0)
)
)
(func $keeps.reachesReturn (param $0 i32) (param $cond i32) (result i32)
(block $block
(local.set $0
(call $~lib/rt/pure/__retain
(local.get $0)
)
)
(if
(local.get $cond)
(return
(local.get $0)
)
)
(call $~lib/rt/pure/__release
(local.get $0)
)
(return
(i32.const 0)
)
)
)
)