(module
 (type $none_=>_none (func))
 (type $i32_=>_none (func (param i32)))
 (type $none_=>_i32 (func (result i32)))
 (type $i32_=>_i32 (func (param i32) (result i32)))
 (type $f32_=>_none (func (param f32)))
 (type $none_=>_f64 (func (result f64)))
 (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
 (type $f64_f64_=>_f64 (func (param f64 f64) (result f64)))
 (type $i32_i32_=>_none (func (param i32 i32)))
 (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
 (type $i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32 i32)))
 (type $i32_f32_=>_none (func (param i32 f32)))
 (type $i32_f64_f32_=>_none (func (param i32 f64 f32)))
 (type $f32_f64_=>_none (func (param f32 f64)))
 (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
 (type $f64_=>_i32 (func (param f64) (result i32)))
 (type $f64_i32_=>_i32 (func (param f64 i32) (result i32)))
 (type $none_=>_f32 (func (result f32)))
 (type $i32_f32_f64_=>_f32 (func (param i32 f32 f64) (result f32)))
 (type $f64_=>_f64 (func (param f64) (result f64)))
 (import "env" "memory" (memory $memory 256 256))
 (data (global.get $__memory_base) "unit.asm.js")
 (import "env" "table" (table $table 25 25 funcref))
 (elem (global.get $__table_base) $big_negative $big_negative $big_negative $big_negative $w $w $importedDoubles $w $fr $cneg $fr $fr $fr $fr $fr $fr $vi $vi $vi $vi $vi $vi $vi $vi $ii)
 (import "env" "__memory_base" (global $__memory_base i32))
 (import "env" "__table_base" (global $__table_base i32))
 (import "env" "gb" (global $n$asm2wasm$import i32))
 (import "env" "setTempRet0" (func $setTempRet0 (param i32) (result i32)))
 (import "env" "abort" (func $abort (param f64) (result f64)))
 (import "env" "print" (func $print (param i32)))
 (import "env" "h" (func $h (param i32)))
 (import "env" "return_int" (func $return_int (result i32)))
 (import "env" "emscripten_log" (func $emscripten_log))
 (import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32)))
 (import "asm2wasm" "f64-rem" (func $f64-rem (param f64 f64) (result f64)))
 (global $Int (mut i32) (i32.const 0))
 (global $nonZero (mut i32) (i32.const 1337))
 (global $exportedNumber i32 (i32.const 42))
 (export "big_negative" (func $big_negative))
 (export "pick" (func $big_negative))
 (export "doubleCompares" (func $doubleCompares))
 (export "intOps" (func $intOps))
 (export "conversions" (func $conversions))
 (export "switcher" (func $switcher))
 (export "frem" (func $frem))
 (export "frem_float" (func $frem_float))
 (export "big_uint_div_u" (func $big_uint_div_u))
 (export "trapping_sint_div_s" (func $trapping_sint_div_s))
 (export "fr" (func $fr))
 (export "negZero" (func $negZero))
 (export "neg" (func $neg))
 (export "smallCompare" (func $smallCompare))
 (export "cneg_nosemicolon" (func $cneg_nosemicolon))
 (export "forLoop" (func $forLoop))
 (export "ceiling_32_64" (func $ceiling_32_64))
 (export "aborts" (func $aborts))
 (export "continues" (func $continues))
 (export "bitcasts" (func $bitcasts))
 (export "recursiveBlockMerging" (func $recursiveBlockMerging))
 (export "lb" (func $lb))
 (export "zeroInit" (func $zeroInit))
 (export "phi" (func $phi))
 (export "smallIf" (func $smallIf))
 (export "dropCall" (func $dropCall))
 (export "useGlobalSet" (func $useGlobalSet))
 (export "usesGlobalSet2" (func $usesGlobalSet2))
 (export "breakThroughMany" (func $breakThroughMany))
 (export "ifChainEmpty" (func $ifChainEmpty))
 (export "heap8NoShift" (func $heap8NoShift))
 (export "conditionalTypeFun" (func $conditionalTypeFun))
 (export "loadSigned" (func $loadSigned))
 (export "globalOpts" (func $globalOpts))
 (export "dropCallImport" (func $dropCallImport))
 (export "loophi" (func $loophi))
 (export "loophi2" (func $loophi2))
 (export "loophi2b" (func $loophi2b))
 (export "relooperJumpThreading" (func $relooperJumpThreading))
 (export "relooperJumpThreading__ZN4game14preloadweaponsEv" (func $relooperJumpThreading__ZN4game14preloadweaponsEv))
 (export "__Z12multi_varargiz" (func $__Z12multi_varargiz))
 (export "jumpThreadDrop" (func $jumpThreadDrop))
 (export "dropIgnoredImportInIf" (func $dropIgnoredImportInIf))
 (export "dropIgnoredImportsInIf" (func $dropIgnoredImportsInIf))
 (export "relooperJumpThreading_irreducible" (func $relooperJumpThreading_irreducible))
 (export "store_fround" (func $store_fround))
 (export "exportedNumber" (global $exportedNumber))
 (export "relocatableAndModules" (func $relocatableAndModules))
 (export "exported_f32_user" (func $exported_f32_user))
 (export "keepAlive" (func $keepAlive))
 (func $big_negative (; has Stack IR ;)
  (nop)
 )
 (func $importedDoubles (; has Stack IR ;) (result f64)
  (if
   (i32.gt_s
    (global.get $Int)
    (i32.const 0)
   )
   (return
    (f64.const -3.4)
   )
  )
  (f64.const 1.2)
 )
 (func $doubleCompares (; has Stack IR ;) (param $0 f64) (param $1 f64) (result f64)
  (if
   (f64.gt
    (local.get $0)
    (f64.const 0)
   )
   (return
    (f64.const 1.2)
   )
  )
  (if
   (f64.gt
    (local.get $0)
    (f64.const 0)
   )
   (return
    (f64.const -3.4)
   )
  )
  (if
   (i32.gt_s
    (global.get $n$asm2wasm$import)
    (i32.const 0)
   )
   (return
    (f64.const 5.6)
   )
  )
  (if
   (f64.lt
    (local.get $0)
    (local.get $1)
   )
   (return
    (local.get $0)
   )
  )
  (local.get $1)
 )
 (func $intOps (; has Stack IR ;) (param $0 i32) (result i32)
  (i32.eqz
   (local.get $0)
  )
 )
 (func $conversions (; has Stack IR ;) (param $0 i32) (param $1 f64) (param $2 f32)
  (drop
   (call $f64-to-int
    (local.get $1)
   )
  )
  (drop
   (call $f64-to-int
    (f64.promote_f32
     (local.get $2)
    )
   )
  )
 )
 (func $switcher (; has Stack IR ;) (param $0 i32) (result i32)
  (block $switch
   (block $switch-case0
    (block $switch-case
     (br_table $switch-case $switch-case0 $switch
      (i32.sub
       (local.get $0)
       (i32.const 1)
      )
     )
    )
    (return
     (i32.const 1)
    )
   )
   (return
    (i32.const 2)
   )
  )
  (block $switch1
   (block $switch-case3
    (block $switch-case2
     (br_table $switch-case3 $switch1 $switch1 $switch1 $switch1 $switch1 $switch1 $switch-case2 $switch1
      (i32.sub
       (local.get $0)
       (i32.const 5)
      )
     )
    )
    (return
     (i32.const 121)
    )
   )
   (return
    (i32.const 51)
   )
  )
  (loop $label$continue$L1
   (block $label$break$L1
    (loop $label$continue$L3
     (block $label$break$L3
      (br_table $label$break$L3 $label$break$L1 $label$break$L1 $label$break$L1 $label$break$L1 $label$break$L1 $label$continue$L3 $label$break$L1
       (i32.add
        (local.get $0)
        (i32.const -110)
       )
      )
     )
    )
    (call $h
     (i32.const 120)
    )
    (br $label$continue$L1)
   )
  )
  (i32.const 0)
 )
 (func $frem (; has Stack IR ;) (result f64)
  (call $f64-rem
   (f64.const 5.5)
   (f64.const 1.2)
  )
 )
 (func $frem_float (; has Stack IR ;) (result f32)
  (f32.demote_f64
   (call $f64-rem
    (f64.const 5.5)
    (f64.const 1.2000000476837158)
   )
  )
 )
 (func $big_uint_div_u (; has Stack IR ;) (result i32)
  (i32.const 2147483647)
 )
 (func $trapping_sint_div_s (; has Stack IR ;) (result i32)
  (i32.const 0)
 )
 (func $fr (; has Stack IR ;) (param $0 f32)
  (nop)
 )
 (func $negZero (; has Stack IR ;) (result f64)
  (f64.const -0)
 )
 (func $neg (; has Stack IR ;)
  (call_indirect (type $f32_=>_none)
   (f32.const -0)
   (i32.const 9)
  )
 )
 (func $cneg (; has Stack IR ;) (param $0 f32)
  (call_indirect (type $f32_=>_none)
   (local.get $0)
   (i32.const 9)
  )
 )
 (func $smallCompare (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32)
  (if (result i32)
   (i32.lt_u
    (local.tee $0
     (select
      (i32.add
       (local.get $0)
       (i32.const 1)
      )
      (local.get $0)
      (i32.lt_s
       (local.get $0)
       (local.get $1)
      )
     )
    )
    (local.get $1)
   )
   (i32.add
    (local.get $0)
    (i32.const 1)
   )
   (local.get $0)
  )
 )
 (func $cneg_nosemicolon (; has Stack IR ;)
  (call_indirect (type $i32_=>_none)
   (i32.const 1)
   (i32.const 17)
  )
 )
 (func $forLoop (; has Stack IR ;)
  (local $0 i32)
  (local.set $0
   (i32.const 1)
  )
  (loop $for-in
   (if
    (i32.lt_s
     (local.get $0)
     (i32.const 200)
    )
    (block
     (call $h
      (local.get $0)
     )
     (local.set $0
      (i32.add
       (local.get $0)
       (i32.const 1)
      )
     )
     (br $for-in)
    )
   )
  )
 )
 (func $ceiling_32_64 (; has Stack IR ;) (param $0 f32) (param $1 f64)
  (nop)
 )
 (func $aborts (; has Stack IR ;)
  (drop
   (call $abort
    (f64.const 0)
   )
  )
  (drop
   (call $abort
    (f64.convert_i32_s
     (i32.const 55)
    )
   )
  )
  (drop
   (call $abort
    (f64.const 0)
   )
  )
  (drop
   (call $abort
    (f64.const 12.34)
   )
  )
  (drop
   (call $abort
    (f64.const 56.779998779296875)
   )
  )
 )
 (func $continues (; has Stack IR ;)
  (loop $while-in
   (call $print
    (i32.const 1)
   )
   (loop $unlikely-continue
    (call $print
     (i32.const 5)
    )
    (br_if $unlikely-continue
     (call $return_int)
    )
   )
   (call $print
    (i32.const 2)
   )
   (br $while-in)
  )
 )
 (func $bitcasts (; has Stack IR ;) (param $0 i32) (param $1 f32)
  (nop)
 )
 (func $recursiveBlockMerging (; has Stack IR ;) (param $0 i32) (result i32)
  (drop
   (call $lb
    (i32.add
     (local.get $0)
     (i32.const 22)
    )
   )
  )
  (drop
   (call $lb
    (i32.const 1)
   )
  )
  (drop
   (call $lb
    (i32.const 2)
   )
  )
  (i32.add
   (i32.add
    (i32.add
     (call $lb
      (i32.const 3)
     )
     (local.get $0)
    )
    (block (result i32)
     (drop
      (call $lb
       (i32.const 4)
      )
     )
     (drop
      (call $lb
       (i32.const 5)
      )
     )
     (drop
      (call $lb
       (i32.const 6)
      )
     )
     (call $lb
      (i32.const 7)
     )
    )
   )
   (block (result i32)
    (drop
     (call $lb
      (i32.const 8)
     )
    )
    (drop
     (call $lb
      (i32.const 9)
     )
    )
    (drop
     (call $lb
      (i32.const 10)
     )
    )
    (drop
     (call $lb
      (i32.const 11)
     )
    )
    (call $lb
     (i32.const 12)
    )
   )
  )
 )
 (func $lb (; has Stack IR ;) (param $0 i32) (result i32)
  (i32.store
   (local.get $0)
   (i32.add
    (global.get $n$asm2wasm$import)
    (i32.const 144)
   )
  )
  (i32.const 0)
 )
 (func $zeroInit (; has Stack IR ;) (param $0 i32)
  (local $1 i32)
  (if
   (i32.eq
    (if (result i32)
     (call $lb
      (i32.const 0)
     )
     (if (result i32)
      (call $lb
       (i32.const 1)
      )
      (i32.const 3)
      (local.get $1)
     )
     (i32.const 3)
    )
    (i32.const 3)
   )
   (drop
    (call $lb
     (i32.const 2)
    )
   )
  )
 )
 (func $phi (; has Stack IR ;) (result i32)
  (block $do-once (result i32)
   (drop
    (br_if $do-once
     (i32.const 0)
     (call $lb
      (i32.const 1)
     )
    )
   )
   (i32.const 1)
  )
 )
 (func $smallIf (; has Stack IR ;)
  (if
   (call $return_int)
   (drop
    (call $lb
     (i32.const 3)
    )
   )
  )
 )
 (func $dropCall (; has Stack IR ;) (result i32)
  (if
   (call $return_int)
   (block
    (drop
     (call $phi)
    )
    (drop
     (call $setTempRet0
      (i32.const 10)
     )
    )
    (call $zeroInit
     (call $setTempRet0
      (i32.const 10)
     )
    )
   )
  )
  (call $phi)
 )
 (func $useGlobalSet (; has Stack IR ;) (result i32)
  (global.set $Int
   (i32.const 10)
  )
  (global.set $Int
   (i32.const 20)
  )
  (global.set $Int
   (i32.const 30)
  )
  (i32.const 30)
 )
 (func $usesGlobalSet2 (; has Stack IR ;) (result i32)
  (global.set $Int
   (i32.const 40)
  )
  (i32.const 50)
 )
 (func $breakThroughMany (; has Stack IR ;) (param $0 i32)
  (if
   (local.get $0)
   (loop $while-in
    (if
     (local.get $0)
     (block
      (call $zeroInit
       (i32.const 0)
      )
      (br $while-in)
     )
    )
   )
  )
 )
 (func $ifChainEmpty (; has Stack IR ;) (param $0 i32) (result i32)
  (if
   (i32.eq
    (local.get $0)
    (i32.const 4)
   )
   (return
    (i32.const 0)
   )
  )
  (i32.const 0)
 )
 (func $heap8NoShift (; has Stack IR ;) (param $0 i32) (result i32)
  (i32.load8_s
   (local.get $0)
  )
 )
 (func $conditionalTypeFun (; has Stack IR ;)
  (drop
   (if (result i32)
    (call $return_int)
    (call $f64-to-int
     (call $abort
      (f64.convert_i32_s
       (i32.const 5)
      )
     )
    )
    (i32.const 2)
   )
  )
  (drop
   (if (result f64)
    (call $return_int)
    (call $abort
     (f64.convert_i32_s
      (i32.const 7)
     )
    )
    (f64.const 4.5)
   )
  )
 )
 (func $loadSigned (; has Stack IR ;) (param $0 i32)
  (call $loadSigned
   (i32.load8_s
    (local.get $0)
   )
  )
  (call $loadSigned
   (i32.load8_s
    (local.get $0)
   )
  )
  (call $loadSigned
   (i32.load16_s
    (local.get $0)
   )
  )
  (call $loadSigned
   (i32.load16_s
    (local.get $0)
   )
  )
  (call $loadSigned
   (i32.shr_s
    (i32.shl
     (i32.load8_s
      (local.get $0)
     )
     (i32.const 24)
    )
    (i32.const 16)
   )
  )
  (call $loadSigned
   (i32.shr_s
    (i32.shl
     (i32.load8_u
      (local.get $0)
     )
     (i32.const 16)
    )
    (i32.const 24)
   )
  )
  (call $loadSigned
   (i32.shr_s
    (i32.shl
     (i32.load16_s
      (local.get $0)
     )
     (i32.const 16)
    )
    (i32.const 24)
   )
  )
  (call $loadSigned
   (i32.shr_s
    (i32.shl
     (i32.load16_u
      (local.get $0)
     )
     (i32.const 24)
    )
    (i32.const 16)
   )
  )
 )
 (func $w (; has Stack IR ;) (result f64)
  (f64.const 0)
 )
 (func $globalOpts (; has Stack IR ;)
  (local $0 i32)
  (i32.store8
   (i32.const 13)
   (i32.load
    (i32.const 12)
   )
  )
  (call $globalOpts)
  (local.set $0
   (global.get $Int)
  )
  (if
   (call $return_int)
   (global.set $Int
    (i32.const 20)
   )
  )
  (global.set $Int
   (local.get $0)
  )
  (call $globalOpts)
  (local.set $0
   (global.get $Int)
  )
  (call $globalOpts)
  (global.set $Int
   (local.get $0)
  )
 )
 (func $dropCallImport (; has Stack IR ;)
  (if
   (call $return_int)
   (drop
    (call $return_int)
   )
  )
 )
 (func $loophi (; has Stack IR ;) (param $0 i32) (param $1 i32)
  (loop $while-in
   (block $while-out
    (call $loophi
     (local.get $0)
     (i32.const 0)
    )
    (br_if $while-out
     (select
      (local.get $0)
      (i32.const 0)
      (local.get $0)
     )
    )
    (br_if $while-in
     (i32.eq
      (local.get $1)
      (local.tee $0
       (i32.add
        (local.get $0)
        (i32.const 1)
       )
      )
     )
    )
   )
  )
 )
 (func $loophi2 (; has Stack IR ;) (result i32)
  (local $0 i32)
  (local $1 i32)
  (local $2 i32)
  (loop $label$continue$L7
   (block $label$break$L7
    (local.set $0
     (i32.const 0)
    )
    (loop $while-in
     (local.set $2
      (local.get $0)
     )
     (br_if $label$break$L7
      (select
       (call $return_int)
       (i32.const 0)
       (local.get $2)
      )
     )
     (br_if $while-in
      (local.tee $0
       (i32.add
        (local.get $0)
        (i32.const 1)
       )
      )
     )
    )
    (br $label$continue$L7)
   )
  )
  (local.get $1)
 )
 (func $loophi2b (; has Stack IR ;) (result i32)
  (local $0 i32)
  (local $1 i32)
  (loop $label$continue$L7
   (block $label$break$L7
    (local.set $0
     (i32.const 0)
    )
    (loop $while-in
     (local.set $1
      (local.get $0)
     )
     (br_if $label$break$L7
      (select
       (call $return_int)
       (i32.const 0)
       (local.get $1)
      )
     )
     (br_if $while-in
      (local.tee $0
       (i32.add
        (local.get $0)
        (i32.const 1)
       )
      )
     )
    )
    (br $label$continue$L7)
   )
  )
  (local.get $0)
 )
 (func $relooperJumpThreading (; has Stack IR ;) (param $0 i32) (result i32)
  (block $__rjto$0
   (block $__rjti$0
    (if
     (local.get $0)
     (block
      (call $h
       (i32.const 0)
      )
      (br $__rjti$0)
     )
    )
    (br $__rjto$0)
   )
   (call $h
    (i32.const 1)
   )
  )
  (call $h
   (i32.const -1)
  )
  (loop $while-in
   (br_if $while-in
    (i32.eqz
     (local.tee $0
      (i32.add
       (local.get $0)
       (i32.const 1)
      )
     )
    )
   )
  )
  (call $h
   (i32.const 2)
  )
  (call $h
   (i32.const 3)
  )
  (call $h
   (i32.const -2)
  )
  (block $__rjto$3
   (block $__rjti$3
    (block $__rjti$2
     (if
      (local.get $0)
      (block
       (call $h
        (i32.const 4)
       )
       (br_if $__rjti$2
        (i32.eq
         (local.get $0)
         (i32.const 3)
        )
       )
       (br $__rjti$3)
      )
     )
     (br $__rjto$3)
    )
    (call $h
     (i32.const 5)
    )
    (br $__rjto$3)
   )
   (call $h
    (i32.const 6)
   )
  )
  (call $h
   (i32.const -3)
  )
  (block $__rjto$5
   (block $__rjti$5
    (block $__rjti$4
     (if
      (local.get $0)
      (block
       (call $h
        (i32.const 7)
       )
       (br_if $__rjti$4
        (i32.eq
         (local.get $0)
         (i32.const 5)
        )
       )
       (br $__rjti$5)
      )
     )
     (br $__rjto$5)
    )
    (call $h
     (i32.const 8)
    )
    (br_if $__rjti$5
     (i32.eq
      (local.get $0)
      (i32.const 6)
     )
    )
    (br $__rjto$5)
   )
   (call $h
    (i32.const 9)
   )
  )
  (call $h
   (i32.const -4)
  )
  (block $label$break$L1
   (block $__rjti$6
    (if
     (local.get $0)
     (block
      (call $h
       (i32.const 10)
      )
      (br $__rjti$6)
     )
    )
    (br $label$break$L1)
   )
   (call $h
    (i32.const 11)
   )
  )
  (call $h
   (i32.const -5)
  )
  (block $label$break$L10
   (block $__rjti$8
    (block $__rjti$7
     (if
      (local.get $0)
      (block
       (call $h
        (i32.const 12)
       )
       (br_if $__rjti$7
        (i32.eq
         (local.get $0)
         (i32.const 8)
        )
       )
       (br $__rjti$8)
      )
     )
     (br $label$break$L10)
    )
    (call $h
     (i32.const 13)
    )
    (br_if $__rjti$8
     (local.get $0)
    )
    (br $label$break$L10)
   )
   (call $h
    (i32.const 14)
   )
  )
  (call $h
   (i32.const -6)
  )
  (local.get $0)
 )
 (func $relooperJumpThreading__ZN4game14preloadweaponsEv (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32)
  (loop $while-in
   (block $__rjti$1
    (if
     (local.get $1)
     (br_if $__rjti$1
      (i32.eqz
       (local.get $2)
      )
     )
     (br_if $__rjti$1
      (i32.eqz
       (local.get $3)
      )
     )
    )
    (br $while-in)
   )
   (i32.store
    (local.get $4)
    (local.get $5)
   )
   (br $while-in)
  )
 )
 (func $relooperJumpThreading_irreducible (; has Stack IR ;) (param $0 i32)
  (local $1 i32)
  (if
   (i32.eq
    (local.get $0)
    (i32.const 100)
   )
   (loop $while-in
    (call $relooperJumpThreading_irreducible
     (i32.const 1337)
    )
    (br $while-in)
   )
  )
  (local.set $1
   (select
    (i32.const 2)
    (i32.const 10)
    (i32.eq
     (local.get $0)
     (i32.const 200)
    )
   )
  )
  (if
   (i32.eq
    (local.tee $1
     (select
      (i32.const 2)
      (local.get $1)
      (i32.eq
       (local.get $0)
       (i32.const 300)
      )
     )
    )
    (i32.const 2)
   )
   (call $relooperJumpThreading_irreducible
    (i32.const 1448)
   )
  )
  (if
   (i32.eq
    (local.get $1)
    (i32.const 10)
   )
   (call $relooperJumpThreading_irreducible
    (i32.const 2000)
   )
  )
 )
 (func $__Z12multi_varargiz (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
  (if
   (local.get $3)
   (loop $while-in
    (br_if $while-in
     (i32.eqz
      (local.get $2)
     )
    )
   )
   (drop
    (call $lb
     (i32.const 1)
    )
   )
  )
 )
 (func $jumpThreadDrop (; has Stack IR ;) (result i32)
  (call $return_int)
 )
 (func $dropIgnoredImportInIf (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32)
  (if
   (local.get $0)
   (drop
    (call $lb
     (local.get $2)
    )
   )
  )
 )
 (func $dropIgnoredImportsInIf (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32)
  (drop
   (if (result i32)
    (local.get $0)
    (call $lb
     (local.get $1)
    )
    (call $lb
     (local.get $2)
    )
   )
  )
 )
 (func $store_fround (; has Stack IR ;) (param $0 i32)
  (f64.store
   (i32.const 80)
   (f64.promote_f32
    (f32.convert_i32_s
     (local.get $0)
    )
   )
  )
 )
 (func $relocatableAndModules (; has Stack IR ;) (result i32)
  (call_indirect (type $none_=>_none)
   (i32.const 10)
  )
  (call_indirect (type $none_=>_none)
   (i32.const 20)
  )
  (call_indirect (type $f64_i32_=>_i32)
   (f64.const 1.5)
   (i32.const 200)
   (i32.const 30)
  )
 )
 (func $exported_f32_user (; has Stack IR ;) (param $0 i32) (param $1 f32) (param $2 f64) (result f32)
  (local.get $1)
 )
 (func $keepAlive (; has Stack IR ;)
  (drop
   (call $f64-to-int
    (f64.const 100)
   )
  )
  (drop
   (call $f64-to-int
    (f64.const 100)
   )
  )
  (call_indirect (type $i32_=>_none)
   (i32.const 0)
   (i32.const 17)
  )
  (call_indirect (type $i32_=>_none)
   (i32.const 0)
   (block (result i32)
    (global.set $Int
     (i32.const 1)
    )
    (i32.const 17)
   )
  )
  (call $emscripten_log)
  (drop
   (call $f64-to-int
    (call $abort
     (f64.const 0)
    )
   )
  )
  (drop
   (call $f64-to-int
    (f64.sub
     (f64.const 2.31)
     (f64.mul
      (call $f64-rem
       (f64.const 9.78)
       (f64.const 1)
      )
      (f64.const 2.31)
     )
    )
   )
  )
  (global.set $nonZero
   (i32.add
    (global.get $nonZero)
    (i32.const 1)
   )
  )
 )
 (func $vi (; has Stack IR ;) (param $0 i32)
  (nop)
 )
 (func $ii (; has Stack IR ;) (param $0 i32) (result i32)
  (local.get $0)
 )
)
