Skip to content

Commit aebfa3c

Browse files
authored
Add SIMD load and store support to Memory64Lowering pass (#8303)
These are handled with a different visitor than the scalar loads and stores.
1 parent 29f0070 commit aebfa3c

File tree

2 files changed

+71
-3
lines changed

2 files changed

+71
-3
lines changed

src/passes/Memory64Lowering.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ struct Memory64Lowering : public WalkerPass<PostWalker<Memory64Lowering>> {
8787

8888
void visitStore(Store* curr) { wrapAddress64(curr->ptr, curr->memory); }
8989

90+
void visitSIMDLoad(SIMDLoad* curr) { wrapAddress64(curr->ptr, curr->memory); }
91+
92+
void visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) {
93+
wrapAddress64(curr->ptr, curr->memory);
94+
}
95+
9096
void visitMemorySize(MemorySize* curr) {
9197
auto& module = *getModule();
9298
auto* memory = module.getMemory(curr->memory);

test/lit/passes/memory64-lowering.wast

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
22

3-
;; RUN: foreach %s %t wasm-opt --memory64-lowering --enable-memory64 --enable-threads --enable-bulk-memory --enable-reference-types -S -o - | filecheck %s
3+
;; RUN: foreach %s %t wasm-opt --memory64-lowering --enable-simd --enable-memory64 --enable-threads --enable-bulk-memory --enable-reference-types -S -o - | filecheck %s
44

55
;; Check the --table64-lowering alias
6-
;; RUN: foreach %s %t wasm-opt --table64-lowering --enable-memory64 --enable-threads --enable-bulk-memory --enable-reference-types -S -o - | filecheck %s
6+
;; RUN: foreach %s %t wasm-opt --table64-lowering --enable-simd --enable-memory64 --enable-threads --enable-bulk-memory --enable-reference-types -S -o - | filecheck %s
77

88
(module
99
;; CHECK: (type $0 (func))
1010

11+
;; CHECK: (type $1 (func (param i64 v128)))
12+
1113
;; CHECK: (import "env" "__memory_base" (global $__memory_base i64))
1214
(import "env" "__memory_base" (global $__memory_base i64))
1315
;; CHECK: (import "env" "__memory_base32" (global $__memory_base32 i32))
@@ -292,7 +294,67 @@
292294
(memory.fill (i64.const 1) (i32.const 2) (i64.const 3))
293295
(memory.copy (i64.const 1) (i64.const 2) (i64.const 3))
294296
)
295-
)
297+
298+
;; CHECK: (func $simd (param $ptr i64) (param $val v128)
299+
;; CHECK-NEXT: (v128.store
300+
;; CHECK-NEXT: (i32.wrap_i64
301+
;; CHECK-NEXT: (local.get $ptr)
302+
;; CHECK-NEXT: )
303+
;; CHECK-NEXT: (local.get $val)
304+
;; CHECK-NEXT: )
305+
;; CHECK-NEXT: (v128.store8_lane 0
306+
;; CHECK-NEXT: (i32.wrap_i64
307+
;; CHECK-NEXT: (local.get $ptr)
308+
;; CHECK-NEXT: )
309+
;; CHECK-NEXT: (local.get $val)
310+
;; CHECK-NEXT: )
311+
;; CHECK-NEXT: (drop
312+
;; CHECK-NEXT: (v128.load
313+
;; CHECK-NEXT: (i32.wrap_i64
314+
;; CHECK-NEXT: (local.get $ptr)
315+
;; CHECK-NEXT: )
316+
;; CHECK-NEXT: )
317+
;; CHECK-NEXT: )
318+
;; CHECK-NEXT: (drop
319+
;; CHECK-NEXT: (v128.load8_lane 0
320+
;; CHECK-NEXT: (i32.wrap_i64
321+
;; CHECK-NEXT: (local.get $ptr)
322+
;; CHECK-NEXT: )
323+
;; CHECK-NEXT: (local.get $val)
324+
;; CHECK-NEXT: )
325+
;; CHECK-NEXT: )
326+
;; CHECK-NEXT: (drop
327+
;; CHECK-NEXT: (v128.load8_splat
328+
;; CHECK-NEXT: (i32.wrap_i64
329+
;; CHECK-NEXT: (local.get $ptr)
330+
;; CHECK-NEXT: )
331+
;; CHECK-NEXT: )
332+
;; CHECK-NEXT: )
333+
;; CHECK-NEXT: (drop
334+
;; CHECK-NEXT: (v128.load8x8_s
335+
;; CHECK-NEXT: (i32.wrap_i64
336+
;; CHECK-NEXT: (local.get $ptr)
337+
;; CHECK-NEXT: )
338+
;; CHECK-NEXT: )
339+
;; CHECK-NEXT: )
340+
;; CHECK-NEXT: (drop
341+
;; CHECK-NEXT: (v128.load32_zero
342+
;; CHECK-NEXT: (i32.wrap_i64
343+
;; CHECK-NEXT: (local.get $ptr)
344+
;; CHECK-NEXT: )
345+
;; CHECK-NEXT: )
346+
;; CHECK-NEXT: )
347+
;; CHECK-NEXT: )
348+
(func $simd (param $ptr i64) (param $val v128)
349+
(v128.store (local.get $ptr) (local.get $val))
350+
(v128.store8_lane 0 (local.get $ptr) (local.get $val))
351+
(drop (v128.load (local.get $ptr)))
352+
(drop (v128.load8_lane 0 (local.get $ptr) (local.get $val)))
353+
(drop (v128.load8_splat (local.get $ptr)))
354+
(drop (v128.load8x8_s (local.get $ptr)))
355+
(drop (v128.load32_zero (local.get $ptr)))
356+
)
357+
)
296358

297359
(module
298360
;; CHECK: (memory $0 1 65536)

0 commit comments

Comments
 (0)