(module
 (type $0 (func (result i32)))
 (type $1 (func))
 (type $2 (func (param i32)))
 (import "spectest" "print" (func $print (param i32)))
 (memory $0 1 1)
 (export "mem" (memory $0))
 (start $main)
 (func $check (result i32)
  (if
   (i32.ge_u
    (i32.load
     (i32.const 4)
    )
    (i32.const 48)
   )
   (then
    (unreachable)
   )
  )
  (i32.store
   (i32.const 4)
   (i32.add
    (i32.load
     (i32.const 4)
    )
    (i32.const 4)
   )
  )
  (call $print
   (i32.sub
    (i32.const 0)
    (i32.load offset=4
     (i32.load
      (i32.const 4)
     )
    )
   )
  )
  (i32.load offset=4
   (i32.load
    (i32.const 4)
   )
  )
 )
 (func $main
  (local $0 i32)
  (local $1 i32)
  (block
   (call $print
    (i32.const 0)
   )
   (local.set $0
    (call $check)
   )
  )
  (block $switch$1$leave
   (block $switch$1$default
    (block $switch$1$case$4
     (block $switch$1$case$2
      (br_table $switch$1$default $switch$1$case$2 $switch$1$default $switch$1$case$2 $switch$1$case$2 $switch$1$case$4 $switch$1$case$2 $switch$1$default $switch$1$default $switch$1$case$2 $switch$1$default
       (i32.rem_u
        (local.get $0)
        (i32.const 1)
       )
      )
     )
     (block
      (block
       (block
        (call $print
         (i32.const 1)
        )
        (local.set $0
         (call $check)
        )
       )
      )
     )
     (br $switch$1$leave)
    )
    (block
     (block
      (block
       (call $print
        (i32.const 2)
       )
       (local.set $0
        (call $check)
       )
      )
     )
    )
    (br $switch$1$leave)
   )
   (block
    (block
     (block
      (call $print
       (i32.const 3)
      )
      (local.set $0
       (call $check)
      )
     )
    )
   )
   (br $switch$1$leave)
  )
 )
)
