(module
 (type $none_=>_none (func))
 (type $i32_=>_none (func (param i32)))
 (type $i32_=>_i32 (func (param i32) (result i32)))
 (import "env" "memory" (memory $memory 256 256))
 (data (global.get $__memory_base) "dynamicLibrary.asm.js")
 (import "env" "__memory_base" (global $__memory_base i32))
 (import "env" "memoryBase" (global $memoryBase$asm2wasm$import i32))
 (import "env" "abortStackOverflow" (func $abortStackOverflow (param i32)))
 (import "env" "_puts" (func $_puts (param i32) (result i32)))
 (global $STACKTOP (mut i32) (i32.const 0))
 (global $STACK_MAX (mut i32) (i32.const 0))
 (global $_global i32 (i32.const 5242912))
 (export "__ZN3FooC2Ev" (func $__ZN3FooC2Ev))
 (export "__post_instantiate" (func $__post_instantiate))
 (export "runPostSets" (func $runPostSets))
 (export "_global" (global $_global))
 (func $__ZN3FooC2Ev (; has Stack IR ;) (param $0 i32)
  (local.set $0
   (global.get $STACKTOP)
  )
  (global.set $STACKTOP
   (i32.add
    (global.get $STACKTOP)
    (i32.const 16)
   )
  )
  (if
   (i32.ge_s
    (global.get $STACKTOP)
    (global.get $STACK_MAX)
   )
   (call $abortStackOverflow
    (i32.const 16)
   )
  )
  (drop
   (call $_puts
    (global.get $memoryBase$asm2wasm$import)
   )
  )
  (global.set $STACKTOP
   (local.get $0)
  )
 )
 (func $runPostSets (; has Stack IR ;)
  (nop)
 )
 (func $__post_instantiate (; has Stack IR ;)
  (global.set $STACKTOP
   (i32.add
    (global.get $memoryBase$asm2wasm$import)
    (i32.const 32)
   )
  )
  (global.set $STACK_MAX
   (i32.add
    (global.get $STACKTOP)
    (i32.const 5242880)
   )
  )
  (call $__ZN3FooC2Ev
   (i32.add
    (global.get $memoryBase$asm2wasm$import)
    (i32.const 5242912)
   )
  )
 )
)
