(module
 (type $0 (func (param i32)))
 (type $1 (func (param i32) (result i32)))
 (memory $0 0)
 (func $basic (; 0 ;) (type $0) (param $p i32)
  (local $x i32)
  (set_local $x
   (i32.const 10)
  )
  (call $basic
   (i32.const 20)
  )
 )
 (func $split (; 1 ;) (type $0) (param $p i32)
  (local $x i32)
  (if
   (i32.const 1)
   (set_local $x
    (i32.const 10)
   )
  )
  (call $basic
   (i32.add
    (get_local $x)
    (get_local $x)
   )
  )
 )
 (func $split-but-join (; 2 ;) (type $0) (param $p i32)
  (local $x i32)
  (if
   (i32.const 1)
   (set_local $x
    (i32.const 10)
   )
   (set_local $x
    (i32.const 10)
   )
  )
  (call $basic
   (i32.const 20)
  )
 )
 (func $split-but-join-different (; 3 ;) (type $0) (param $p i32)
  (local $x i32)
  (if
   (i32.const 1)
   (set_local $x
    (i32.const 10)
   )
   (set_local $x
    (i32.const 20)
   )
  )
  (call $basic
   (i32.add
    (get_local $x)
    (get_local $x)
   )
  )
 )
 (func $split-but-join-different-b (; 4 ;) (type $0) (param $p i32)
  (local $x i32)
  (if
   (i32.const 1)
   (set_local $x
    (i32.const 10)
   )
   (set_local $x
    (get_local $p)
   )
  )
  (call $basic
   (i32.add
    (get_local $x)
    (get_local $x)
   )
  )
 )
 (func $split-but-join-init0 (; 5 ;) (type $0) (param $p i32)
  (local $x i32)
  (if
   (i32.const 1)
   (set_local $x
    (i32.const 0)
   )
  )
  (call $basic
   (i32.const 0)
  )
 )
 (func $later (; 6 ;) (type $0) (param $p i32)
  (local $x i32)
  (set_local $x
   (i32.const 10)
  )
  (call $basic
   (i32.const 20)
  )
  (set_local $x
   (i32.const 22)
  )
  (call $basic
   (i32.const 44)
  )
  (set_local $x
   (i32.const 39)
  )
 )
 (func $later2 (; 7 ;) (type $1) (param $p i32) (result i32)
  (local $x i32)
  (set_local $x
   (i32.const 10)
  )
  (set_local $x
   (i32.const 20)
  )
  (i32.const 20)
 )
 (func $two-ways-but-identical (; 8 ;) (type $1) (param $p i32) (result i32)
  (local $x i32)
  (local $y i32)
  (set_local $x
   (i32.const 10)
  )
  (if
   (i32.const 1)
   (set_local $y
    (i32.const 11)
   )
   (set_local $y
    (i32.const 11)
   )
  )
  (set_local $y
   (i32.const 21)
  )
  (i32.const 21)
 )
 (func $two-ways-but-almost-identical (; 9 ;) (type $1) (param $p i32) (result i32)
  (local $x i32)
  (local $y i32)
  (set_local $x
   (i32.const 10)
  )
  (if
   (i32.const 1)
   (set_local $y
    (i32.const 12)
   )
   (set_local $y
    (i32.const 11)
   )
  )
  (set_local $y
   (i32.add
    (i32.const 10)
    (get_local $y)
   )
  )
  (get_local $y)
 )
 (func $deadloop (; 10 ;) (type $1) (param $p i32) (result i32)
  (local $x i32)
  (local $y i32)
  (loop $loop
   (set_local $x
    (i32.const 0)
   )
   (set_local $y
    (i32.const 0)
   )
   (br $loop)
  )
 )
 (func $deadloop2 (; 11 ;) (type $0) (param $p i32)
  (local $x i32)
  (local $y i32)
  (loop $loop
   (set_local $x
    (i32.const 0)
   )
   (set_local $y
    (i32.const 0)
   )
   (call $deadloop2
    (i32.const 0)
   )
   (call $deadloop2
    (i32.const 0)
   )
   (br $loop)
  )
 )
 (func $deadloop3 (; 12 ;) (type $0) (param $p i32)
  (local $x i32)
  (local $y i32)
  (loop $loop
   (set_local $x
    (i32.const 0)
   )
   (set_local $y
    (i32.const 0)
   )
   (call $deadloop2
    (i32.const 0)
   )
   (call $deadloop2
    (i32.const 0)
   )
   (br $loop)
  )
 )
)
