Skip to content

Commit c9224f8

Browse files
committed
Swap out LLVMAtomicOrdering for our own AtomicOrdering
1 parent 6c722df commit c9224f8

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

src/builder.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use either::{Either, Left, Right};
22
use llvm_sys::core::{LLVMBuildAdd, LLVMBuildAlloca, LLVMBuildAnd, LLVMBuildArrayAlloca, LLVMBuildArrayMalloc, LLVMBuildBr, LLVMBuildCall, LLVMBuildCast, LLVMBuildCondBr, LLVMBuildExtractValue, LLVMBuildFAdd, LLVMBuildFCmp, LLVMBuildFDiv, LLVMBuildFence, LLVMBuildFMul, LLVMBuildFNeg, LLVMBuildFree, LLVMBuildFSub, LLVMBuildGEP, LLVMBuildICmp, LLVMBuildInsertValue, LLVMBuildIsNotNull, LLVMBuildIsNull, LLVMBuildLoad, LLVMBuildMalloc, LLVMBuildMul, LLVMBuildNeg, LLVMBuildNot, LLVMBuildOr, LLVMBuildPhi, LLVMBuildPointerCast, LLVMBuildRet, LLVMBuildRetVoid, LLVMBuildStore, LLVMBuildSub, LLVMBuildUDiv, LLVMBuildUnreachable, LLVMBuildXor, LLVMDisposeBuilder, LLVMGetElementType, LLVMGetInsertBlock, LLVMGetReturnType, LLVMGetTypeKind, LLVMInsertIntoBuilder, LLVMPositionBuilderAtEnd, LLVMTypeOf, LLVMBuildExtractElement, LLVMBuildInsertElement, LLVMBuildIntToPtr, LLVMBuildPtrToInt, LLVMInsertIntoBuilderWithName, LLVMClearInsertionPosition, LLVMCreateBuilder, LLVMPositionBuilder, LLVMPositionBuilderBefore, LLVMBuildAggregateRet, LLVMBuildStructGEP, LLVMBuildInBoundsGEP, LLVMBuildPtrDiff, LLVMBuildNSWAdd, LLVMBuildNUWAdd, LLVMBuildNSWSub, LLVMBuildNUWSub, LLVMBuildNSWMul, LLVMBuildNUWMul, LLVMBuildSDiv, LLVMBuildSRem, LLVMBuildURem, LLVMBuildFRem, LLVMBuildNSWNeg, LLVMBuildNUWNeg, LLVMBuildFPToUI, LLVMBuildFPToSI, LLVMBuildSIToFP, LLVMBuildUIToFP, LLVMBuildFPTrunc, LLVMBuildFPExt, LLVMBuildIntCast, LLVMBuildFPCast, LLVMBuildSExtOrBitCast, LLVMBuildZExtOrBitCast, LLVMBuildTruncOrBitCast, LLVMBuildSwitch, LLVMAddCase, LLVMBuildShl, LLVMBuildAShr, LLVMBuildLShr, LLVMBuildGlobalString, LLVMBuildGlobalStringPtr, LLVMBuildExactSDiv, LLVMBuildTrunc, LLVMBuildSExt, LLVMBuildZExt, LLVMBuildSelect, LLVMBuildAddrSpaceCast, LLVMBuildBitCast, LLVMBuildShuffleVector, LLVMBuildVAArg, LLVMBuildIndirectBr, LLVMAddDestination};
33
use llvm_sys::prelude::{LLVMBuilderRef, LLVMValueRef};
4-
use llvm_sys::{LLVMTypeKind, LLVMAtomicOrdering};
4+
use llvm_sys::{LLVMTypeKind};
55

6-
use {IntPredicate, FloatPredicate};
6+
use {AtomicOrdering, IntPredicate, FloatPredicate};
77
use basic_block::BasicBlock;
88
use values::{AggregateValue, AggregateValueEnum, AsValueRef, BasicValue, BasicValueEnum, PhiValue, FunctionValue, IntValue, PointerValue, VectorValue, InstructionValue, GlobalValue, IntMathValue, FloatMathValue, PointerMathValue, InstructionOpcode, CallSiteValue};
99
use types::{AsTypeRef, BasicType, IntMathType, FloatMathType, PointerType, PointerMathType};
@@ -1088,12 +1088,11 @@ impl Builder {
10881088

10891089
// REVIEW: Not sure if this should return InstructionValue or an actual value
10901090
// TODO: Better name for num?
1091-
// FIXME: Shouldn't use llvm_sys enum
1092-
pub fn build_fence(&self, atomic_ordering: LLVMAtomicOrdering, num: i32, name: &str) -> InstructionValue {
1091+
pub fn build_fence(&self, atomic_ordering: AtomicOrdering, num: i32, name: &str) -> InstructionValue {
10931092
let c_string = CString::new(name).expect("Conversion to CString failed unexpectedly");
10941093

10951094
let val = unsafe {
1096-
LLVMBuildFence(self.builder, atomic_ordering, num, c_string.as_ptr())
1095+
LLVMBuildFence(self.builder, atomic_ordering.as_llvm_enum(), num, c_string.as_ptr())
10971096
};
10981097

10991098
InstructionValue::new(val)

src/lib.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ pub mod targets;
4242
pub mod types;
4343
pub mod values;
4444

45-
use llvm_sys::{LLVMIntPredicate, LLVMRealPredicate, LLVMVisibility, LLVMThreadLocalMode, LLVMDLLStorageClass};
45+
use llvm_sys::{LLVMIntPredicate, LLVMRealPredicate, LLVMVisibility, LLVMThreadLocalMode, LLVMDLLStorageClass, LLVMAtomicOrdering};
4646

4747
// Thanks to kennytm for coming up with assert_unique_features!
4848
// which ensures that the LLVM feature flags are mutually exclusive
@@ -168,6 +168,19 @@ enum_rename!{
168168
}
169169
}
170170

171+
// REVIEW: Maybe this belongs in some sort of prelude?
172+
enum_rename!{
173+
AtomicOrdering <=> LLVMAtomicOrdering {
174+
NotAtomic <=> LLVMAtomicOrderingNotAtomic,
175+
Unordered <=> LLVMAtomicOrderingUnordered,
176+
Monotonic <=> LLVMAtomicOrderingMonotonic,
177+
Acquire <=> LLVMAtomicOrderingAcquire,
178+
Release <=> LLVMAtomicOrderingRelease,
179+
AcquireRelease <=> LLVMAtomicOrderingAcquireRelease,
180+
SequentiallyConsistent <=> LLVMAtomicOrderingSequentiallyConsistent,
181+
}
182+
}
183+
171184
/// Defines the optimization level used to compile a `Module`.
172185
///
173186
/// # Remarks

0 commit comments

Comments
 (0)