Skip to content

Commit

Permalink
Showing 4 changed files with 13 additions and 4 deletions.
11 changes: 10 additions & 1 deletion src/llvm/ext/llvm_ext.cc
Original file line number Diff line number Diff line change
@@ -392,12 +392,21 @@ void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
InlinedAt ? unwrap<MDNode>(InlinedAt) : nullptr));
}

LLVMValueRef LLVMBuildCmpxchg(LLVMBuilderRef B,
LLVMValueRef LLVMExtBuildCmpxchg(LLVMBuilderRef B,
LLVMValueRef PTR, LLVMValueRef Cmp, LLVMValueRef New,
LLVMAtomicOrdering SuccessOrdering,
LLVMAtomicOrdering FailureOrdering) {
return wrap(unwrap(B)->CreateAtomicCmpXchg(unwrap(PTR), unwrap(Cmp), unwrap(New),
(llvm::AtomicOrdering)SuccessOrdering, (llvm::AtomicOrdering)FailureOrdering));
}

void LLVMExtSetOrdering(LLVMValueRef MemAccessInst, LLVMAtomicOrdering Ordering) {
Value *P = unwrap<Value>(MemAccessInst);
AtomicOrdering O = (AtomicOrdering) Ordering;

if (LoadInst *LI = dyn_cast<LoadInst>(P))
return LI->setOrdering(O);
return cast<StoreInst>(P)->setOrdering(O);
}

}
1 change: 0 additions & 1 deletion src/llvm/lib_llvm.cr
Original file line number Diff line number Diff line change
@@ -275,6 +275,5 @@ lib LibLLVM
fun dispose_target_data = LLVMDisposeTargetData(TargetDataRef)
fun dispose_pass_manager_builder = LLVMPassManagerBuilderDispose(PassManagerBuilderRef)
fun set_volatile = LLVMSetVolatile(value : ValueRef, volatile : UInt32)
fun set_ordering = LLVMSetOrdering(value : ValueRef, ordering : LLVM::AtomicOrdering)
fun set_alignment = LLVMSetAlignment(value : ValueRef, bytes : UInt32)
end
3 changes: 2 additions & 1 deletion src/llvm/lib_llvm_ext.cr
Original file line number Diff line number Diff line change
@@ -91,5 +91,6 @@ lib LibLLVMExt

fun set_current_debug_location = LLVMSetCurrentDebugLocation2(LibLLVM::BuilderRef, LibC::Int, LibC::Int, Metadata, Metadata)

fun build_cmpxchg = LLVMBuildCmpxchg(builder : LibLLVM::BuilderRef, pointer : LibLLVM::ValueRef, cmp : LibLLVM::ValueRef, new : LibLLVM::ValueRef, success_ordering : LLVM::AtomicOrdering, failure_ordering : LLVM::AtomicOrdering) : LibLLVM::ValueRef
fun build_cmpxchg = LLVMExtBuildCmpxchg(builder : LibLLVM::BuilderRef, pointer : LibLLVM::ValueRef, cmp : LibLLVM::ValueRef, new : LibLLVM::ValueRef, success_ordering : LLVM::AtomicOrdering, failure_ordering : LLVM::AtomicOrdering) : LibLLVM::ValueRef
fun set_ordering = LLVMExtSetOrdering(value : LibLLVM::ValueRef, ordering : LLVM::AtomicOrdering)
end
2 changes: 1 addition & 1 deletion src/llvm/value_methods.cr
Original file line number Diff line number Diff line change
@@ -76,7 +76,7 @@ module LLVM::ValueMethods
end

def ordering=(ordering)
LibLLVM.set_ordering(self, ordering)
LibLLVMExt.set_ordering(self, ordering)
end

def alignment=(bytes)

0 comments on commit 3525bcd

Please sign in to comment.