diff options
Diffstat (limited to 'src/passes/SafeHeap.cpp')
-rw-r--r-- | src/passes/SafeHeap.cpp | 16 |
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); } } |