(module
 (type $i (func (param i32)))
 (type $ii (func (param i32 i32)))
 (type $iii (func (param i32 i32 i32)))
 (type $3 (func))
 (type $4 (func (result i32)))
 (type $5 (func (result f64)))
 (table 1 1 anyfunc)
 (elem (i32.const 0) $call-i)
 (memory $0 (shared 256 256))
 (func $call-i (; 0 ;) (type $i) (param $0 i32)
  (nop)
 )
 (func $call-ii (; 1 ;) (type $ii) (param $0 i32) (param $1 i32)
  (nop)
 )
 (func $call-iii (; 2 ;) (type $iii) (param $0 i32) (param $1 i32) (param $2 i32)
  (nop)
 )
 (func $b0-yes (; 3 ;) (type $i) (param $i1 i32)
  (drop
   (i32.const 10)
  )
 )
 (func $b0-no (; 4 ;) (type $i) (param $i1 i32)
  (block $topmost
   (block $block0
    (br $block0)
   )
   (br $topmost)
  )
 )
 (func $b0-br-but-ok (; 5 ;) (type $i) (param $i1 i32)
  (block $topmost
   (br $topmost)
  )
 )
 (func $b1-yes (; 6 ;) (type $i) (param $i1 i32)
  (drop
   (i32.const 10)
  )
 )
 (func $b2-yes (; 7 ;) (type $i) (param $i1 i32)
  (drop
   (i32.const 5)
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 15)
  )
 )
 (func $b3-yes (; 8 ;) (type $i) (param $i1 i32)
  (drop
   (i32.const 3)
  )
  (drop
   (i32.const 6)
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 15)
  )
  (drop
   (i32.const 20)
  )
 )
 (func $b4 (; 9 ;) (type $i) (param $i1 i32)
  (block $inner
   (drop
    (i32.const 10)
   )
   (br $inner)
  )
 )
 (func $b5 (; 10 ;) (type $i) (param $i1 i32)
  (block $middle
   (block $inner
    (drop
     (i32.const 10)
    )
    (br $inner)
   )
   (br $middle)
  )
 )
 (func $b6 (; 11 ;) (type $i) (param $i1 i32)
  (drop
   (i32.const 5)
  )
  (block $inner
   (drop
    (i32.const 10)
   )
   (br $inner)
  )
  (drop
   (i32.const 15)
  )
 )
 (func $b7 (; 12 ;) (type $i) (param $i1 i32)
  (drop
   (i32.const 3)
  )
  (block $middle
   (drop
    (i32.const 6)
   )
   (block $inner
    (drop
     (i32.const 10)
    )
    (br $inner)
   )
   (drop
    (i32.const 15)
   )
   (br $middle)
  )
  (drop
   (i32.const 20)
  )
 )
 (func $unary (; 13 ;) (type $3)
  (local $x i32)
  (drop
   (i32.eqz
    (block (result i32)
     (i32.const 10)
    )
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.eqz
    (i32.const 20)
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 20)
  )
  (drop
   (i32.eqz
    (i32.const 30)
   )
  )
  (drop
   (i32.const 10)
  )
  (set_local $x
   (i32.const 20)
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.load
    (i32.const 20)
   )
  )
  (return
   (block
    (drop
     (i32.const 10)
    )
    (unreachable)
   )
  )
 )
 (func $binary (; 14 ;) (type $3)
  (drop
   (i32.add
    (block (result i32)
     (i32.const 10)
    )
    (i32.const 20)
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.add
    (i32.const 20)
    (i32.const 30)
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 20)
  )
  (drop
   (i32.add
    (i32.const 30)
    (i32.const 40)
   )
  )
  (drop
   (i32.add
    (i32.const 10)
    (block (result i32)
     (i32.const 20)
    )
   )
  )
  (drop
   (i32.const 20)
  )
  (drop
   (i32.add
    (i32.const 10)
    (i32.const 30)
   )
  )
  (drop
   (i32.const 20)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (i32.add
    (i32.const 10)
    (i32.const 40)
   )
  )
  (drop
   (i32.add
    (block (result i32)
     (i32.const 10)
    )
    (block (result i32)
     (i32.const 20)
    )
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (i32.add
    (i32.const 20)
    (i32.const 40)
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 20)
  )
  (drop
   (i32.const 40)
  )
  (drop
   (i32.const 50)
  )
  (drop
   (i32.add
    (i32.const 30)
    (i32.const 60)
   )
  )
  (drop
   (i32.const 20)
  )
  (i32.store
   (i32.const 10)
   (i32.const 30)
  )
  (drop
   (i32.const 10)
  )
  (i32.store
   (i32.const 20)
   (i32.const 30)
  )
  (drop
   (i32.add
    (unreachable)
    (block (result i32)
     (drop
      (i32.const 10)
     )
     (i32.const 20)
    )
   )
  )
  (drop
   (block (result i32)
    (unreachable)
    (drop
     (i32.const 20)
    )
    (i32.add
     (i32.const 10)
     (i32.const 30)
    )
   )
  )
 )
 (func $trinary (; 15 ;) (type $3)
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (i32.const 50)
  )
  (drop
   (select
    (i32.const 20)
    (i32.const 40)
    (i32.const 60)
   )
  )
  (drop
   (i32.const 20)
  )
  (drop
   (i32.const 40)
  )
  (drop
   (select
    (block (result i32)
     (i32.const 10)
    )
    (i32.const 30)
    (i32.const 50)
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 40)
  )
  (drop
   (select
    (i32.const 20)
    (block (result i32)
     (i32.const 30)
    )
    (i32.const 50)
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (select
    (i32.const 20)
    (i32.const 40)
    (block (result i32)
     (i32.const 50)
    )
   )
  )
  (drop
   (i32.const 30)
  )
  (drop
   (select
    (block (result i32)
     (i32.const 10)
    )
    (block (result i32)
     (i32.const 20)
    )
    (i32.const 40)
   )
  )
  (drop
   (i32.const 20)
  )
  (drop
   (select
    (block (result i32)
     (i32.const 10)
    )
    (i32.const 30)
    (block (result i32)
     (i32.const 40)
    )
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (select
    (i32.const 20)
    (block (result i32)
     (i32.const 30)
    )
    (block (result i32)
     (i32.const 40)
    )
   )
  )
  (drop
   (select
    (block (result i32)
     (unreachable)
     (i32.const 20)
    )
    (block (result i32)
     (drop
      (i32.const 30)
     )
     (i32.const 40)
    )
    (block (result i32)
     (drop
      (i32.const 50)
     )
     (i32.const 60)
    )
   )
  )
  (drop
   (select
    (block (result i32)
     (drop
      (i32.const 10)
     )
     (unreachable)
    )
    (block (result i32)
     (drop
      (i32.const 30)
     )
     (i32.const 40)
    )
    (block (result i32)
     (drop
      (i32.const 50)
     )
     (i32.const 60)
    )
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (select
    (i32.const 20)
    (block (result i32)
     (unreachable)
     (i32.const 40)
    )
    (block (result i32)
     (drop
      (i32.const 50)
     )
     (i32.const 60)
    )
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (select
    (i32.const 20)
    (block (result i32)
     (drop
      (i32.const 30)
     )
     (unreachable)
    )
    (block (result i32)
     (drop
      (i32.const 50)
     )
     (i32.const 60)
    )
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (select
    (i32.const 20)
    (i32.const 40)
    (block (result i32)
     (unreachable)
     (i32.const 60)
    )
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (select
    (i32.const 20)
    (i32.const 40)
    (block (result i32)
     (drop
      (i32.const 50)
     )
     (unreachable)
    )
   )
  )
 )
 (func $breaks (; 16 ;) (type $3)
  (block $out
   (drop
    (i32.const 10)
   )
   (drop
    (i32.const 20)
   )
   (br $out)
   (drop
    (i32.const 10)
   )
   (br_if $out
    (i32.const 20)
   )
   (drop
    (i32.const 10)
   )
   (drop
    (i32.const 20)
   )
   (drop
    (i32.const 30)
   )
   (br_if $out
    (i32.const 40)
   )
   (drop
    (i32.const 10)
   )
   (br_table $out $out
    (i32.const 20)
   )
   (drop
    (block $out2 (result i32)
     (drop
      (i32.const 10)
     )
     (drop
      (i32.const 30)
     )
     (br_table $out2 $out2
      (i32.const 20)
      (i32.const 40)
     )
    )
   )
   (unreachable)
  )
 )
 (func $calls (; 17 ;) (type $3)
  (call $call-i
   (block (result i32)
    (i32.const 10)
   )
  )
  (drop
   (i32.const 10)
  )
  (call $call-i
   (i32.const 20)
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 20)
  )
  (call $call-i
   (i32.const 30)
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (call $call-ii
   (i32.const 20)
   (i32.const 40)
  )
  (call $call-ii
   (block (result i32)
    (unreachable)
    (i32.const 10)
   )
   (block (result i32)
    (drop
     (i32.const 20)
    )
    (i32.const 30)
   )
  )
  (call $call-ii
   (block (result i32)
    (drop
     (i32.const 10)
    )
    (unreachable)
   )
   (block (result i32)
    (drop
     (i32.const 20)
    )
    (i32.const 30)
   )
  )
  (drop
   (i32.const 10)
  )
  (call $call-ii
   (i32.const 20)
   (block (result i32)
    (unreachable)
    (i32.const 30)
   )
  )
  (drop
   (i32.const 10)
  )
  (call $call-ii
   (i32.const 20)
   (block (result i32)
    (drop
     (i32.const 30)
    )
    (unreachable)
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (i32.const 50)
  )
  (call $call-iii
   (i32.const 20)
   (i32.const 40)
   (i32.const 60)
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 40)
  )
  (call $call-iii
   (i32.const 20)
   (i32.const 30)
   (i32.const 50)
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (i32.const 50)
  )
  (call_indirect (type $ii)
   (i32.const 20)
   (i32.const 40)
   (i32.const 60)
  )
  (call_indirect (type $ii)
   (unreachable)
   (block (result i32)
    (drop
     (i32.const 30)
    )
    (i32.const 40)
   )
   (block (result i32)
    (drop
     (i32.const 50)
    )
    (i32.const 60)
   )
  )
  (drop
   (i32.const 31)
  )
  (call_indirect (type $ii)
   (i32.const 41)
   (unreachable)
   (block (result i32)
    (drop
     (i32.const 51)
    )
    (i32.const 61)
   )
  )
  (drop
   (i32.const 32)
  )
  (drop
   (i32.const 52)
  )
  (call_indirect (type $ii)
   (i32.const 42)
   (i32.const 62)
   (unreachable)
  )
 )
 (func $atomics (; 18 ;) (type $3)
  (drop
   (i32.const 10)
  )
  (drop
   (i32.const 30)
  )
  (drop
   (i32.const 50)
  )
  (drop
   (i32.atomic.rmw.cmpxchg
    (i32.const 20)
    (i32.const 40)
    (i32.const 60)
   )
  )
  (drop
   (i32.const 10)
  )
  (drop
   (i32.atomic.rmw.add
    (i32.const 20)
    (i32.const 30)
   )
  )
 )
 (func $mix-select (; 19 ;) (type $i) (param $x i32)
  (drop
   (select
    (get_local $x)
    (get_local $x)
    (block (result i32)
     (set_local $x
      (i32.const 1)
     )
     (i32.const 2)
    )
   )
  )
 )
 (func $block-type-change (; 20 ;) (type $3)
  (local $0 f64)
  (local $1 f64)
  (if
   (block (result i32)
    (nop)
    (f64.gt
     (get_local $0)
     (get_local $1)
    )
   )
   (nop)
  )
 )
 (func $do-reorder (; 21 ;) (type $i) (param $x i32)
  (local $y i32)
  (if
   (i32.const 1)
   (block
    (set_local $y
     (i32.const 5)
    )
    (set_local $x
     (i32.le_u
      (get_local $x)
      (i32.const 10)
     )
    )
   )
  )
 )
 (func $do-not-reorder (; 22 ;) (type $i) (param $x i32)
  (local $y i32)
  (if
   (i32.const 1)
   (set_local $x
    (i32.le_u
     (get_local $y)
     (block (result i32)
      (set_local $y
       (i32.const 5)
      )
      (i32.const 10)
     )
    )
   )
  )
 )
 (func $return-different-type (; 23 ;) (type $4) (result i32)
  (drop
   (f64.abs
    (block
     (drop
      (i32.const 2)
     )
     (return
      (i32.const 1)
     )
    )
   )
  )
  (unreachable)
 )
 (func $drop-unreachable (; 24 ;) (type $4) (result i32)
  (local $0 i32)
  (drop
   (block (result i32)
    (unreachable)
   )
  )
  (unreachable)
 )
 (func $concrete_finale_in_unreachable (; 25 ;) (type $5) (result f64)
  (drop
   (block (result f64)
    (unreachable)
    (f64.const 6.322092475576799e-96)
   )
  )
  (f64.const -1)
 )
 (func $dont-move-unreachable (; 26 ;) (type $3)
  (loop $label$0
   (drop
    (block (result i32)
     (br $label$0)
     (i32.const 1)
    )
   )
  )
 )
 (func $dont-move-unreachable-last (; 27 ;) (type $3)
  (loop $label$0
   (drop
    (block (result i32)
     (call $dont-move-unreachable-last)
     (br $label$0)
    )
   )
  )
 )
 (func $move-around-unreachable-in-middle (; 28 ;) (type $3)
  (loop $label$0
   (nop)
   (drop
    (block $label$3 (result i32)
     (drop
      (br_if $label$3
       (br $label$0)
       (i32.const 0)
      )
     )
     (i32.const 1)
    )
   )
  )
 )
 (func $drop-unreachable-block-with-concrete-final (; 29 ;) (type $3)
  (drop
   (block (result i32)
    (drop
     (block
      (drop
       (return)
      )
     )
    )
    (i32.const -452)
   )
  )
 )
 (func $merging-with-unreachable-in-middle (; 30 ;) (type $4) (result i32)
  (return
   (i32.const 21536)
  )
  (block $label$15
   (br $label$15)
  )
  (i32.const 19299)
 )
 (func $remove-br-after-unreachable (; 31 ;) (type $3)
  (block $label$9
   (drop
    (block
     (return)
     (br $label$9)
    )
   )
  )
 )
)
