rustc_codegen_llvm: use safe references for Builder.

This commit is contained in:
Irina Popa 2018-07-03 15:49:43 +03:00
parent d04e66d114
commit 2dbde55395
2 changed files with 142 additions and 144 deletions

View file

@ -13,7 +13,7 @@
use llvm; use llvm;
use llvm::{AtomicRmwBinOp, AtomicOrdering, SynchronizationScope, AsmDialect}; use llvm::{AtomicRmwBinOp, AtomicOrdering, SynchronizationScope, AsmDialect};
use llvm::{Opcode, IntPredicate, RealPredicate, False, OperandBundleDef}; use llvm::{Opcode, IntPredicate, RealPredicate, False, OperandBundleDef};
use llvm::{ValueRef, BasicBlockRef, BuilderRef}; use llvm::{ValueRef, BasicBlockRef};
use common::*; use common::*;
use type_::Type; use type_::Type;
use value::Value; use value::Value;
@ -32,7 +32,7 @@ use syntax_pos::Span;
// All Builders must have an llfn associated with them // All Builders must have an llfn associated with them
#[must_use] #[must_use]
pub struct Builder<'a, 'll: 'a, 'tcx: 'll> { pub struct Builder<'a, 'll: 'a, 'tcx: 'll> {
pub llbuilder: BuilderRef, pub llbuilder: &'ll llvm::Builder,
pub cx: &'a CodegenCx<'ll, 'tcx>, pub cx: &'a CodegenCx<'ll, 'tcx>,
} }
@ -599,7 +599,6 @@ impl Builder<'a, 'll, 'tcx> {
flags: MemFlags, flags: MemFlags,
) -> ValueRef { ) -> ValueRef {
debug!("Store {:?} -> {:?} ({:?})", Value(val), Value(ptr), flags); debug!("Store {:?} -> {:?} ({:?})", Value(val), Value(ptr), flags);
assert!(!self.llbuilder.is_null());
self.count_insn("store"); self.count_insn("store");
let ptr = self.check_store(val, ptr); let ptr = self.check_store(val, ptr);
unsafe { unsafe {

View file

@ -384,8 +384,7 @@ extern { pub type Metadata_opaque; }
pub type MetadataRef = *mut Metadata_opaque; pub type MetadataRef = *mut Metadata_opaque;
extern { pub type BasicBlock_opaque; } extern { pub type BasicBlock_opaque; }
pub type BasicBlockRef = *mut BasicBlock_opaque; pub type BasicBlockRef = *mut BasicBlock_opaque;
extern { pub type Builder_opaque; } extern { pub type Builder; }
pub type BuilderRef = *mut Builder_opaque;
extern { pub type ExecutionEngine_opaque; } extern { pub type ExecutionEngine_opaque; }
pub type ExecutionEngineRef = *mut ExecutionEngine_opaque; pub type ExecutionEngineRef = *mut ExecutionEngine_opaque;
extern { pub type MemoryBuffer_opaque; } extern { pub type MemoryBuffer_opaque; }
@ -762,35 +761,35 @@ extern "C" {
Count: c_uint); Count: c_uint);
// Instruction builders // Instruction builders
pub fn LLVMCreateBuilderInContext(C: &Context) -> BuilderRef; pub fn LLVMCreateBuilderInContext(C: &Context) -> &Builder;
pub fn LLVMPositionBuilder(Builder: BuilderRef, Block: BasicBlockRef, Instr: ValueRef); pub fn LLVMPositionBuilder(Builder: &Builder, Block: BasicBlockRef, Instr: ValueRef);
pub fn LLVMPositionBuilderBefore(Builder: BuilderRef, Instr: ValueRef); pub fn LLVMPositionBuilderBefore(Builder: &Builder, Instr: ValueRef);
pub fn LLVMPositionBuilderAtEnd(Builder: BuilderRef, Block: BasicBlockRef); pub fn LLVMPositionBuilderAtEnd(Builder: &Builder, Block: BasicBlockRef);
pub fn LLVMGetInsertBlock(Builder: BuilderRef) -> BasicBlockRef; pub fn LLVMGetInsertBlock(Builder: &Builder) -> BasicBlockRef;
pub fn LLVMDisposeBuilder(Builder: BuilderRef); pub fn LLVMDisposeBuilder(Builder: &Builder);
// Metadata // Metadata
pub fn LLVMSetCurrentDebugLocation(Builder: BuilderRef, L: Option<NonNull<Value_opaque>>); pub fn LLVMSetCurrentDebugLocation(Builder: &Builder, L: Option<NonNull<Value_opaque>>);
pub fn LLVMGetCurrentDebugLocation(Builder: BuilderRef) -> ValueRef; pub fn LLVMGetCurrentDebugLocation(Builder: &Builder) -> ValueRef;
pub fn LLVMSetInstDebugLocation(Builder: BuilderRef, Inst: ValueRef); pub fn LLVMSetInstDebugLocation(Builder: &Builder, Inst: ValueRef);
// Terminators // Terminators
pub fn LLVMBuildRetVoid(B: BuilderRef) -> ValueRef; pub fn LLVMBuildRetVoid(B: &Builder) -> ValueRef;
pub fn LLVMBuildRet(B: BuilderRef, V: ValueRef) -> ValueRef; pub fn LLVMBuildRet(B: &Builder, V: ValueRef) -> ValueRef;
pub fn LLVMBuildAggregateRet(B: BuilderRef, RetVals: *const ValueRef, N: c_uint) -> ValueRef; pub fn LLVMBuildAggregateRet(B: &Builder, RetVals: *const ValueRef, N: c_uint) -> ValueRef;
pub fn LLVMBuildBr(B: BuilderRef, Dest: BasicBlockRef) -> ValueRef; pub fn LLVMBuildBr(B: &Builder, Dest: BasicBlockRef) -> ValueRef;
pub fn LLVMBuildCondBr(B: BuilderRef, pub fn LLVMBuildCondBr(B: &Builder,
If: ValueRef, If: ValueRef,
Then: BasicBlockRef, Then: BasicBlockRef,
Else: BasicBlockRef) Else: BasicBlockRef)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildSwitch(B: BuilderRef, pub fn LLVMBuildSwitch(B: &Builder,
V: ValueRef, V: ValueRef,
Else: BasicBlockRef, Else: BasicBlockRef,
NumCases: c_uint) NumCases: c_uint)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildIndirectBr(B: BuilderRef, Addr: ValueRef, NumDests: c_uint) -> ValueRef; pub fn LLVMBuildIndirectBr(B: &Builder, Addr: ValueRef, NumDests: c_uint) -> ValueRef;
pub fn LLVMRustBuildInvoke(B: BuilderRef, pub fn LLVMRustBuildInvoke(B: &Builder,
Fn: ValueRef, Fn: ValueRef,
Args: *const ValueRef, Args: *const ValueRef,
NumArgs: c_uint, NumArgs: c_uint,
@ -799,33 +798,33 @@ extern "C" {
Bundle: Option<NonNull<OperandBundleDef_opaque>>, Bundle: Option<NonNull<OperandBundleDef_opaque>>,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildLandingPad(B: BuilderRef, pub fn LLVMBuildLandingPad(B: &'a Builder,
Ty: &Type, Ty: &'a Type,
PersFn: ValueRef, PersFn: ValueRef,
NumClauses: c_uint, NumClauses: c_uint,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildResume(B: BuilderRef, Exn: ValueRef) -> ValueRef; pub fn LLVMBuildResume(B: &Builder, Exn: ValueRef) -> ValueRef;
pub fn LLVMBuildUnreachable(B: BuilderRef) -> ValueRef; pub fn LLVMBuildUnreachable(B: &Builder) -> ValueRef;
pub fn LLVMRustBuildCleanupPad(B: BuilderRef, pub fn LLVMRustBuildCleanupPad(B: &Builder,
ParentPad: Option<NonNull<Value_opaque>>, ParentPad: Option<NonNull<Value_opaque>>,
ArgCnt: c_uint, ArgCnt: c_uint,
Args: *const ValueRef, Args: *const ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildCleanupRet(B: BuilderRef, pub fn LLVMRustBuildCleanupRet(B: &Builder,
CleanupPad: ValueRef, CleanupPad: ValueRef,
UnwindBB: Option<NonNull<BasicBlock_opaque>>) UnwindBB: Option<NonNull<BasicBlock_opaque>>)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildCatchPad(B: BuilderRef, pub fn LLVMRustBuildCatchPad(B: &Builder,
ParentPad: ValueRef, ParentPad: ValueRef,
ArgCnt: c_uint, ArgCnt: c_uint,
Args: *const ValueRef, Args: *const ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildCatchRet(B: BuilderRef, Pad: ValueRef, BB: BasicBlockRef) -> ValueRef; pub fn LLVMRustBuildCatchRet(B: &Builder, Pad: ValueRef, BB: BasicBlockRef) -> ValueRef;
pub fn LLVMRustBuildCatchSwitch(Builder: BuilderRef, pub fn LLVMRustBuildCatchSwitch(Builder: &Builder,
ParentPad: Option<NonNull<Value_opaque>>, ParentPad: Option<NonNull<Value_opaque>>,
BB: Option<NonNull<BasicBlock_opaque>>, BB: Option<NonNull<BasicBlock_opaque>>,
NumHandlers: c_uint, NumHandlers: c_uint,
@ -844,288 +843,288 @@ extern "C" {
pub fn LLVMSetCleanup(LandingPad: ValueRef, Val: Bool); pub fn LLVMSetCleanup(LandingPad: ValueRef, Val: Bool);
// Arithmetic // Arithmetic
pub fn LLVMBuildAdd(B: BuilderRef, pub fn LLVMBuildAdd(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildNSWAdd(B: BuilderRef, pub fn LLVMBuildNSWAdd(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildNUWAdd(B: BuilderRef, pub fn LLVMBuildNUWAdd(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFAdd(B: BuilderRef, pub fn LLVMBuildFAdd(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildSub(B: BuilderRef, pub fn LLVMBuildSub(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildNSWSub(B: BuilderRef, pub fn LLVMBuildNSWSub(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildNUWSub(B: BuilderRef, pub fn LLVMBuildNUWSub(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFSub(B: BuilderRef, pub fn LLVMBuildFSub(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildMul(B: BuilderRef, pub fn LLVMBuildMul(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildNSWMul(B: BuilderRef, pub fn LLVMBuildNSWMul(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildNUWMul(B: BuilderRef, pub fn LLVMBuildNUWMul(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFMul(B: BuilderRef, pub fn LLVMBuildFMul(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildUDiv(B: BuilderRef, pub fn LLVMBuildUDiv(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildExactUDiv(B: BuilderRef, pub fn LLVMBuildExactUDiv(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildSDiv(B: BuilderRef, pub fn LLVMBuildSDiv(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildExactSDiv(B: BuilderRef, pub fn LLVMBuildExactSDiv(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFDiv(B: BuilderRef, pub fn LLVMBuildFDiv(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildURem(B: BuilderRef, pub fn LLVMBuildURem(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildSRem(B: BuilderRef, pub fn LLVMBuildSRem(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFRem(B: BuilderRef, pub fn LLVMBuildFRem(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildShl(B: BuilderRef, pub fn LLVMBuildShl(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildLShr(B: BuilderRef, pub fn LLVMBuildLShr(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildAShr(B: BuilderRef, pub fn LLVMBuildAShr(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildAnd(B: BuilderRef, pub fn LLVMBuildAnd(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildOr(B: BuilderRef, pub fn LLVMBuildOr(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildXor(B: BuilderRef, pub fn LLVMBuildXor(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildBinOp(B: BuilderRef, pub fn LLVMBuildBinOp(B: &Builder,
Op: Opcode, Op: Opcode,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildNeg(B: BuilderRef, V: ValueRef, Name: *const c_char) -> ValueRef; pub fn LLVMBuildNeg(B: &Builder, V: ValueRef, Name: *const c_char) -> ValueRef;
pub fn LLVMBuildNSWNeg(B: BuilderRef, V: ValueRef, Name: *const c_char) -> ValueRef; pub fn LLVMBuildNSWNeg(B: &Builder, V: ValueRef, Name: *const c_char) -> ValueRef;
pub fn LLVMBuildNUWNeg(B: BuilderRef, V: ValueRef, Name: *const c_char) -> ValueRef; pub fn LLVMBuildNUWNeg(B: &Builder, V: ValueRef, Name: *const c_char) -> ValueRef;
pub fn LLVMBuildFNeg(B: BuilderRef, V: ValueRef, Name: *const c_char) -> ValueRef; pub fn LLVMBuildFNeg(B: &Builder, V: ValueRef, Name: *const c_char) -> ValueRef;
pub fn LLVMBuildNot(B: BuilderRef, V: ValueRef, Name: *const c_char) -> ValueRef; pub fn LLVMBuildNot(B: &Builder, V: ValueRef, Name: *const c_char) -> ValueRef;
pub fn LLVMRustSetHasUnsafeAlgebra(Instr: ValueRef); pub fn LLVMRustSetHasUnsafeAlgebra(Instr: ValueRef);
// Memory // Memory
pub fn LLVMBuildAlloca(B: BuilderRef, Ty: &Type, Name: *const c_char) -> ValueRef; pub fn LLVMBuildAlloca(B: &Builder, Ty: &Type, Name: *const c_char) -> ValueRef;
pub fn LLVMBuildFree(B: BuilderRef, PointerVal: ValueRef) -> ValueRef; pub fn LLVMBuildFree(B: &Builder, PointerVal: ValueRef) -> ValueRef;
pub fn LLVMBuildLoad(B: BuilderRef, PointerVal: ValueRef, Name: *const c_char) -> ValueRef; pub fn LLVMBuildLoad(B: &Builder, PointerVal: ValueRef, Name: *const c_char) -> ValueRef;
pub fn LLVMBuildStore(B: BuilderRef, Val: ValueRef, Ptr: ValueRef) -> ValueRef; pub fn LLVMBuildStore(B: &Builder, Val: ValueRef, Ptr: ValueRef) -> ValueRef;
pub fn LLVMBuildGEP(B: BuilderRef, pub fn LLVMBuildGEP(B: &Builder,
Pointer: ValueRef, Pointer: ValueRef,
Indices: *const ValueRef, Indices: *const ValueRef,
NumIndices: c_uint, NumIndices: c_uint,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildInBoundsGEP(B: BuilderRef, pub fn LLVMBuildInBoundsGEP(B: &Builder,
Pointer: ValueRef, Pointer: ValueRef,
Indices: *const ValueRef, Indices: *const ValueRef,
NumIndices: c_uint, NumIndices: c_uint,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildStructGEP(B: BuilderRef, pub fn LLVMBuildStructGEP(B: &Builder,
Pointer: ValueRef, Pointer: ValueRef,
Idx: c_uint, Idx: c_uint,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildGlobalString(B: BuilderRef, pub fn LLVMBuildGlobalString(B: &Builder,
Str: *const c_char, Str: *const c_char,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildGlobalStringPtr(B: BuilderRef, pub fn LLVMBuildGlobalStringPtr(B: &Builder,
Str: *const c_char, Str: *const c_char,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
// Casts // Casts
pub fn LLVMBuildTrunc(B: BuilderRef, pub fn LLVMBuildTrunc(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildZExt(B: BuilderRef, pub fn LLVMBuildZExt(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildSExt(B: BuilderRef, pub fn LLVMBuildSExt(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFPToUI(B: BuilderRef, pub fn LLVMBuildFPToUI(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFPToSI(B: BuilderRef, pub fn LLVMBuildFPToSI(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildUIToFP(B: BuilderRef, pub fn LLVMBuildUIToFP(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildSIToFP(B: BuilderRef, pub fn LLVMBuildSIToFP(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFPTrunc(B: BuilderRef, pub fn LLVMBuildFPTrunc(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFPExt(B: BuilderRef, pub fn LLVMBuildFPExt(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildPtrToInt(B: BuilderRef, pub fn LLVMBuildPtrToInt(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildIntToPtr(B: BuilderRef, pub fn LLVMBuildIntToPtr(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildBitCast(B: BuilderRef, pub fn LLVMBuildBitCast(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildZExtOrBitCast(B: BuilderRef, pub fn LLVMBuildZExtOrBitCast(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildSExtOrBitCast(B: BuilderRef, pub fn LLVMBuildSExtOrBitCast(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildTruncOrBitCast(B: BuilderRef, pub fn LLVMBuildTruncOrBitCast(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildCast(B: BuilderRef, pub fn LLVMBuildCast(B: &'a Builder,
Op: Opcode, Op: Opcode,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildPointerCast(B: BuilderRef, pub fn LLVMBuildPointerCast(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildIntCast(B: BuilderRef, pub fn LLVMRustBuildIntCast(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
IsSized: bool) IsSized: bool)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFPCast(B: BuilderRef, pub fn LLVMBuildFPCast(B: &'a Builder,
Val: ValueRef, Val: ValueRef,
DestTy: &Type, DestTy: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
// Comparisons // Comparisons
pub fn LLVMBuildICmp(B: BuilderRef, pub fn LLVMBuildICmp(B: &Builder,
Op: c_uint, Op: c_uint,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildFCmp(B: BuilderRef, pub fn LLVMBuildFCmp(B: &Builder,
Op: c_uint, Op: c_uint,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
@ -1133,119 +1132,119 @@ extern "C" {
-> ValueRef; -> ValueRef;
// Miscellaneous instructions // Miscellaneous instructions
pub fn LLVMBuildPhi(B: BuilderRef, Ty: &Type, Name: *const c_char) -> ValueRef; pub fn LLVMBuildPhi(B: &Builder, Ty: &Type, Name: *const c_char) -> ValueRef;
pub fn LLVMRustBuildCall(B: BuilderRef, pub fn LLVMRustBuildCall(B: &Builder,
Fn: ValueRef, Fn: ValueRef,
Args: *const ValueRef, Args: *const ValueRef,
NumArgs: c_uint, NumArgs: c_uint,
Bundle: Option<NonNull<OperandBundleDef_opaque>>, Bundle: Option<NonNull<OperandBundleDef_opaque>>,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildSelect(B: BuilderRef, pub fn LLVMBuildSelect(B: &Builder,
If: ValueRef, If: ValueRef,
Then: ValueRef, Then: ValueRef,
Else: ValueRef, Else: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildVAArg(B: BuilderRef, pub fn LLVMBuildVAArg(B: &'a Builder,
list: ValueRef, list: ValueRef,
Ty: &Type, Ty: &'a Type,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildExtractElement(B: BuilderRef, pub fn LLVMBuildExtractElement(B: &Builder,
VecVal: ValueRef, VecVal: ValueRef,
Index: ValueRef, Index: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildInsertElement(B: BuilderRef, pub fn LLVMBuildInsertElement(B: &Builder,
VecVal: ValueRef, VecVal: ValueRef,
EltVal: ValueRef, EltVal: ValueRef,
Index: ValueRef, Index: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildShuffleVector(B: BuilderRef, pub fn LLVMBuildShuffleVector(B: &Builder,
V1: ValueRef, V1: ValueRef,
V2: ValueRef, V2: ValueRef,
Mask: ValueRef, Mask: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildExtractValue(B: BuilderRef, pub fn LLVMBuildExtractValue(B: &Builder,
AggVal: ValueRef, AggVal: ValueRef,
Index: c_uint, Index: c_uint,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildInsertValue(B: BuilderRef, pub fn LLVMBuildInsertValue(B: &Builder,
AggVal: ValueRef, AggVal: ValueRef,
EltVal: ValueRef, EltVal: ValueRef,
Index: c_uint, Index: c_uint,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceFAdd(B: BuilderRef, pub fn LLVMRustBuildVectorReduceFAdd(B: &Builder,
Acc: ValueRef, Acc: ValueRef,
Src: ValueRef) Src: ValueRef)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceFMul(B: BuilderRef, pub fn LLVMRustBuildVectorReduceFMul(B: &Builder,
Acc: ValueRef, Acc: ValueRef,
Src: ValueRef) Src: ValueRef)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceAdd(B: BuilderRef, pub fn LLVMRustBuildVectorReduceAdd(B: &Builder,
Src: ValueRef) Src: ValueRef)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceMul(B: BuilderRef, pub fn LLVMRustBuildVectorReduceMul(B: &Builder,
Src: ValueRef) Src: ValueRef)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceAnd(B: BuilderRef, pub fn LLVMRustBuildVectorReduceAnd(B: &Builder,
Src: ValueRef) Src: ValueRef)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceOr(B: BuilderRef, pub fn LLVMRustBuildVectorReduceOr(B: &Builder,
Src: ValueRef) Src: ValueRef)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceXor(B: BuilderRef, pub fn LLVMRustBuildVectorReduceXor(B: &Builder,
Src: ValueRef) Src: ValueRef)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceMin(B: BuilderRef, pub fn LLVMRustBuildVectorReduceMin(B: &Builder,
Src: ValueRef, Src: ValueRef,
IsSigned: bool) IsSigned: bool)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceMax(B: BuilderRef, pub fn LLVMRustBuildVectorReduceMax(B: &Builder,
Src: ValueRef, Src: ValueRef,
IsSigned: bool) IsSigned: bool)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceFMin(B: BuilderRef, pub fn LLVMRustBuildVectorReduceFMin(B: &Builder,
Src: ValueRef, Src: ValueRef,
IsNaN: bool) IsNaN: bool)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildVectorReduceFMax(B: BuilderRef, pub fn LLVMRustBuildVectorReduceFMax(B: &Builder,
Src: ValueRef, Src: ValueRef,
IsNaN: bool) IsNaN: bool)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildMinNum(B: BuilderRef, LHS: ValueRef, LHS: ValueRef) -> ValueRef; pub fn LLVMRustBuildMinNum(B: &Builder, LHS: ValueRef, LHS: ValueRef) -> ValueRef;
pub fn LLVMRustBuildMaxNum(B: BuilderRef, LHS: ValueRef, LHS: ValueRef) -> ValueRef; pub fn LLVMRustBuildMaxNum(B: &Builder, LHS: ValueRef, LHS: ValueRef) -> ValueRef;
pub fn LLVMBuildIsNull(B: BuilderRef, Val: ValueRef, Name: *const c_char) -> ValueRef; pub fn LLVMBuildIsNull(B: &Builder, Val: ValueRef, Name: *const c_char) -> ValueRef;
pub fn LLVMBuildIsNotNull(B: BuilderRef, Val: ValueRef, Name: *const c_char) -> ValueRef; pub fn LLVMBuildIsNotNull(B: &Builder, Val: ValueRef, Name: *const c_char) -> ValueRef;
pub fn LLVMBuildPtrDiff(B: BuilderRef, pub fn LLVMBuildPtrDiff(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
Name: *const c_char) Name: *const c_char)
-> ValueRef; -> ValueRef;
// Atomic Operations // Atomic Operations
pub fn LLVMRustBuildAtomicLoad(B: BuilderRef, pub fn LLVMRustBuildAtomicLoad(B: &Builder,
PointerVal: ValueRef, PointerVal: ValueRef,
Name: *const c_char, Name: *const c_char,
Order: AtomicOrdering) Order: AtomicOrdering)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildAtomicStore(B: BuilderRef, pub fn LLVMRustBuildAtomicStore(B: &Builder,
Val: ValueRef, Val: ValueRef,
Ptr: ValueRef, Ptr: ValueRef,
Order: AtomicOrdering) Order: AtomicOrdering)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildAtomicCmpXchg(B: BuilderRef, pub fn LLVMRustBuildAtomicCmpXchg(B: &Builder,
LHS: ValueRef, LHS: ValueRef,
CMP: ValueRef, CMP: ValueRef,
RHS: ValueRef, RHS: ValueRef,
@ -1254,7 +1253,7 @@ extern "C" {
Weak: Bool) Weak: Bool)
-> ValueRef; -> ValueRef;
pub fn LLVMBuildAtomicRMW(B: BuilderRef, pub fn LLVMBuildAtomicRMW(B: &Builder,
Op: AtomicRmwBinOp, Op: AtomicRmwBinOp,
LHS: ValueRef, LHS: ValueRef,
RHS: ValueRef, RHS: ValueRef,
@ -1262,7 +1261,7 @@ extern "C" {
SingleThreaded: Bool) SingleThreaded: Bool)
-> ValueRef; -> ValueRef;
pub fn LLVMRustBuildAtomicFence(B: BuilderRef, pub fn LLVMRustBuildAtomicFence(B: &Builder,
Order: AtomicOrdering, Order: AtomicOrdering,
Scope: SynchronizationScope); Scope: SynchronizationScope);
@ -1709,7 +1708,7 @@ extern "C" {
-> OperandBundleDefRef; -> OperandBundleDefRef;
pub fn LLVMRustFreeOperandBundleDef(Bundle: OperandBundleDefRef); pub fn LLVMRustFreeOperandBundleDef(Bundle: OperandBundleDefRef);
pub fn LLVMRustPositionBuilderAtStart(B: BuilderRef, BB: BasicBlockRef); pub fn LLVMRustPositionBuilderAtStart(B: &Builder, BB: BasicBlockRef);
pub fn LLVMRustSetComdat(M: &Module, V: ValueRef, Name: *const c_char); pub fn LLVMRustSetComdat(M: &Module, V: ValueRef, Name: *const c_char);
pub fn LLVMRustUnsetComdat(V: ValueRef); pub fn LLVMRustUnsetComdat(V: ValueRef);