summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/lit/passes/multi-memory-lowering.wast172
1 files changed, 170 insertions, 2 deletions
diff --git a/test/lit/passes/multi-memory-lowering.wast b/test/lit/passes/multi-memory-lowering.wast
index d66db1b02..dba7260a0 100644
--- a/test/lit/passes/multi-memory-lowering.wast
+++ b/test/lit/passes/multi-memory-lowering.wast
@@ -1,6 +1,6 @@
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
-;; RUN: wasm-opt %s --enable-multi-memories --multi-memory-lowering --enable-bulk-memory --enable-extended-const -S -o - | filecheck %s
-;; RUN: wasm-opt %s --enable-multi-memories --multi-memory-lowering-with-bounds-checks --enable-bulk-memory --enable-extended-const -S -o - | filecheck %s --check-prefix BOUNDS
+;; RUN: wasm-opt %s --enable-multi-memories --multi-memory-lowering --enable-bulk-memory --enable-extended-const --enable-simd -S -o - | filecheck %s
+;; RUN: wasm-opt %s --enable-multi-memories --multi-memory-lowering-with-bounds-checks --enable-bulk-memory --enable-extended-const --enable-simd -S -o - | filecheck %s --check-prefix BOUNDS
(module
(memory $memory1 1)
@@ -8,12 +8,16 @@
(memory $memory3 3)
(data (memory $memory1) (i32.const 0) "a")
(data (memory $memory3) (i32.const 1) "123")
+ ;; CHECK: (type $i32_=>_v128 (func (param i32) (result v128)))
+
;; CHECK: (type $none_=>_i32 (func (result i32)))
;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32)))
;; CHECK: (type $none_=>_none (func))
+ ;; CHECK: (type $i32_v128_=>_v128 (func (param i32 v128) (result v128)))
+
;; CHECK: (global $memory2_byte_offset (mut i32) (i32.const 65536))
;; CHECK: (global $memory3_byte_offset (mut i32) (i32.const 196608))
@@ -50,12 +54,16 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
+ ;; BOUNDS: (type $i32_=>_v128 (func (param i32) (result v128)))
+
;; BOUNDS: (type $none_=>_i32 (func (result i32)))
;; BOUNDS: (type $i32_=>_i32 (func (param i32) (result i32)))
;; BOUNDS: (type $none_=>_none (func))
+ ;; BOUNDS: (type $i32_v128_=>_v128 (func (param i32 v128) (result v128)))
+
;; BOUNDS: (global $memory2_byte_offset (mut i32) (i32.const 65536))
;; BOUNDS: (global $memory3_byte_offset (mut i32) (i32.const 196608))
@@ -277,6 +285,166 @@
(i32.const 115)
)
)
+
+ ;; CHECK: (func $v128.load8_splat (param $0 i32) (result v128)
+ ;; CHECK-NEXT: (v128.load8_splat
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; BOUNDS: (func $v128.load8_splat (param $0 i32) (result v128)
+ ;; BOUNDS-NEXT: (local $1 i32)
+ ;; BOUNDS-NEXT: (v128.load8_splat
+ ;; BOUNDS-NEXT: (block (result i32)
+ ;; BOUNDS-NEXT: (local.set $1
+ ;; BOUNDS-NEXT: (local.get $0)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (if
+ ;; BOUNDS-NEXT: (i32.gt_u
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (local.get $1)
+ ;; BOUNDS-NEXT: (i32.const 0)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (i32.const 1)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (call $memory1_size)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (unreachable)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (local.get $1)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ (func $v128.load8_splat (param $0 i32) (result v128)
+ (v128.load8_splat $memory1
+ (local.get $0)
+ )
+ )
+
+ ;; CHECK: (func $v128.load16_lane (param $0 i32) (param $1 v128) (result v128)
+ ;; CHECK-NEXT: (v128.load16_lane offset=32 align=1 0
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (global.get $memory2_byte_offset)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; BOUNDS: (func $v128.load16_lane (param $0 i32) (param $1 v128) (result v128)
+ ;; BOUNDS-NEXT: (local $2 i32)
+ ;; BOUNDS-NEXT: (v128.load16_lane offset=32 align=1 0
+ ;; BOUNDS-NEXT: (block (result i32)
+ ;; BOUNDS-NEXT: (local.set $2
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (global.get $memory2_byte_offset)
+ ;; BOUNDS-NEXT: (local.get $0)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (if
+ ;; BOUNDS-NEXT: (i32.gt_u
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (local.get $2)
+ ;; BOUNDS-NEXT: (i32.const 32)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (i32.const 2)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (call $memory2_size)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (unreachable)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (local.get $2)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (local.get $1)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ (func $v128.load16_lane (param $0 i32) (param $1 v128) (result v128)
+ (v128.load16_lane $memory2 align=1 offset=32 0
+ (local.get $0)
+ (local.get $1)
+ )
+ )
+
+ ;; CHECK: (func $v128.load32_zero (param $0 i32) (result v128)
+ ;; CHECK-NEXT: (v128.load32_zero offset=16 align=1
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (global.get $memory3_byte_offset)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; BOUNDS: (func $v128.load32_zero (param $0 i32) (result v128)
+ ;; BOUNDS-NEXT: (local $1 i32)
+ ;; BOUNDS-NEXT: (v128.load32_zero offset=16 align=1
+ ;; BOUNDS-NEXT: (block (result i32)
+ ;; BOUNDS-NEXT: (local.set $1
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (global.get $memory3_byte_offset)
+ ;; BOUNDS-NEXT: (local.get $0)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (if
+ ;; BOUNDS-NEXT: (i32.gt_u
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (local.get $1)
+ ;; BOUNDS-NEXT: (i32.const 16)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (i32.const 4)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (call $memory3_size)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (unreachable)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (local.get $1)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ (func $v128.load32_zero (param $0 i32) (result v128)
+ (v128.load32_zero $memory3 align=1 offset=16
+ (local.get $0)
+ )
+ )
+ ;; CHECK: (func $v128.load32x2_s (param $0 i32) (result v128)
+ ;; CHECK-NEXT: (v128.load32x2_s
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (global.get $memory2_byte_offset)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; BOUNDS: (func $v128.load32x2_s (param $0 i32) (result v128)
+ ;; BOUNDS-NEXT: (local $1 i32)
+ ;; BOUNDS-NEXT: (v128.load32x2_s
+ ;; BOUNDS-NEXT: (block (result i32)
+ ;; BOUNDS-NEXT: (local.set $1
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (global.get $memory2_byte_offset)
+ ;; BOUNDS-NEXT: (local.get $0)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (if
+ ;; BOUNDS-NEXT: (i32.gt_u
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (i32.add
+ ;; BOUNDS-NEXT: (local.get $1)
+ ;; BOUNDS-NEXT: (i32.const 0)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (i32.const 8)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (call $memory2_size)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (unreachable)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: (local.get $1)
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ ;; BOUNDS-NEXT: )
+ (func $v128.load32x2_s (param $0 i32) (result v128)
+ (v128.load32x2_s $memory2
+ (local.get $0)
+ )
+ )
)
;; CHECK: (func $memory1_size (result i32)