summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/RemoveUnusedModuleElements.cpp1
-rw-r--r--src/wasm/wasm-validator.cpp2
-rw-r--r--test/lit/passes/remove-unused-module-elements_all-features.wast13
-rw-r--r--test/wasm2js/atomic_fence.2asm.js34
4 files changed, 13 insertions, 37 deletions
diff --git a/src/passes/RemoveUnusedModuleElements.cpp b/src/passes/RemoveUnusedModuleElements.cpp
index 6ad804e0b..103be5e4a 100644
--- a/src/passes/RemoveUnusedModuleElements.cpp
+++ b/src/passes/RemoveUnusedModuleElements.cpp
@@ -138,7 +138,6 @@ struct ReferenceFinder : public PostWalker<ReferenceFinder> {
void visitAtomicRMW(AtomicRMW* curr) { usesMemory = true; }
void visitAtomicWait(AtomicWait* curr) { usesMemory = true; }
void visitAtomicNotify(AtomicNotify* curr) { usesMemory = true; }
- void visitAtomicFence(AtomicFence* curr) { usesMemory = true; }
void visitMemoryInit(MemoryInit* curr) { usesMemory = true; }
void visitDataDrop(DataDrop* curr) {
// TODO: Replace this with a use of a data segment (#5224).
diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp
index 123a15c1e..8abcd92fe 100644
--- a/src/wasm/wasm-validator.cpp
+++ b/src/wasm/wasm-validator.cpp
@@ -1172,8 +1172,6 @@ void FunctionValidator::visitAtomicNotify(AtomicNotify* curr) {
}
void FunctionValidator::visitAtomicFence(AtomicFence* curr) {
- shouldBeFalse(
- getModule()->memories.empty(), curr, "Memory operations require a memory");
shouldBeTrue(getModule()->features.hasAtomics(),
curr,
"Atomic operations require threads [--enable-threads]");
diff --git a/test/lit/passes/remove-unused-module-elements_all-features.wast b/test/lit/passes/remove-unused-module-elements_all-features.wast
index d441406f9..2e784e52b 100644
--- a/test/lit/passes/remove-unused-module-elements_all-features.wast
+++ b/test/lit/passes/remove-unused-module-elements_all-features.wast
@@ -351,6 +351,19 @@
(memory.atomic.notify (i32.const 0) (i32.const 0))
)
)
+(module ;; atomic.fence does not use a memory, so should not keep the memory alive.
+ (memory $0 (shared 1 1))
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (export "fake-user" (func $user))
+ (export "fake-user" $user)
+ ;; CHECK: (func $user (type $none_=>_none)
+ ;; CHECK-NEXT: (atomic.fence)
+ ;; CHECK-NEXT: )
+ (func $user
+ (atomic.fence)
+ )
+)
(module ;; more use checks
;; CHECK: (type $none_=>_i32 (func (result i32)))
diff --git a/test/wasm2js/atomic_fence.2asm.js b/test/wasm2js/atomic_fence.2asm.js
index b73378815..cbad74a73 100644
--- a/test/wasm2js/atomic_fence.2asm.js
+++ b/test/wasm2js/atomic_fence.2asm.js
@@ -1,14 +1,5 @@
function asmFunc(imports) {
- var buffer = new ArrayBuffer(1507328);
- var HEAP8 = new Int8Array(buffer);
- var HEAP16 = new Int16Array(buffer);
- var HEAP32 = new Int32Array(buffer);
- var HEAPU8 = new Uint8Array(buffer);
- var HEAPU16 = new Uint16Array(buffer);
- var HEAPU32 = new Uint32Array(buffer);
- var HEAPF32 = new Float32Array(buffer);
- var HEAPF64 = new Float64Array(buffer);
var Math_imul = Math.imul;
var Math_fround = Math.fround;
var Math_abs = Math.abs;
@@ -23,31 +14,6 @@ function asmFunc(imports) {
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
- function __wasm_memory_grow(pagesToAdd) {
- pagesToAdd = pagesToAdd | 0;
- var oldPages = __wasm_memory_size() | 0;
- var newPages = oldPages + pagesToAdd | 0;
- if ((oldPages < newPages) && (newPages < 65536)) {
- var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536));
- var newHEAP8 = new Int8Array(newBuffer);
- newHEAP8.set(HEAP8);
- HEAP8 = new Int8Array(newBuffer);
- HEAP16 = new Int16Array(newBuffer);
- HEAP32 = new Int32Array(newBuffer);
- HEAPU8 = new Uint8Array(newBuffer);
- HEAPU16 = new Uint16Array(newBuffer);
- HEAPU32 = new Uint32Array(newBuffer);
- HEAPF32 = new Float32Array(newBuffer);
- HEAPF64 = new Float64Array(newBuffer);
- buffer = newBuffer;
- }
- return oldPages;
- }
-
return {
"atomic_fence": $0
};