(module
 (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 (; 0 ;) (; 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 (; 1 ;) (; 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 (; 2 ;) (; 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 (; 3 ;) (; 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 (; 4 ;) (; 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 (; 5 ;) (; has Stack IR ;)
  ;;@ (unknown):1337:0
  (call $nofile)
 )
 (func $inlineInto (; 6 ;) (; 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)
   )
  )
 )
)
