(module
 (type $i32_=>_i32 (func (param i32) (result i32)))
 (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
 (type $none_=>_none (func))
 (import "env" "memory" (memory $1 256 256))
 (data (global.get $gimport$0) "debugInfo.asm.js")
 (import "env" "__memory_base" (global $gimport$0 i32))
 (export "add" (func $add))
 (export "ret" (func $ret))
 (export "opts" (func $opts))
 (export "fib" (func $fib))
 (export "switch_reach" (func $switch_reach))
 (export "nofile" (func $nofile))
 (export "inlineInto" (func $inlineInto))
 (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32)
  ;;@ tests/other_file.cpp:314159:0
  (i32.add
   (local.get $1)
   (local.get $1)
  )
 )
 (func $ret (; 1 ;) (param $0 i32) (result i32)
  ;;@ return.cpp:50:0
  (local.set $0
   (i32.shl
    (local.get $0)
    (i32.const 1)
   )
  )
  ;;@ return.cpp:100:0
  (i32.add
   (local.get $0)
   (i32.const 1)
  )
 )
 (func $opts (; 2 ;) (param $0 i32) (param $1 i32) (result i32)
  (local $2 i32)
  ;;@ even-opted.cpp:3:0
  (i32.add
   ;;@ even-opted.cpp:1:0
   (if (result i32)
    (local.tee $2
     (local.tee $0
      (i32.shr_s
       ;;@ even-opted.cpp:2:0
       (local.get $1)
       ;;@ even-opted.cpp:1:0
       (local.tee $1
        (i32.add
         (local.get $0)
         (local.get $1)
        )
       )
      )
     )
    )
    ;;@ even-opted.cpp:3:0
    (i32.rem_s
     (local.get $1)
     (local.get $2)
    )
    (i32.const 0)
   )
   (local.get $0)
  )
 )
 (func $fib (; 3 ;) (param $0 i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  ;;@ fib.c:8:0
  (local.set $2
   ;;@ fib.c:3:0
   (if (result i32)
    (i32.gt_s
     (local.get $0)
     (i32.const 0)
    )
    (i32.const 1)
    (block (result i32)
     (local.set $0
      (i32.const 1)
     )
     ;;@ fib.c:8:0
     (return
      (local.get $0)
     )
    )
   )
  )
  (loop $label$3
   ;;@ fib.c:4:0
   (local.set $4
    (i32.add
     (local.get $2)
     (local.get $3)
    )
   )
   ;;@ fib.c:3:0
   (local.set $1
    (i32.add
     (local.get $1)
     (i32.const 1)
    )
   )
   (if
    (i32.ne
     (local.get $0)
     (local.get $1)
    )
    (block
     (local.set $3
      (local.get $2)
     )
     (local.set $2
      (local.get $4)
     )
     (br $label$3)
    )
   )
  )
  ;;@ fib.c:8:0
  (local.get $4)
 )
 (func $switch_reach (; 4 ;) (param $0 i32) (result i32)
  (local $1 i32)
  (local.set $1
   (block $label$1 (result i32)
    (block $label$2
     (if
      (i32.lt_s
       (local.tee $1
        (i32.add
         (local.get $0)
         (i32.const 52)
        )
       )
       (i32.const 1369188723)
      )
      (br_if $label$2
       (i32.eqz
        (i32.sub
         (local.get $1)
         (i32.const -1108210269)
        )
       )
      )
      (br_if $label$2
       (i32.eqz
        (i32.sub
         (local.get $1)
         (i32.const 1369188723)
        )
       )
      )
     )
     (br $label$1
      (i32.const 0)
     )
    )
    (call $switch_reach
     (local.get $0)
    )
   )
  )
  (drop
   (call $switch_reach
    (local.get $0)
   )
  )
  ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0
  (local.get $1)
 )
 (func $nofile (; 5 ;)
  ;;@ (unknown):1337:0
  (call $nofile)
 )
 (func $inlineInto (; 6 ;) (param $0 i32) (param $1 i32) (result i32)
  ;;@ inline_me.c:120:0
  (i32.add
   (local.tee $0
    (i32.add
     (local.get $0)
     (local.get $1)
    )
   )
   (i32.add
    (local.get $0)
    (local.get $1)
   )
  )
  ;;@ inline_me.c:125:0
 )
)

