(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 $memory 256 256))
 (data (global.get $__memory_base) "debugInfo.asm.js")
 (import "env" "__memory_base" (global $__memory_base 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 (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32)
  ;;@ tests/other_file.cpp:314159:0
  (i32.add
   (local.get $1)
   (local.get $1)
  )
 )
 (func $ret (; has Stack IR ;) (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 (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32)
  (local $2 i32)
  ;;@ even-opted.cpp:3:0
  (i32.add
   (if (result i32)
    (local.tee $2
     ;;@ even-opted.cpp:2:0
     (local.tee $0
      (i32.shr_s
       (local.get $1)
       ;;@ even-opted.cpp:1:0
       (local.tee $1
        (i32.add
         (local.get $0)
         (local.get $1)
        )
       )
      )
     )
    )
    (i32.rem_s
     (local.get $1)
     (local.get $2)
    )
    (i32.const 0)
   )
   (local.get $0)
  )
 )
 (func $fib (; has Stack IR ;) (param $0 i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (local.set $2
   (if (result i32)
    ;;@ fib.c:3:0
    (i32.gt_s
     (local.get $0)
     (i32.const 0)
    )
    (i32.const 1)
    (block
     (local.set $0
      (i32.const 1)
     )
     ;;@ fib.c:8:0
     (return
      (local.get $0)
     )
    )
   )
  )
  (loop $while-in
   ;;@ 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 $while-in)
    )
   )
  )
  ;;@ fib.c:8:0
  (local.get $4)
 )
 (func $switch_reach (; has Stack IR ;) (param $0 i32) (result i32)
  (local $1 i32)
  (local.set $1
   (block $__rjto$0 (result i32)
    (block $__rjti$0
     (if
      (i32.lt_s
       (local.tee $1
        (i32.add
         (local.get $0)
         (i32.const 52)
        )
       )
       (i32.const 1369188723)
      )
      (br_if $__rjti$0
       (i32.eqz
        (i32.sub
         (local.get $1)
         (i32.const -1108210269)
        )
       )
      )
      (br_if $__rjti$0
       (i32.eqz
        (i32.sub
         (local.get $1)
         (i32.const 1369188723)
        )
       )
      )
     )
     (br $__rjto$0
      (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 (; has Stack IR ;)
  ;;@ (unknown):1337:0
  (call $nofile)
 )
 (func $inlineInto (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32)
  ;;@ inline_me.c:125:0
  (i32.add
   ;;@ inline_me.c:120:0
   (local.tee $0
    (i32.add
     (local.get $0)
     (local.get $1)
    )
   )
   (i32.add
    (local.get $0)
    (local.get $1)
   )
  )
 )
)
