blob: 1b56a338c54f07dce772ba5e19fa9571373a1e94 [file] [log] [blame] [edit]
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; RUN: wasm-opt %s -all -S -o - | filecheck %s
;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s --check-prefix=RTRIP
;; Check that we can roundtrip through the text format as well.
;; RUN: wasm-opt %s -all -S -o - | wasm-opt -all -S -o -
(module
;; CHECK: (type $0 (func))
;; CHECK: (type $i8_array (array (mut i8)))
;; RTRIP: (type $0 (func))
;; RTRIP: (type $i8_array (array (mut i8)))
(type $i8_array (array (mut i8)))
;; CHECK: (global $arr (ref $i8_array) (array.new_default $i8_array
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: ))
;; RTRIP: (global $arr (ref $i8_array) (array.new_default $i8_array
;; RTRIP-NEXT: (i32.const 4)
;; RTRIP-NEXT: ))
(global $arr (ref $i8_array)
(array.new_default $i8_array (i32.const 4))
)
;; CHECK: (func $stores (type $0)
;; CHECK-NEXT: (i32.store8 (type $i8_array)
;; CHECK-NEXT: (global.get $arr)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store16 (type $i8_array)
;; CHECK-NEXT: (global.get $arr)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.store (type $i8_array)
;; CHECK-NEXT: (global.get $arr)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (f32.store (type $i8_array)
;; CHECK-NEXT: (global.get $arr)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (f32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i64.store8 (type $i8_array)
;; CHECK-NEXT: (global.get $arr)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i64.store16 (type $i8_array)
;; CHECK-NEXT: (global.get $arr)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i64.store32 (type $i8_array)
;; CHECK-NEXT: (global.get $arr)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (f64.store (type $i8_array)
;; CHECK-NEXT: (global.get $arr)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (f64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; RTRIP: (func $stores (type $0)
;; RTRIP-NEXT: (i32.store8 (type $i8_array)
;; RTRIP-NEXT: (global.get $arr)
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: (i32.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (i32.store16 (type $i8_array)
;; RTRIP-NEXT: (global.get $arr)
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: (i32.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (i32.store (type $i8_array)
;; RTRIP-NEXT: (global.get $arr)
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: (i32.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (f32.store (type $i8_array)
;; RTRIP-NEXT: (global.get $arr)
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: (f32.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (i64.store8 (type $i8_array)
;; RTRIP-NEXT: (global.get $arr)
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: (i64.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (i64.store16 (type $i8_array)
;; RTRIP-NEXT: (global.get $arr)
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: (i64.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (i64.store32 (type $i8_array)
;; RTRIP-NEXT: (global.get $arr)
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: (i64.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (f64.store (type $i8_array)
;; RTRIP-NEXT: (global.get $arr)
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: (f64.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: )
(func $stores
(i32.store8 (type $i8_array) (global.get $arr) (i32.const 1) (i32.const 2))
(i32.store16 (type $i8_array) (global.get $arr) (i32.const 1) (i32.const 2))
(i32.store (type $i8_array) (global.get $arr) (i32.const 1) (i32.const 2))
(f32.store (type $i8_array) (global.get $arr) (i32.const 1) (f32.const 2.0))
(i64.store8 (type $i8_array) (global.get $arr) (i32.const 1) (i64.const 2))
(i64.store16 (type $i8_array) (global.get $arr) (i32.const 1) (i64.const 2))
(i64.store32 (type $i8_array) (global.get $arr) (i32.const 1) (i64.const 2))
(f64.store (type $i8_array) (global.get $arr) (i32.const 1) (f64.const 2.0))
)
;; CHECK: (func $stores_null (type $0)
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.null none)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.null none)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.null none)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.null none)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.null none)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.null none)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.null none)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (ref.null none)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; RTRIP: (func $stores_null (type $0)
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (ref.null none)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (ref.null none)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (ref.null none)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (ref.null none)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (f32.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (ref.null none)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i64.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (ref.null none)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i64.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (ref.null none)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i64.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (ref.null none)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (i32.const 1)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (drop
;; RTRIP-NEXT: (f64.const 2)
;; RTRIP-NEXT: )
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: )
(func $stores_null
(i32.store8 (type $i8_array) (ref.null $i8_array) (i32.const 1) (i32.const 2))
(i32.store16 (type $i8_array) (ref.null $i8_array) (i32.const 1) (i32.const 2))
(i32.store (type $i8_array) (ref.null $i8_array) (i32.const 1) (i32.const 2))
(f32.store (type $i8_array) (ref.null $i8_array) (i32.const 1) (f32.const 2.0))
(i64.store8 (type $i8_array) (ref.null $i8_array) (i32.const 1) (i64.const 2))
(i64.store16 (type $i8_array) (ref.null $i8_array) (i32.const 1) (i64.const 2))
(i64.store32 (type $i8_array) (ref.null $i8_array) (i32.const 1) (i64.const 2))
(f64.store (type $i8_array) (ref.null $i8_array) (i32.const 1) (f64.const 2.0))
)
;; CHECK: (func $stores_unreachable (type $0)
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block ;; (replaces unreachable ArrayStore we can't emit)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (f64.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; RTRIP: (func $stores_unreachable (type $0)
;; RTRIP-NEXT: (unreachable)
;; RTRIP-NEXT: )
(func $stores_unreachable
(i32.store8 (type $i8_array) (unreachable) (i32.const 1) (i32.const 2))
(i32.store16 (type $i8_array) (unreachable) (i32.const 1) (i32.const 2))
(i32.store (type $i8_array) (unreachable) (i32.const 1) (i32.const 2))
(f32.store (type $i8_array) (unreachable) (i32.const 1) (f32.const 2.0))
(i64.store8 (type $i8_array) (unreachable) (i32.const 1) (i64.const 2))
(i64.store16 (type $i8_array) (unreachable) (i32.const 1) (i64.const 2))
(i64.store32 (type $i8_array) (unreachable) (i32.const 1) (i64.const 2))
(f64.store (type $i8_array) (unreachable) (i32.const 1) (f64.const 2.0))
)
)