(module
 (type $0 (func (result f64)))
 (type $1 (func (result i32)))
 (type $2 (func))
 (type $3 (func (param i32)))
 (type $4 (func (param i32) (result f32)))
 (type $5 (func (result f32)))
 (global $global (mut i32) (i32.const 0))
 (func $0 (; 0 ;) (type $0) (result f64)
  (local $0 f64)
  (local $1 f64)
  (local $2 i32)
  (block
  )
  (if
   (i32.const 0)
   (block
    (unreachable)
   )
   (block
    (block
     (local.set $0
      (f64.const -nan:0xfffffd63e4e5a)
     )
     (local.set $1
      (local.get $0)
     )
     (return
      (local.get $1)
     )
    )
   )
  )
 )
 (func $1 (; 1 ;) (type $1) (result i32)
  (local $0 i32)
  (local $1 i32)
  (local $2 i32)
  (block
   (block $block$6$break
    (block
    )
    (block $switch$1$leave
     (block $switch$1$default
      (block $switch$1$case$4
       (br_table $switch$1$case$4 $switch$1$case$4 $switch$1$default
        (i32.const 0)
       )
      )
      (block
       (block
        (unreachable)
       )
      )
     )
     (block
      (br $block$6$break)
     )
    )
   )
   (block
    (block
    )
    (block $switch$6$leave
     (block $switch$6$default
      (block $switch$6$case$3
       (br_table $switch$6$case$3 $switch$6$default
        (i32.const 1)
       )
      )
      (block
       (block
        (unreachable)
       )
      )
     )
     (block
      (block
       (block
        (local.set $0
         (i32.const 2)
        )
        (local.set $1
         (local.get $0)
        )
        (return
         (local.get $1)
        )
       )
      )
     )
    )
   )
  )
  (unreachable)
 )
 (func $skip-empty (; 2 ;) (type $2)
  (local $0 i32)
  (block $block$2$break
   (block
   )
   (block
    (br $block$2$break)
   )
  )
  (block
   (return)
  )
 )
 (func $skip-empty-2 (; 3 ;) (type $2)
  (local $0 i32)
  (block $block$5$break
   (block
   )
   (block
    (br $block$5$break)
   )
  )
  (block
   (block $block$4$break
    (call $skip-empty)
    (block
     (br $block$4$break)
    )
   )
   (block
    (block $block$2$break
     (call $skip-empty)
     (block
      (br $block$2$break)
     )
    )
    (block
     (return)
    )
   )
  )
 )
 (func $skip-empty-3 (; 4 ;) (type $2)
  (local $0 i32)
  (block $block$5$break
   (block
   )
   (block
    (br $block$5$break)
   )
  )
  (block
   (block $block$4$break
    (call $skip-empty)
    (block
     (br $block$4$break)
    )
   )
   (block
    (block $block$2$break
     (call $skip-empty)
     (block
      (br $block$2$break)
     )
    )
    (block
     (return)
    )
   )
  )
 )
 (func $skip-empty-4 (; 5 ;) (type $3) (param $x i32)
  (local $1 i32)
  (local $2 i32)
  (block $block$2$break
   (local.set $1
    (local.get $x)
   )
   (block
    (br $block$2$break)
   )
  )
  (block
   (return)
  )
 )
 (func $skipping (; 6 ;) (type $4) (param $0 i32) (result f32)
  (local $1 f32)
  (local $2 f32)
  (local $3 f32)
  (local $4 f32)
  (local $5 i32)
  (block
  )
  (if
   (i32.const 0)
   (block
    (unreachable)
   )
   (block
    (block
     (local.set $1
      (f32.const 1)
     )
     (local.set $2
      (local.get $1)
     )
     (local.set $3
      (local.get $2)
     )
     (local.set $4
      (local.get $3)
     )
     (return
      (local.get $4)
     )
    )
   )
  )
 )
 (func $merging (; 7 ;) (type $2)
  (local $0 i32)
  (block
   (block
   )
   (return)
  )
 )
 (func $unswitch (; 8 ;) (type $2)
  (local $0 i32)
  (block $block$2$break
   (block
   )
   (block
    (br $block$2$break)
   )
  )
  (block
   (return)
  )
 )
 (func $skip-only-empty (; 9 ;) (type $2)
  (local $0 i32)
  (block $block$3$break
   (block
   )
   (if
    (i32.const 1)
    (block
     (global.set $global
      (i32.const 0)
     )
     (block
      (br $block$3$break)
     )
    )
    (br $block$3$break)
   )
  )
  (block
   (return)
  )
 )
 (func $skip-only-one-branch-out (; 10 ;) (type $1) (result i32)
  (local $0 i32)
  (local $1 i32)
  (local $2 i32)
  (block
   (block
   )
   (block
   )
  )
  (if
   (i32.const 1)
   (block
    (unreachable)
   )
   (block
    (block
     (local.set $0
      (i32.const 0)
     )
     (local.set $1
      (local.get $0)
     )
     (return
      (local.get $1)
     )
    )
   )
  )
 )
 (func $multipass-for-skips (; 11 ;) (type $5) (result f32)
  (local $0 f32)
  (local $1 f32)
  (local $2 f32)
  (local $3 f32)
  (local $4 i32)
  (block $block$7$break
   (block
   )
   (if
    (i32.const 0)
    (block
     (block
      (local.set $0
       (f32.const 9223372036854775808)
      )
      (block
       (local.set $1
        (local.get $0)
       )
       (local.set $2
        (local.get $1)
       )
      )
     )
     (block
      (br $block$7$break)
     )
    )
    (block
     (local.set $2
      (f32.const 65505)
     )
     (block
      (br $block$7$break)
     )
    )
   )
  )
  (block
   (block
    (local.set $3
     (local.get $2)
    )
    (return
     (local.get $3)
    )
   )
  )
 )
 (func $branch-merge-vs-replace (; 12 ;) (type $2)
  (local $0 i32)
  (block
  )
  (if
   (i32.const 0)
   (block
    (unreachable)
   )
   (block
    (return)
   )
  )
 )
 (func $unswitch-amount (; 13 ;) (type $2)
  (local $0 i32)
  (block $block$2$break
   (block
   )
   (if
    (i32.const -23)
    (br $block$2$break)
    (block
     (block $block$6$break
      (block
      )
      (block $switch$4$leave
       (block $switch$4$default
        (block $switch$4$case$2
         (br_table $switch$4$case$2 $switch$4$default
          (i32.const 44064)
         )
        )
        (block
         (br $block$2$break)
        )
       )
       (block
        (br $block$6$break)
       )
      )
     )
     (block
      (unreachable)
     )
    )
   )
  )
  (block
   (return)
  )
 )
)
