(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) ) ) ) )