(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 (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 (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 (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 (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 (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
  ;;@ (unknown):1337:0
  (call $nofile)
 )
 (func $inlineMe (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 (param $x i32) (param $y i32) (result i32)
  ;;@ inline_me.c:125:0
  (return
   (call $inlineMe
    (local.get $x)
    (local.get $y)
   )
  )
 )
)
