diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/lit/help/wasm-opt.test | 3 | ||||
-rw-r--r-- | test/lit/help/wasm2js.test | 3 | ||||
-rw-r--r-- | test/lit/passes/multi-memory-lowering.wast | 247 |
3 files changed, 253 insertions, 0 deletions
diff --git a/test/lit/help/wasm-opt.test b/test/lit/help/wasm-opt.test index b8679a62d..7ee35ab1a 100644 --- a/test/lit/help/wasm-opt.test +++ b/test/lit/help/wasm-opt.test @@ -273,6 +273,9 @@ ;; CHECK-NEXT: --mod-asyncify-never-unwind apply the assumption that ;; CHECK-NEXT: asyncify never unwinds ;; CHECK-NEXT: +;; CHECK-NEXT: --multi-memory-lowering combines multiple memories into +;; CHECK-NEXT: a single memory +;; CHECK-NEXT: ;; CHECK-NEXT: --name-types (re)name all heap types ;; CHECK-NEXT: ;; CHECK-NEXT: --nm name list diff --git a/test/lit/help/wasm2js.test b/test/lit/help/wasm2js.test index 4df281803..0d61348b8 100644 --- a/test/lit/help/wasm2js.test +++ b/test/lit/help/wasm2js.test @@ -232,6 +232,9 @@ ;; CHECK-NEXT: --mod-asyncify-never-unwind apply the assumption that ;; CHECK-NEXT: asyncify never unwinds ;; CHECK-NEXT: +;; CHECK-NEXT: --multi-memory-lowering combines multiple memories into +;; CHECK-NEXT: a single memory +;; CHECK-NEXT: ;; CHECK-NEXT: --name-types (re)name all heap types ;; CHECK-NEXT: ;; CHECK-NEXT: --nm name list diff --git a/test/lit/passes/multi-memory-lowering.wast b/test/lit/passes/multi-memory-lowering.wast new file mode 100644 index 000000000..6bf1ecc7c --- /dev/null +++ b/test/lit/passes/multi-memory-lowering.wast @@ -0,0 +1,247 @@ +;; 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 + +(module + (memory $memory1 1) + (memory $memory2 2) + (memory $memory3 3) + (data (memory $memory1) (i32.const 0) "a") + (data (memory $memory3) (i32.const 1) "123") + ;; CHECK: (type $none_=>_i32 (func (result i32))) + + ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32))) + + ;; CHECK: (type $none_=>_none (func)) + + ;; CHECK: (global $memory2_byte_offset (mut i32) (i32.const 65536)) + + ;; CHECK: (global $memory3_byte_offset (mut i32) (i32.const 196608)) + + ;; CHECK: (memory $combined_memory 6) + + ;; CHECK: (data (i32.const 0) "a") + + ;; CHECK: (data (i32.add + ;; CHECK-NEXT: (global.get $memory3_byte_offset) + ;; CHECK-NEXT: (i32.const 1) + ;; CHECK-NEXT: ) "123") + + ;; CHECK: (func $loads + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (global.get $memory2_byte_offset) + ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (global.get $memory3_byte_offset) + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $loads + (drop + (i32.load $memory1 + (i32.const 10) + ) + ) + (drop + (i32.load $memory2 + (i32.const 11) + ) + ) + (drop + (i32.load $memory3 + (i32.const 12) + ) + ) + ) + ;; CHECK: (func $stores + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (i32.const 115) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (global.get $memory2_byte_offset) + ;; CHECK-NEXT: (i32.const 11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 115) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.add + ;; CHECK-NEXT: (global.get $memory3_byte_offset) + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 115) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $stores + (i32.store $memory1 + (i32.const 10) + (i32.const 115) + ) + (i32.store $memory2 + (i32.const 11) + (i32.const 115) + ) + (i32.store $memory3 + (i32.const 12) + (i32.const 115) + ) + ) +) + +;; CHECK: (func $memory1_size (result i32) +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.div_u +;; CHECK-NEXT: (global.get $memory2_byte_offset) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) + +;; CHECK: (func $memory2_size (result i32) +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.sub +;; CHECK-NEXT: (i32.div_u +;; CHECK-NEXT: (global.get $memory3_byte_offset) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (i32.div_u +;; CHECK-NEXT: (global.get $memory2_byte_offset) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) + +;; CHECK: (func $memory3_size (result i32) +;; CHECK-NEXT: (return +;; CHECK-NEXT: (i32.sub +;; CHECK-NEXT: (memory.size) +;; CHECK-NEXT: (i32.div_u +;; CHECK-NEXT: (global.get $memory3_byte_offset) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) + +;; CHECK: (func $memory1_grow (param $page_delta i32) (result i32) +;; CHECK-NEXT: (local $return_size i32) +;; CHECK-NEXT: (local $memory_size i32) +;; CHECK-NEXT: (local.set $return_size +;; CHECK-NEXT: (call $memory1_size) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.set $memory_size +;; CHECK-NEXT: (memory.size) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (drop +;; CHECK-NEXT: (memory.grow +;; CHECK-NEXT: (local.get $page_delta) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (memory.copy +;; CHECK-NEXT: (i32.add +;; CHECK-NEXT: (global.get $memory2_byte_offset) +;; CHECK-NEXT: (i32.mul +;; CHECK-NEXT: (local.get $page_delta) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.get $memory2_byte_offset) +;; CHECK-NEXT: (i32.sub +;; CHECK-NEXT: (i32.mul +;; CHECK-NEXT: (local.get $memory_size) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.get $memory2_byte_offset) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.set $memory2_byte_offset +;; CHECK-NEXT: (i32.add +;; CHECK-NEXT: (global.get $memory2_byte_offset) +;; CHECK-NEXT: (i32.mul +;; CHECK-NEXT: (local.get $page_delta) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.set $memory3_byte_offset +;; CHECK-NEXT: (i32.add +;; CHECK-NEXT: (global.get $memory3_byte_offset) +;; CHECK-NEXT: (i32.mul +;; CHECK-NEXT: (local.get $page_delta) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.get $return_size) +;; CHECK-NEXT: ) + +;; CHECK: (func $memory2_grow (param $page_delta i32) (result i32) +;; CHECK-NEXT: (local $return_size i32) +;; CHECK-NEXT: (local $memory_size i32) +;; CHECK-NEXT: (local.set $return_size +;; CHECK-NEXT: (call $memory2_size) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.set $memory_size +;; CHECK-NEXT: (memory.size) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (drop +;; CHECK-NEXT: (memory.grow +;; CHECK-NEXT: (local.get $page_delta) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (memory.copy +;; CHECK-NEXT: (i32.add +;; CHECK-NEXT: (global.get $memory3_byte_offset) +;; CHECK-NEXT: (i32.mul +;; CHECK-NEXT: (local.get $page_delta) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.get $memory3_byte_offset) +;; CHECK-NEXT: (i32.sub +;; CHECK-NEXT: (i32.mul +;; CHECK-NEXT: (local.get $memory_size) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.get $memory3_byte_offset) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (global.set $memory3_byte_offset +;; CHECK-NEXT: (i32.add +;; CHECK-NEXT: (global.get $memory3_byte_offset) +;; CHECK-NEXT: (i32.mul +;; CHECK-NEXT: (local.get $page_delta) +;; CHECK-NEXT: (i32.const 65536) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.get $return_size) +;; CHECK-NEXT: ) + +;; CHECK: (func $memory3_grow (param $page_delta i32) (result i32) +;; CHECK-NEXT: (local $return_size i32) +;; CHECK-NEXT: (local.set $return_size +;; CHECK-NEXT: (call $memory3_size) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (drop +;; CHECK-NEXT: (memory.grow +;; CHECK-NEXT: (local.get $page_delta) +;; CHECK-NEXT: ) +;; CHECK-NEXT: ) +;; CHECK-NEXT: (local.get $return_size) +;; CHECK-NEXT: ) |