;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; NOTE: This test was ported using port_passes_tests_to_lit.py and could be cleaned up.

;; RUN: foreach %s %t wasm-opt --safe-heap --low-memory-unused --enable-threads --enable-simd --enable-relaxed-atomics -S -o - | filecheck %s

(module
 (memory 100 100 shared)
 ;; CHECK:      (type $0 (func (param i32 i32) (result i64)))

 ;; CHECK:      (type $1 (func (param i32 i32) (result i32)))

 ;; CHECK:      (type $2 (func (param i32 i32 i64)))

 ;; CHECK:      (type $3 (func (param i32 i32 i32)))

 ;; CHECK:      (type $4 (func (param i32 i32) (result v128)))

 ;; CHECK:      (type $5 (func (param i32 i32 v128)))

 ;; CHECK:      (type $6 (func))

 ;; CHECK:      (type $7 (func (param i32 i32) (result f64)))

 ;; CHECK:      (type $8 (func (param i32 i32 f64)))

 ;; CHECK:      (type $9 (func (param i32 i32) (result f32)))

 ;; CHECK:      (type $10 (func (param i32 i32 f32)))

 ;; CHECK:      (type $11 (func (result i32)))

 ;; CHECK:      (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32)))

 ;; CHECK:      (import "env" "segfault" (func $segfault))

 ;; CHECK:      (import "env" "alignfault" (func $alignfault))

 ;; CHECK:      (memory $0 100 100 shared)

 ;; CHECK:      (func $loads
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_4_4
 ;; CHECK-NEXT:    (i32.const 1)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_4_SC
 ;; CHECK-NEXT:    (i32.const 1)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_4_4
 ;; CHECK-NEXT:    (i32.const 2)
 ;; CHECK-NEXT:    (i32.const 31)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_4_2
 ;; CHECK-NEXT:    (i32.const 3)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_4_1
 ;; CHECK-NEXT:    (i32.const 4)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_1_1
 ;; CHECK-NEXT:    (i32.const 5)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_2_U_2
 ;; CHECK-NEXT:    (i32.const 6)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i64_1_1
 ;; CHECK-NEXT:    (i32.const 7)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i64_2_U_2
 ;; CHECK-NEXT:    (i32.const 8)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i64_4_4
 ;; CHECK-NEXT:    (i32.const 9)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i64_8_4
 ;; CHECK-NEXT:    (i32.const 10)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i64_8_8
 ;; CHECK-NEXT:    (i32.const 11)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_f32_4_4
 ;; CHECK-NEXT:    (i32.const 12)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_f64_8_8
 ;; CHECK-NEXT:    (i32.const 13)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_v128_16_16
 ;; CHECK-NEXT:    (i32.const 14)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT: )
 (func $loads
  (drop (i32.load (i32.const 1)))
  (drop (i32.atomic.load (i32.const 1)))
  (drop (i32.load offset=31 (i32.const 2)))
  (drop (i32.load align=2 (i32.const 3)))
  (drop (i32.load align=1 (i32.const 4)))
  (drop (i32.load8_s (i32.const 5)))
  (drop (i32.load16_u (i32.const 6)))
  (drop (i64.load8_s (i32.const 7)))
  (drop (i64.load16_u (i32.const 8)))
  (drop (i64.load32_s (i32.const 9)))
  (drop (i64.load align=4 (i32.const 10)))
  (drop (i64.load (i32.const 11)))
  (drop (f32.load (i32.const 12)))
  (drop (f64.load (i32.const 13)))
  (drop (v128.load (i32.const 14)))
 )
 ;; CHECK:      (func $stores
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i32_4_4
 ;; CHECK-NEXT:   (i32.const 1)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i32.const 100)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i32_4_SC
 ;; CHECK-NEXT:   (i32.const 1)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i32.const 100)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i32_4_4
 ;; CHECK-NEXT:   (i32.const 2)
 ;; CHECK-NEXT:   (i32.const 31)
 ;; CHECK-NEXT:   (i32.const 200)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i32_4_2
 ;; CHECK-NEXT:   (i32.const 3)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i32.const 300)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i32_4_1
 ;; CHECK-NEXT:   (i32.const 4)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i32.const 400)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i32_1_1
 ;; CHECK-NEXT:   (i32.const 5)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i32.const 500)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i32_2_2
 ;; CHECK-NEXT:   (i32.const 6)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i32.const 600)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i64_1_1
 ;; CHECK-NEXT:   (i32.const 7)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i64.const 700)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i64_2_2
 ;; CHECK-NEXT:   (i32.const 8)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i64.const 800)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i64_4_4
 ;; CHECK-NEXT:   (i32.const 9)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i64.const 900)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i64_8_4
 ;; CHECK-NEXT:   (i32.const 10)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i64.const 1000)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i64_8_8
 ;; CHECK-NEXT:   (i32.const 11)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i64.const 1100)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_f32_4_4
 ;; CHECK-NEXT:   (i32.const 12)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (f32.const 1200)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_f64_8_8
 ;; CHECK-NEXT:   (i32.const 13)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (f64.const 1300)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_v128_16_16
 ;; CHECK-NEXT:   (i32.const 14)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT: )
 (func $stores
  (i32.store (i32.const 1) (i32.const 100))
  (i32.atomic.store (i32.const 1) (i32.const 100))
  (i32.store offset=31 (i32.const 2) (i32.const 200))
  (i32.store align=2 (i32.const 3) (i32.const 300))
  (i32.store align=1 (i32.const 4) (i32.const 400))
  (i32.store8 (i32.const 5) (i32.const 500))
  (i32.store16 (i32.const 6) (i32.const 600))
  (i64.store8 (i32.const 7) (i64.const 700))
  (i64.store16 (i32.const 8) (i64.const 800))
  (i64.store32 (i32.const 9) (i64.const 900))
  (i64.store align=4 (i32.const 10) (i64.const 1000))
  (i64.store (i32.const 11) (i64.const 1100))
  (f32.store (i32.const 12) (f32.const 1200))
  (f64.store (i32.const 13) (f64.const 1300))
  (v128.store (i32.const 14) (v128.const i32x4 1 2 3 4))
 )
)
;; not shared
;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load8_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.shr_s
;; CHECK-NEXT:   (i32.shl
;; CHECK-NEXT:    (i32.atomic.load8_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.const 24)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i32.const 24)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.shr_s
;; CHECK-NEXT:   (i32.shl
;; CHECK-NEXT:    (i32.atomic.load8_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.const 24)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i32.const 24)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_U_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load8_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_U_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.shr_s
;; CHECK-NEXT:   (i32.shl
;; CHECK-NEXT:    (i32.atomic.load16_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.const 16)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i32.const 16)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.shr_s
;; CHECK-NEXT:   (i32.shl
;; CHECK-NEXT:    (i32.atomic.load16_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.const 16)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i32.const 16)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load16_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load8_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load8_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 56)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 56)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load8_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 56)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 56)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_U_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load8_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_U_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load16_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 48)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 48)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load16_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 48)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 48)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load16_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load32_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 32)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 32)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load32_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 32)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 32)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load32_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load32_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=8
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 15)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_1_AR (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store8 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_1_SC (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store16 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_AR (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store16 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_SC (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_AR (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_SC (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_1_AR (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store8 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_1_SC (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store16 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_AR (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store16 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_SC (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32 align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_AR (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store32 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_SC (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store32
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_AR (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_SC (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 15)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )
(module
 (memory 100 100)
 ;; CHECK:      (type $0 (func (param i32 i32) (result i64)))

 ;; CHECK:      (type $1 (func (param i32 i32 i64)))

 ;; CHECK:      (type $2 (func (param i32 i32) (result i32)))

 ;; CHECK:      (type $3 (func (param i32 i32 i32)))

 ;; CHECK:      (type $4 (func (param i32 i32) (result v128)))

 ;; CHECK:      (type $5 (func (param i32 i32 v128)))

 ;; CHECK:      (type $6 (func (param i32 i32) (result f64)))

 ;; CHECK:      (type $7 (func (param i32 i32 f64)))

 ;; CHECK:      (type $8 (func))

 ;; CHECK:      (type $9 (func (param i32 i32) (result f32)))

 ;; CHECK:      (type $10 (func (param i32 i32 f32)))

 ;; CHECK:      (type $11 (func (result i32)))

 ;; CHECK:      (import "env" "emscripten_get_sbrk_ptr" (func $emscripten_get_sbrk_ptr (result i32)))

 ;; CHECK:      (import "env" "segfault" (func $segfault))

 ;; CHECK:      (import "env" "alignfault" (func $alignfault))

 ;; CHECK:      (memory $0 100 100)

 ;; CHECK:      (func $loads
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_4_4
 ;; CHECK-NEXT:    (i32.const 1)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT: )
 (func $loads
  (drop (i32.load (i32.const 1)))
 )
)
;; pre-existing
;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load8_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load8_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=8
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 15)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store16 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store16 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32 align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $emscripten_get_sbrk_ptr)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 15)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )
(module
 ;; CHECK:      (type $0 (func (param i32 i32) (result i64)))

 ;; CHECK:      (type $1 (func (param i32 i32) (result i32)))

 ;; CHECK:      (type $2 (func (param i32 i32 i64)))

 ;; CHECK:      (type $3 (func (param i32 i32 i32)))

 ;; CHECK:      (type $4 (func (param i32 i32) (result v128)))

 ;; CHECK:      (type $5 (func (param i32 i32 v128)))

 ;; CHECK:      (type $6 (func (param i32 i32) (result f64)))

 ;; CHECK:      (type $7 (func (param i32 i32 f64)))

 ;; CHECK:      (type $FUNCSIG$v (func))
 (type $FUNCSIG$v (func))
 ;; CHECK:      (type $9 (func (param i32 i32) (result f32)))

 ;; CHECK:      (type $10 (func (param i32 i32 f32)))

 ;; CHECK:      (type $11 (func (result i32)))

 ;; CHECK:      (import "env" "emscripten_get_sbrk_ptr" (func $foo (result i32)))
 (import "env" "emscripten_get_sbrk_ptr" (func $foo (result i32)))
 ;; CHECK:      (import "env" "segfault" (func $segfault))
 (import "env" "segfault" (func $segfault))
 ;; CHECK:      (import "env" "alignfault" (func $alignfault))
 (import "env" "alignfault" (func $alignfault))
 ;; CHECK:      (memory $0 100 100 shared)
 (memory $0 100 100 shared)
 ;; CHECK:      (func $actions
 ;; CHECK-NEXT:  (drop
 ;; CHECK-NEXT:   (call $SAFE_HEAP_LOAD_i32_4_4
 ;; CHECK-NEXT:    (i32.const 1)
 ;; CHECK-NEXT:    (i32.const 0)
 ;; CHECK-NEXT:   )
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT:  (call $SAFE_HEAP_STORE_i32_4_4
 ;; CHECK-NEXT:   (i32.const 1)
 ;; CHECK-NEXT:   (i32.const 0)
 ;; CHECK-NEXT:   (i32.const 100)
 ;; CHECK-NEXT:  )
 ;; CHECK-NEXT: )
 (func $actions
  (drop (i32.load (i32.const 1)))
  (i32.store (i32.const 1) (i32.const 100))
 )
)
;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load8_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.shr_s
;; CHECK-NEXT:   (i32.shl
;; CHECK-NEXT:    (i32.atomic.load8_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.const 24)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i32.const 24)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.shr_s
;; CHECK-NEXT:   (i32.shl
;; CHECK-NEXT:    (i32.atomic.load8_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.const 24)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i32.const 24)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_U_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_U_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load8_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_1_U_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.shr_s
;; CHECK-NEXT:   (i32.shl
;; CHECK-NEXT:    (i32.atomic.load16_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.const 16)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i32.const 16)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.shr_s
;; CHECK-NEXT:   (i32.shl
;; CHECK-NEXT:    (i32.atomic.load16_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.const 16)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i32.const 16)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load16_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_2_U_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_1 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_2 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_4 (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_AR (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i32_4_SC (param $0 i32) (param $1 i32) (result i32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load8_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load8_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 56)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 56)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load8_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 56)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 56)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_U_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load8_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_1_U_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load8_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load16_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 48)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 48)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load16_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 48)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 48)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load16_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_2_U_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load16_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_s
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load32_u acqrel
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 32)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 32)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.shr_s
;; CHECK-NEXT:   (i64.shl
;; CHECK-NEXT:    (i64.atomic.load32_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i64.const 32)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (i64.const 32)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load32_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load32_u acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_4_U_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load32_u
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_1 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_2 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_4 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_8 (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_AR (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load acqrel
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_i64_8_SC (param $0 i32) (param $1 i32) (result i64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_1 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_2 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f32_4_4 (param $0 i32) (param $1 i32) (result f32)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_1 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_2 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_4 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_f64_8_8 (param $0 i32) (param $1 i32) (result f64)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_1 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=1
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_2 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=2
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_4 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=4
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_8 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load align=8
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_LOAD_v128_16_16 (param $0 i32) (param $1 i32) (result v128)
;; CHECK-NEXT:  (local $2 i32)
;; CHECK-NEXT:  (local.set $2
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $2)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $2)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $2)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $2)
;; CHECK-NEXT:    (i32.const 15)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.load
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_1_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_1_AR (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store8 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_1_SC (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store16 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_2 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_AR (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store16 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_2_SC (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_1 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_2 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_4 (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_AR (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i32_4_SC (param $0 i32) (param $1 i32) (param $2 i32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i32.atomic.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_1_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_1_AR (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store8 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_1_SC (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 1)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store16 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_AR (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store16 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_2_SC (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 2)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store16
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32 align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32 align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_4 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store32
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_AR (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store32 acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_4_SC (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store32
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_1 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_2 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_4 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_8 (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_AR (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store acqrel
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_i64_8_SC (param $0 i32) (param $1 i32) (param $2 i64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (i64.atomic.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_1 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_2 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f32_4_4 (param $0 i32) (param $1 i32) (param $2 f32)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 4)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f32.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_1 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_2 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_4 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_f64_8_8 (param $0 i32) (param $1 i32) (param $2 f64)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 8)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (f64.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_1 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=1
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_2 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=2
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_4 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 3)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=4
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_8 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 7)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store align=8
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )

;; CHECK:      (func $SAFE_HEAP_STORE_v128_16_16 (param $0 i32) (param $1 i32) (param $2 v128)
;; CHECK-NEXT:  (local $3 i32)
;; CHECK-NEXT:  (local.set $3
;; CHECK-NEXT:   (i32.add
;; CHECK-NEXT:    (local.get $0)
;; CHECK-NEXT:    (local.get $1)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.or
;; CHECK-NEXT:    (i32.lt_u
;; CHECK-NEXT:     (local.get $3)
;; CHECK-NEXT:     (i32.const 1024)
;; CHECK-NEXT:    )
;; CHECK-NEXT:    (i32.or
;; CHECK-NEXT:     (i32.gt_u
;; CHECK-NEXT:      (i32.add
;; CHECK-NEXT:       (local.get $3)
;; CHECK-NEXT:       (i32.const 16)
;; CHECK-NEXT:      )
;; CHECK-NEXT:      (i32.load
;; CHECK-NEXT:       (call $foo)
;; CHECK-NEXT:      )
;; CHECK-NEXT:     )
;; CHECK-NEXT:     (i32.lt_u
;; CHECK-NEXT:      (local.get $3)
;; CHECK-NEXT:      (local.get $0)
;; CHECK-NEXT:     )
;; CHECK-NEXT:    )
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $segfault)
;; CHECK-NEXT:    (unreachable)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (if
;; CHECK-NEXT:   (i32.and
;; CHECK-NEXT:    (local.get $3)
;; CHECK-NEXT:    (i32.const 15)
;; CHECK-NEXT:   )
;; CHECK-NEXT:   (then
;; CHECK-NEXT:    (call $alignfault)
;; CHECK-NEXT:   )
;; CHECK-NEXT:  )
;; CHECK-NEXT:  (v128.store
;; CHECK-NEXT:   (local.get $3)
;; CHECK-NEXT:   (local.get $2)
;; CHECK-NEXT:  )
;; CHECK-NEXT: )
