aboutsummaryrefslogtreecommitdiff
path: root/src/zig_llvm.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-04-18 12:16:42 -0400
committerAndrew Kelley <superjoe30@gmail.com>2018-04-18 12:16:42 -0400
commitf1f998e07124f141312289ff82e0ad8d99af1cf7 (patch)
tree3c01eb14a0bd8e4cdd83f376097264f45efae2ff /src/zig_llvm.cpp
parent96ebd8b23b39e2d4019a8019a6774d7c3d20149d (diff)
downloadzig-f1f998e07124f141312289ff82e0ad8d99af1cf7.tar.gz
zig-f1f998e07124f141312289ff82e0ad8d99af1cf7.zip
improve cmpxchg
* remove @cmpxchg, add @cmpxchgWeak and @cmpxchgStrong - See explanations in the langref. * add operand type as first parameter * return type is ?T where T is the operand type closes #461
Diffstat (limited to 'src/zig_llvm.cpp')
-rw-r--r--src/zig_llvm.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp
index a56378ab3e..5905fa8167 100644
--- a/src/zig_llvm.cpp
+++ b/src/zig_llvm.cpp
@@ -765,10 +765,12 @@ static AtomicOrdering mapFromLLVMOrdering(LLVMAtomicOrdering Ordering) {
LLVMValueRef ZigLLVMBuildCmpXchg(LLVMBuilderRef builder, LLVMValueRef ptr, LLVMValueRef cmp,
LLVMValueRef new_val, LLVMAtomicOrdering success_ordering,
- LLVMAtomicOrdering failure_ordering)
+ LLVMAtomicOrdering failure_ordering, bool is_weak)
{
- return wrap(unwrap(builder)->CreateAtomicCmpXchg(unwrap(ptr), unwrap(cmp), unwrap(new_val),
- mapFromLLVMOrdering(success_ordering), mapFromLLVMOrdering(failure_ordering)));
+ AtomicCmpXchgInst *inst = unwrap(builder)->CreateAtomicCmpXchg(unwrap(ptr), unwrap(cmp),
+ unwrap(new_val), mapFromLLVMOrdering(success_ordering), mapFromLLVMOrdering(failure_ordering));
+ inst->setWeak(is_weak);
+ return wrap(inst);
}
LLVMValueRef ZigLLVMBuildNSWShl(LLVMBuilderRef builder, LLVMValueRef LHS, LLVMValueRef RHS,