llvm/2153c4b8281c1e5f25887ef9183947198c50a9d2.patch
2020-02-01 23:13:18 +03:00

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);