summaryrefslogtreecommitdiff
path: root/src/passes/Memory64Lowering.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/Memory64Lowering.cpp')
-rw-r--r--src/passes/Memory64Lowering.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/passes/Memory64Lowering.cpp b/src/passes/Memory64Lowering.cpp
index c376ed6c6..95dbf4f17 100644
--- a/src/passes/Memory64Lowering.cpp
+++ b/src/passes/Memory64Lowering.cpp
@@ -90,11 +90,21 @@ struct Memory64Lowering : public WalkerPass<PostWalker<Memory64Lowering>> {
wrapAddress64(curr->size);
}
+ void visitAtomicRMW(AtomicRMW* curr) { wrapAddress64(curr->ptr); }
+
+ void visitAtomicCmpxchg(AtomicCmpxchg* curr) { wrapAddress64(curr->ptr); }
+
+ void visitAtomicWait(AtomicWait* curr) { wrapAddress64(curr->ptr); }
+
+ void visitAtomicNotify(AtomicNotify* curr) { wrapAddress64(curr->ptr); }
+
void visitMemory(Memory* memory) {
for (auto& segment : memory->segments) {
- auto* c = segment.offset->cast<Const>();
- c->value = Literal(static_cast<uint32_t>(c->value.geti64()));
- c->type = Type::i32;
+ if (!segment.isPassive) {
+ auto* c = segment.offset->cast<Const>();
+ c->value = Literal(static_cast<uint32_t>(c->value.geti64()));
+ c->type = Type::i32;
+ }
}
// This is visited last.
memory->indexType = Type::i32;