(module
 (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
 (type $i32_=>_i32 (func (param i32) (result i32)))
 (type $none_=>_none (func))
 (import "env" "memory" (memory $memory 256 256))
 (import "env" "table" (table $table 0 0 funcref))
 (import "env" "__memory_base" (global $__memory_base i32))
 (import "env" "__table_base" (global $__table_base i32))
 (global $STACKTOP (mut i32) (i32.const 0))
 (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 $x i32) (param $y i32) (result i32)
  ;;@ tests/hello_world.c:5:0
  (local.set $x
   (local.get $x)
  )
  ;;@ tests/hello_world.c:6:0
  (local.set $y
   (local.get $y)
  )
  ;;@ tests/other_file.cpp:314159:0
  (local.set $x
   (local.get $y)
  )
  (return
   (i32.add
    (local.get $x)
    (local.get $y)
   )
  )
 )
 (func $ret (; 1 ;) (param $x i32) (result i32)
  ;;@ return.cpp:50:0
  (local.set $x
   (i32.shl
    (local.get $x)
    (i32.const 1)
   )
  )
  ;;@ return.cpp:100:0
  (return
   (i32.add
    (local.get $x)
    (i32.const 1)
   )
  )
 )
 (func $i32s-rem (; 2 ;) (param $0 i32) (param $1 i32) (result i32)
  (if (result i32)
   (i32.eqz
    (local.get $1)
   )
   (i32.const 0)
   (i32.rem_s
    (local.get $0)
    (local.get $1)
   )
  )
 )
 (func $opts (; 3 ;) (param $x i32) (param $y i32) (result i32)
  ;;@ even-opted.cpp:1:0
  (local.set $x
   (i32.add
    (local.get $x)
    (local.get $y)
   )
  )
  ;;@ even-opted.cpp:2:0
  (local.set $y
   (i32.shr_s
    (local.get $y)
    (local.get $x)
   )
  )
  ;;@ even-opted.cpp:3:0
  (local.set $x
   (call $i32s-rem
    (local.get $x)
    (local.get $y)
   )
  )
  (return
   (i32.add
    (local.get $x)
    (local.get $y)
   )
  )
 )
 (func $fib (; 4 ;) (param $$0 i32) (result i32)
  (local $$$0$lcssa i32)
  (local $$$01518 i32)
  (local $$$01518$phi i32)
  (local $$$01617 i32)
  (local $$$019 i32)
  (local $$1 i32)
  (local $$2 i32)
  (local $$3 i32)
  (local $$exitcond i32)
  (local $label i32)
  (local $sp i32)
  (local.set $sp
   (global.get $STACKTOP)
  )
  ;;@ fib.c:3:0
  (local.set $$1
   (i32.gt_s
    (local.get $$0)
    (i32.const 0)
   )
  )
  (if
   (local.get $$1)
   (block
    (local.set $$$01518
     (i32.const 0)
    )
    (local.set $$$01617
     (i32.const 0)
    )
    (local.set $$$019
     (i32.const 1)
    )
   )
   (block
    (local.set $$$0$lcssa
     (i32.const 1)
    )
    ;;@ fib.c:8:0
    (return
     (local.get $$$0$lcssa)
    )
   )
  )
  (loop $while-in
   (block $while-out
    ;;@ fib.c:4:0
    (local.set $$2
     (i32.add
      (local.get $$$019)
      (local.get $$$01518)
     )
    )
    ;;@ fib.c:3:0
    (local.set $$3
     (i32.add
      (local.get $$$01617)
      (i32.const 1)
     )
    )
    (local.set $$exitcond
     (i32.eq
      (local.get $$3)
      (local.get $$0)
     )
    )
    (if
     (local.get $$exitcond)
     (block
      (local.set $$$0$lcssa
       (local.get $$2)
      )
      (br $while-out)
     )
     (block
      (local.set $$$01518$phi
       (local.get $$$019)
      )
      (local.set $$$01617
       (local.get $$3)
      )
      (local.set $$$019
       (local.get $$2)
      )
      (local.set $$$01518
       (local.get $$$01518$phi)
      )
     )
    )
    (br $while-in)
   )
  )
  ;;@ fib.c:8:0
  (return
   (local.get $$$0$lcssa)
  )
 )
 (func $switch_reach (; 5 ;) (param $$p i32) (result i32)
  (local $$0 i32)
  (local $$call i32)
  (local $$magic i32)
  (local $$rc$0 i32)
  (local $$switch$split2D i32)
  (local $label i32)
  (local $sp i32)
  (local.set $sp
   (global.get $STACKTOP)
  )
  (local.set $$magic
   (i32.add
    (local.get $$p)
    (i32.const 52)
   )
  )
  (local.set $$0
   (local.get $$magic)
  )
  (local.set $$switch$split2D
   (i32.lt_s
    (local.get $$0)
    (i32.const 1369188723)
   )
  )
  (if
   (local.get $$switch$split2D)
   (block $switch
    (block $switch-default
     (block $switch-case
      (br_table $switch-case $switch-default
       (i32.sub
        (local.get $$0)
        (i32.const -1108210269)
       )
      )
     )
     (block
      (local.set $label
       (i32.const 2)
      )
      (br $switch)
     )
    )
    (local.set $$rc$0
     (i32.const 0)
    )
   )
   (block $switch0
    (block $switch-default2
     (block $switch-case1
      (br_table $switch-case1 $switch-default2
       (i32.sub
        (local.get $$0)
        (i32.const 1369188723)
       )
      )
     )
     (block
      (local.set $label
       (i32.const 2)
      )
      (br $switch0)
     )
    )
    (local.set $$rc$0
     (i32.const 0)
    )
   )
  )
  (if
   (i32.eq
    (local.get $label)
    (i32.const 2)
   )
   (block
    (local.set $$call
     (call $switch_reach
      (local.get $$p)
     )
    )
    (local.set $$rc$0
     (local.get $$call)
    )
   )
  )
  (drop
   (call $switch_reach
    (local.get $$p)
   )
  )
  ;;@ /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950:0
  (return
   (local.get $$rc$0)
  )
 )
 (func $nofile (; 6 ;)
  ;;@ (unknown):1337:0
  (call $nofile)
 )
 (func $inlineMe (; 7 ;) (param $x i32) (param $y i32) (result i32)
  ;;@ inline_me.c:120:0
  (local.set $x
   (i32.add
    (local.get $x)
    (local.get $y)
   )
  )
  ;;@ inline_me.c:121:0
  (local.set $y
   (i32.add
    (local.get $x)
    (local.get $y)
   )
  )
  ;;@ inline_me.c:122:0
  (local.set $x
   (i32.add
    (local.get $x)
    (local.get $y)
   )
  )
  ;;@ inline_me.c:123:0
  (return
   (local.get $x)
  )
 )
 (func $inlineInto (; 8 ;) (param $x i32) (param $y i32) (result i32)
  ;;@ inline_me.c:125:0
  (return
   (call $inlineMe
    (local.get $x)
    (local.get $y)
   )
  )
 )
)
