Skip to content

Commit f750642

Browse files
Only generate AcqRel SafeHeap load methods when --relaxed-atomics is
enabled
1 parent 2f0fc13 commit f750642

File tree

4 files changed

+33697
-5
lines changed

4 files changed

+33697
-5
lines changed

src/passes/SafeHeap.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,15 @@ struct SafeHeap : public Pass {
243243
if (align > bytes) {
244244
continue;
245245
}
246-
for (auto memoryOrder : {MemoryOrder::Unordered,
247-
MemoryOrder::AcqRel,
248-
MemoryOrder::SeqCst}) {
246+
247+
std::vector<MemoryOrder> memoryOrders(
248+
features.hasRelaxedAtomics()
249+
? std::initializer_list<MemoryOrder>{MemoryOrder::Unordered,
250+
MemoryOrder::AcqRel,
251+
MemoryOrder::SeqCst}
252+
: std::initializer_list<MemoryOrder>{MemoryOrder::Unordered,
253+
MemoryOrder::SeqCst});
254+
for (MemoryOrder memoryOrder : memoryOrders) {
249255
load.order = memoryOrder;
250256
if (load.isAtomic() &&
251257
!isPossibleAtomicOperation(
@@ -424,8 +430,9 @@ struct SafeHeap : public Pass {
424430
bool is64,
425431
Name memory) {
426432
bool lowMemUnused = getPassOptions().lowMemoryUnused;
427-
auto upperOp = is64 ? lowMemUnused ? LtUInt64 : EqInt64
428-
: lowMemUnused ? LtUInt32 : EqInt32;
433+
auto upperOp = is64 ? lowMemUnused ? LtUInt64 : EqInt64
434+
: lowMemUnused ? LtUInt32
435+
: EqInt32;
429436
auto upperBound = lowMemUnused ? PassOptions::LowMemoryBound : 0;
430437
Expression* brkLocation;
431438
if (sbrk.is()) {

0 commit comments

Comments
 (0)