(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 $opts (; 2 ;) (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
   (i32.rem_s
    (local.get $x)
    (local.get $y)
   )
  )
  (return
   (i32.add
    (local.get $x)
    (local.get $y)
   )
  )
 )
 (func $fib (; 3 ;) (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 (; 4 ;) (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 (; 5 ;)
  ;;@ (unknown):1337:0
  (call $nofile)
 )
 (func $inlineMe (; 6 ;) (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 (; 7 ;) (param $x i32) (param $y i32) (result i32)
  ;;@ inline_me.c:125:0
  (return
   (call $inlineMe
    (local.get $x)
    (local.get $y)
   )
  )
 )
)
