(module
 (type $FUNCSIG$id (func (param f64) (result i32)))
 (type $FUNCSIG$ddd (func (param f64 f64) (result f64)))
 (type $FUNCSIG$vf (func (param f32)))
 (type $FUNCSIG$vi (func (param i32)))
 (type $FUNCSIG$v (func))
 (type $FUNCSIG$idi (func (param f64 i32) (result i32)))
 (type $FUNCSIG$ii (func (param i32) (result i32)))
 (type $FUNCSIG$dd (func (param f64) (result f64)))
 (type $FUNCSIG$i (func (result i32)))
 (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 (; 8 ;) (; has Stack IR ;)
  (nop)
 )
 (func $importedDoubles (; 9 ;) (; has Stack IR ;) (result f64)
  (if
   (i32.gt_s
    (global.get $Int)
    (i32.const 0)
   )
   (return
    (f64.const -3.4)
   )
  )
  (if
   (f64.gt
    (f64.const 0)
    (f64.const 0)
   )
   (return
    (f64.const 5.6)
   )
  )
  (f64.const 1.2)
 )
 (func $doubleCompares (; 10 ;) (; 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 (; 11 ;) (; has Stack IR ;) (param $0 i32) (result i32)
  (i32.eqz
   (local.get $0)
  )
 )
 (func $conversions (; 12 ;) (; 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 (; 13 ;) (; 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 (; 14 ;) (; has Stack IR ;) (result f64)
  (call $f64-rem
   (f64.const 5.5)
   (f64.const 1.2)
  )
 )
 (func $frem_float (; 15 ;) (; has Stack IR ;) (result f32)
  (f32.demote_f64
   (call $f64-rem
    (f64.const 5.5)
    (f64.const 1.2000000476837158)
   )
  )
 )
 (func $big_uint_div_u (; 16 ;) (; has Stack IR ;) (result i32)
  (i32.const 2147483647)
 )
 (func $trapping_sint_div_s (; 17 ;) (; has Stack IR ;) (result i32)
  (i32.const 0)
 )
 (func $fr (; 18 ;) (; has Stack IR ;) (param $0 f32)
  (nop)
 )
 (func $negZero (; 19 ;) (; has Stack IR ;) (result f64)
  (f64.const -0)
 )
 (func $neg (; 20 ;) (; has Stack IR ;)
  (call_indirect (type $FUNCSIG$vf)
   (f32.const -0)
   (i32.const 9)
  )
 )
 (func $cneg (; 21 ;) (; has Stack IR ;) (param $0 f32)
  (call_indirect (type $FUNCSIG$vf)
   (local.get $0)
   (i32.const 9)
  )
 )
 (func $smallCompare (; 22 ;) (; 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 (; 23 ;) (; has Stack IR ;)
  (call_indirect (type $FUNCSIG$vi)
   (i32.const 1)
   (i32.const 17)
  )
 )
 (func $forLoop (; 24 ;) (; 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 (; 25 ;) (; has Stack IR ;) (param $0 f32) (param $1 f64)
  (nop)
 )
 (func $aborts (; 26 ;) (; 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 (; 27 ;) (; 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 (; 28 ;) (; has Stack IR ;) (param $0 i32) (param $1 f32)
  (nop)
 )
 (func $recursiveBlockMerging (; 29 ;) (; 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 (; 30 ;) (; 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 (; 31 ;) (; 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 (; 32 ;) (; 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 (; 33 ;) (; has Stack IR ;)
  (if
   (call $return_int)
   (drop
    (call $lb
     (i32.const 3)
    )
   )
  )
 )
 (func $dropCall (; 34 ;) (; 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 (; 35 ;) (; has Stack IR ;) (result i32)
  (global.set $Int
   (i32.const 10)
  )
  (global.set $Int
   (i32.const 20)
  )
  (global.set $Int
   (i32.const 30)
  )
  (global.get $Int)
 )
 (func $usesGlobalSet2 (; 36 ;) (; has Stack IR ;) (result i32)
  (global.set $Int
   (i32.const 40)
  )
  (i32.const 50)
 )
 (func $breakThroughMany (; 37 ;) (; 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 (; 38 ;) (; 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 (; 39 ;) (; has Stack IR ;) (param $0 i32) (result i32)
  (i32.load8_s
   (local.get $0)
  )
 )
 (func $conditionalTypeFun (; 40 ;) (; 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 (; 41 ;) (; 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 (; 42 ;) (; has Stack IR ;) (result f64)
  (f64.const 0)
 )
 (func $globalOpts (; 43 ;) (; 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 (; 44 ;) (; has Stack IR ;)
  (if
   (call $return_int)
   (drop
    (call $return_int)
   )
  )
 )
 (func $loophi (; 45 ;) (; 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 (; 46 ;) (; 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 (; 47 ;) (; 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 (; 48 ;) (; 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 (; 49 ;) (; 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 (; 50 ;) (; 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 (; 51 ;) (; 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 (; 52 ;) (; has Stack IR ;) (result i32)
  (call $return_int)
 )
 (func $dropIgnoredImportInIf (; 53 ;) (; has Stack IR ;) (param $0 i32) (param $1 i32) (param $2 i32)
  (if
   (local.get $0)
   (drop
    (call $lb
     (local.get $2)
    )
   )
  )
 )
 (func $dropIgnoredImportsInIf (; 54 ;) (; 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 (; 55 ;) (; has Stack IR ;) (param $0 i32)
  (f64.store
   (i32.const 80)
   (f64.promote_f32
    (f32.convert_i32_s
     (local.get $0)
    )
   )
  )
 )
 (func $relocatableAndModules (; 56 ;) (; has Stack IR ;) (result i32)
  (call_indirect (type $FUNCSIG$v)
   (i32.const 10)
  )
  (call_indirect (type $FUNCSIG$v)
   (i32.const 20)
  )
  (call_indirect (type $FUNCSIG$idi)
   (f64.const 1.5)
   (i32.const 200)
   (i32.const 30)
  )
 )
 (func $exported_f32_user (; 57 ;) (; has Stack IR ;) (param $0 i32) (param $1 f32) (param $2 f64) (result f32)
  (local.get $1)
 )
 (func $keepAlive (; 58 ;) (; has Stack IR ;)
  (drop
   (call $f64-to-int
    (f64.const 100)
   )
  )
  (drop
   (call $f64-to-int
    (f64.const 100)
   )
  )
  (call_indirect (type $FUNCSIG$vi)
   (i32.const 0)
   (i32.const 17)
  )
  (call_indirect (type $FUNCSIG$vi)
   (i32.const 0)
   (block (result i32)
    (global.set $Int
     (i32.const 1)
    )
    (i32.add
     (i32.and
      (global.get $Int)
      (i32.const 7)
     )
     (i32.const 16)
    )
   )
  )
  (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 (; 59 ;) (; has Stack IR ;) (param $0 i32)
  (nop)
 )
 (func $ii (; 60 ;) (; has Stack IR ;) (param $0 i32) (result i32)
  (local.get $0)
 )
)
