| ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
| |
| ;; RUN: wasm-opt %s --multi-memory-lowering -all -S -o - | filecheck %s |
| |
| (module |
| (memory $memory1 1) |
| (memory $memory2 1 1) |
| (export "mem" (memory $memory1)) |
| ) |
| |
| ;; CHECK: (type $0 (func (result i32))) |
| |
| ;; CHECK: (type $1 (func (param i32) (result i32))) |
| |
| ;; CHECK: (global $memory2_byte_offset (mut i32) (i32.const 65536)) |
| |
| ;; CHECK: (memory $combined_memory 1 1) |
| |
| ;; CHECK: (export "mem" (memory $combined_memory)) |
| |
| ;; CHECK: (func $memory1_size (type $0) (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 (type $0) (result i32) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (i32.sub |
| ;; CHECK-NEXT: (memory.size) |
| ;; 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 $memory1_grow (type $1) (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: (if |
| ;; CHECK-NEXT: (i32.eq |
| ;; CHECK-NEXT: (memory.grow |
| ;; CHECK-NEXT: (local.get $page_delta) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const -1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (i32.const -1) |
| ;; CHECK-NEXT: ) |
| ;; 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: (local.get $return_size) |
| ;; CHECK-NEXT: ) |
| |
| ;; CHECK: (func $memory2_grow (type $1) (param $page_delta i32) (result i32) |
| ;; CHECK-NEXT: (local $return_size i32) |
| ;; CHECK-NEXT: (local.set $return_size |
| ;; CHECK-NEXT: (call $memory2_size) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (if |
| ;; CHECK-NEXT: (i32.eq |
| ;; CHECK-NEXT: (memory.grow |
| ;; CHECK-NEXT: (local.get $page_delta) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const -1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (then |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (i32.const -1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (local.get $return_size) |
| ;; CHECK-NEXT: ) |