mirror of
https://abf.rosa.ru/djam/llvm.git
synced 2025-02-23 16:22:50 +00:00
33 lines
1.3 KiB
Diff
33 lines
1.3 KiB
Diff
From 2153c4b8281c1e5f25887ef9183947198c50a9d2 Mon Sep 17 00:00:00 2001
|
|
From: Philip Reames <listmail@philipreames.com>
|
|
Date: Tue, 19 Mar 2019 17:20:49 +0000
|
|
Subject: [PATCH] [AtomicExpand] Fix a crash bug when lowering unordered loads
|
|
to cmpxchg
|
|
|
|
Add tests for wider atomic loads and stores. In the process, fix a crasher where we appearently handled unorder stores, but not loads, when lowering to cmpxchg idioms.
|
|
|
|
llvm-svn: 356482
|
|
|
|
################################################################
|
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1797127
|
|
https://github.com/rust-lang/compiler-builtins/issues/338
|
|
|
|
[ mikhailnov: backported to llvm8, removed tests ]
|
|
################################################################
|
|
|
|
---
|
|
diff --git a/llvm/lib/CodeGen/AtomicExpandPass.cpp b/llvm/lib/CodeGen/AtomicExpandPass.cpp
|
|
index 10dd21d1ef9d..7a8013abccfb 100644
|
|
--- a/llvm/lib/CodeGen/AtomicExpandPass.cpp
|
|
+++ b/llvm/lib/CodeGen/AtomicExpandPass.cpp
|
|
@@ -431,6 +431,9 @@
|
|
bool AtomicExpand::expandAtomicLoadToCmpXchg(LoadInst *LI) {
|
|
IRBuilder<> Builder(LI);
|
|
AtomicOrdering Order = LI->getOrdering();
|
|
+ if (Order == AtomicOrdering::Unordered)
|
|
+ Order = AtomicOrdering::Monotonic;
|
|
+
|
|
Value *Addr = LI->getPointerOperand();
|
|
Type *Ty = cast<PointerType>(Addr->getType())->getElementType();
|
|
Constant *DummyVal = Constant::getNullValue(Ty);
|
|
|