(module
 (type $none_=>_none (func))
 (type $i32_=>_none (func (param i32)))
 (type $i32_=>_i32 (func (param i32) (result 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)
   )
  )
 )
)
