summaryrefslogtreecommitdiff
path: root/src/passes/SafeHeap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/SafeHeap.cpp')
-rw-r--r--src/passes/SafeHeap.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/passes/SafeHeap.cpp b/src/passes/SafeHeap.cpp
index 5c1980f28..ce1adff15 100644
--- a/src/passes/SafeHeap.cpp
+++ b/src/passes/SafeHeap.cpp
@@ -152,6 +152,10 @@ struct SafeHeap : public Pass {
}
}
+ bool isPossibleAtomicOperation(Index align, Index bytes, bool shared, Type type) {
+ return align == bytes && shared && isIntegerType(type);
+ }
+
void addGlobals(Module* module) {
// load funcs
Load load;
@@ -168,8 +172,10 @@ struct SafeHeap : public Pass {
if (align > bytes) continue;
for (auto isAtomic : { true, false }) {
load.isAtomic = isAtomic;
- if (isAtomic && align != bytes) continue;
- if (isAtomic && !module->memory.shared) continue;
+ if (isAtomic &&
+ !isPossibleAtomicOperation(align, bytes, module->memory.shared, type)) {
+ continue;
+ }
addLoadFunc(load, module);
}
}
@@ -189,8 +195,10 @@ struct SafeHeap : public Pass {
if (align > bytes) continue;
for (auto isAtomic : { true, false }) {
store.isAtomic = isAtomic;
- if (isAtomic && align != bytes) continue;
- if (isAtomic && !module->memory.shared) continue;
+ if (isAtomic &&
+ !isPossibleAtomicOperation(align, bytes, module->memory.shared, valueType)) {
+ continue;
+ }
addStoreFunc(store, module);
}
}