summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGAtomic.cpp
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2014-03-11 10:49:03 +0000
committerTim Northover <tnorthover@apple.com>2014-03-11 10:49:03 +0000
commit0622b3a67af7545fa634c7fa98407f570a01d7b0 (patch)
tree4b8fdab5e79b312e4c076b88f09ee748dd957198 /clang/lib/CodeGen/CGAtomic.cpp
parente94a518a22db4b21f4a4a9e34173a11e9dfc5fcc (diff)
downloadbcm5719-llvm-0622b3a67af7545fa634c7fa98407f570a01d7b0.tar.gz
bcm5719-llvm-0622b3a67af7545fa634c7fa98407f570a01d7b0.zip
Update for IR: add a second AtomicOrdering to cmpxchg insts.
rdar://problem/15996804 llvm-svn: 203560
Diffstat (limited to 'clang/lib/CodeGen/CGAtomic.cpp')
-rw-r--r--clang/lib/CodeGen/CGAtomic.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGAtomic.cpp b/clang/lib/CodeGen/CGAtomic.cpp
index 88655774044..b5a494e2879 100644
--- a/clang/lib/CodeGen/CGAtomic.cpp
+++ b/clang/lib/CodeGen/CGAtomic.cpp
@@ -201,13 +201,14 @@ EmitAtomicOp(CodeGenFunction &CGF, AtomicExpr *E, llvm::Value *Dest,
case AtomicExpr::AO__atomic_compare_exchange_n: {
// Note that cmpxchg only supports specifying one ordering and
// doesn't support weak cmpxchg, at least at the moment.
-
llvm::LoadInst *Expected = CGF.Builder.CreateLoad(Val1);
Expected->setAlignment(Align);
llvm::LoadInst *Desired = CGF.Builder.CreateLoad(Val2);
Desired->setAlignment(Align);
- llvm::AtomicCmpXchgInst *Old =
- CGF.Builder.CreateAtomicCmpXchg(Ptr, Expected, Desired, Order);
+ llvm::AtomicOrdering FailureOrder =
+ llvm::AtomicCmpXchgInst::getStrongestFailureOrdering(Order);
+ llvm::AtomicCmpXchgInst *Old = CGF.Builder.CreateAtomicCmpXchg(
+ Ptr, Expected, Desired, Order, FailureOrder);
Old->setVolatile(E->isVolatile());
// Cmp holds the result of the compare-exchange operation: true on success,
OpenPOWER on IntegriCloud