(module
 (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))
 (func $add (; 0 ;) (param $0 i32) (param $1 i32) (result i32)
  ;;@ tests/other_file.cpp:314159:0
  (i32.add
   (get_local $1)
   (get_local $1)
  )
 )
 (func $ret (; 1 ;) (param $0 i32) (result i32)
  ;;@ return.cpp:50:0
  (set_local $0
   (i32.shl
    (get_local $0)
    (i32.const 1)
   )
  )
  ;;@ return.cpp:100:0
  (i32.add
   (get_local $0)
   (i32.const 1)
  )
 )
 (func $opts (; 2 ;) (param $0 i32) (param $1 i32) (result i32)
  ;;@ even-opted.cpp:1:0
  (set_local $0
   (i32.add
    (get_local $0)
    (get_local $1)
   )
  )
  ;;@ even-opted.cpp:2:0
  (set_local $1
   (i32.shr_s
    (get_local $1)
    (get_local $0)
   )
  )
  ;;@ even-opted.cpp:3:0
  (i32.add
   (i32.rem_s
    (get_local $0)
    (get_local $1)
   )
   (get_local $1)
  )
 )
 (func $fib (; 3 ;) (param $0 i32) (result i32)
  (local $1 i32)
  (local $2 i32)
  (local $3 i32)
  (local $4 i32)
  (set_local $4
   (if (result i32)
    ;;@ fib.c:3:0
    (i32.gt_s
     (get_local $0)
     (i32.const 0)
    )
    (block (result i32)
     (set_local $3
      (i32.const 1)
     )
     (i32.const 0)
    )
    (block
     (set_local $1
      (i32.const 1)
     )
     ;;@ fib.c:8:0
     (return
      (get_local $1)
     )
    )
   )
  )
  (loop $while-in
   ;;@ fib.c:4:0
   (set_local $1
    (i32.add
     (get_local $3)
     (get_local $4)
    )
   )
   ;;@ fib.c:3:0
   (set_local $2
    (i32.add
     (get_local $2)
     (i32.const 1)
    )
   )
   (if
    (i32.ne
     (get_local $2)
     (get_local $0)
    )
    (block
     (set_local $4
      (get_local $3)
     )
     (set_local $3
      (get_local $1)
     )
     (br $while-in)
    )
   )
  )
  ;;@ fib.c:8:0
  (get_local $1)
 )
 (func $switch_reach (; 4 ;) (param $0 i32) (result i32)
  (local $1 i32)
  (set_local $1
   (block $__rjto$0 (result i32)
    (block $__rjti$0
     (br $__rjto$0
      (if (result i32)
       (i32.lt_s
        (tee_local $1
         (i32.add
          (get_local $0)
          (i32.const 52)
         )
        )
        (i32.const 1369188723)
       )
       (block $switch (result i32)
        (br_if $__rjti$0
         (i32.eqz
          (i32.sub
           (get_local $1)
           (i32.const -1108210269)
          )
         )
        )
        (i32.const 0)
       )
       (block $switch0 (result i32)
        (br_if $__rjti$0
         (i32.eqz
          (i32.sub
           (get_local $1)
           (i32.const 1369188723)
          )
         )
        )
        (i32.const 0)
       )
      )
     )
    )
    (call $switch_reach
     (get_local $0)
    )
   )
  )
  (drop
   (call $switch_reach
    (get_local $0)
   )
  )
  ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0
  (get_local $1)
 )
 (func $nofile (; 5 ;)
  ;;@ (unknown):1337:0
  (call $nofile)
 )
)
