1569 lines
93 KiB
Nim
Executable file
1569 lines
93 KiB
Nim
Executable file
|
|
const
|
|
libname* = "" #Setup as you need
|
|
|
|
type
|
|
PLLVMBasicBlockRef* = ptr LLVMBasicBlockRef
|
|
PLLVMExecutionEngineRef* = ptr LLVMExecutionEngineRef
|
|
PLLVMGenericValueRef* = ptr LLVMGenericValueRef
|
|
PLLVMMemoryBufferRef* = ptr LLVMMemoryBufferRef
|
|
PLLVMModuleProviderRef* = ptr LLVMModuleProviderRef
|
|
PLLVMModuleRef* = ptr LLVMModuleRef
|
|
PLLVMTypeRef* = ptr LLVMTypeRef
|
|
PLLVMValueRef* = ptr LLVMValueRef # Core.h
|
|
# Opaque types.
|
|
#*
|
|
# * The top-level container for all LLVM global data. See the LLVMContext class.
|
|
#
|
|
|
|
type
|
|
LLVMContextRef* = LLVMOpaqueContext #*
|
|
# * The top-level container for all other LLVM Intermediate Representation (IR)
|
|
# * objects. See the llvm::Module class.
|
|
#
|
|
LLVMModuleRef* = LLVMOpaqueModule #*
|
|
# * Each value in the LLVM IR has a type, an LLVMTypeRef. See the llvm::Type
|
|
# * class.
|
|
#
|
|
LLVMTypeRef* = LLVMOpaqueType #*
|
|
# * When building recursive types using LLVMRefineType, LLVMTypeRef values may
|
|
# * become invalid; use LLVMTypeHandleRef to resolve this problem. See the
|
|
# * llvm::AbstractTypeHolder class.
|
|
#
|
|
LLVMTypeHandleRef* = LLVMOpaqueTypeHandle
|
|
LLVMValueRef* = LLVMOpaqueValue
|
|
LLVMBasicBlockRef* = LLVMOpaqueBasicBlock
|
|
LLVMBuilderRef* = LLVMOpaqueBuilder # Used to provide a module to JIT or interpreter.
|
|
# * See the llvm::ModuleProvider class.
|
|
#
|
|
LLVMModuleProviderRef* = LLVMOpaqueModuleProvider # Used to provide a module to JIT or interpreter.
|
|
# * See the llvm::MemoryBuffer class.
|
|
#
|
|
LLVMMemoryBufferRef* = LLVMOpaqueMemoryBuffer #* See the llvm::PassManagerBase class.
|
|
LLVMPassManagerRef* = LLVMOpaquePassManager #*
|
|
# * Used to iterate through the uses of a Value, allowing access to all Values
|
|
# * that use this Value. See the llvm::Use and llvm::value_use_iterator classes.
|
|
#
|
|
LLVMUseIteratorRef* = LLVMOpaqueUseIterator
|
|
LLVMAttribute* = enum
|
|
LLVMZExtAttribute = 1 shl 0, LLVMSExtAttribute = 1 shl 1,
|
|
LLVMNoReturnAttribute = 1 shl 2, LLVMInRegAttribute = 1 shl 3,
|
|
LLVMStructRetAttribute = 1 shl 4, LLVMNoUnwindAttribute = 1 shl 5,
|
|
LLVMNoAliasAttribute = 1 shl 6, LLVMByValAttribute = 1 shl 7,
|
|
LLVMNestAttribute = 1 shl 8, LLVMReadNoneAttribute = 1 shl 9,
|
|
LLVMReadOnlyAttribute = 1 shl 10, LLVMNoInlineAttribute = 1 shl 11,
|
|
LLVMAlwaysInlineAttribute = 1 shl 12,
|
|
LLVMOptimizeForSizeAttribute = 1 shl 13,
|
|
LLVMStackProtectAttribute = 1 shl 14,
|
|
LLVMStackProtectReqAttribute = 1 shl 15, LLVMNoCaptureAttribute = 1 shl
|
|
21, LLVMNoRedZoneAttribute = 1 shl 22,
|
|
LLVMNoImplicitFloatAttribute = 1 shl 23, LLVMNakedAttribute = 1 shl 24,
|
|
LLVMInlineHintAttribute = 1 shl 25
|
|
LLVMOpcode* = enum #*< type with no size
|
|
#*< 32 bit floating point type
|
|
#*< 64 bit floating point type
|
|
#*< 80 bit floating point type (X87)
|
|
#*< 128 bit floating point type (112-bit mantissa)
|
|
#*< 128 bit floating point type (two 64-bits)
|
|
#*< Labels
|
|
#*< Arbitrary bit width integers
|
|
#*< Functions
|
|
#*< Structures
|
|
#*< Arrays
|
|
#*< Pointers
|
|
#*< Opaque: type with unknown structure
|
|
#*< SIMD 'packed' format, or other vector type
|
|
#*< Metadata
|
|
LLVMRet = 1, LLVMBr = 2, LLVMSwitch = 3, LLVMInvoke = 4, LLVMUnwind = 5,
|
|
LLVMUnreachable = 6, LLVMAdd = 7, LLVMFAdd = 8, LLVMSub = 9, LLVMFSub = 10,
|
|
LLVMMul = 11, LLVMFMul = 12, LLVMUDiv = 13, LLVMSDiv = 14, LLVMFDiv = 15,
|
|
LLVMURem = 16, LLVMSRem = 17, LLVMFRem = 18, LLVMShl = 19, LLVMLShr = 20,
|
|
LLVMAShr = 21, LLVMAnd = 22, LLVMOr = 23, LLVMXor = 24, LLVMMalloc = 25,
|
|
LLVMFree = 26, LLVMAlloca = 27, LLVMLoad = 28, LLVMStore = 29,
|
|
LLVMGetElementPtr = 30, LLVMTrunk = 31, LLVMZExt = 32, LLVMSExt = 33,
|
|
LLVMFPToUI = 34, LLVMFPToSI = 35, LLVMUIToFP = 36, LLVMSIToFP = 37,
|
|
LLVMFPTrunc = 38, LLVMFPExt = 39, LLVMPtrToInt = 40, LLVMIntToPtr = 41,
|
|
LLVMBitCast = 42, LLVMICmp = 43, LLVMFCmp = 44, LLVMPHI = 45, LLVMCall = 46,
|
|
LLVMSelect = 47, LLVMVAArg = 50, LLVMExtractElement = 51,
|
|
LLVMInsertElement = 52, LLVMShuffleVector = 53, LLVMExtractValue = 54,
|
|
LLVMInsertValue = 55
|
|
LLVMTypeKind* = enum #*< Externally visible function
|
|
#*< Keep one copy of function when linking (inline)
|
|
#*< Same, but only replaced by something
|
|
# equivalent.
|
|
#*< Keep one copy of function when linking (weak)
|
|
#*< Same, but only replaced by something
|
|
# equivalent.
|
|
#*< Special purpose, only applies to global arrays
|
|
#*< Rename collisions when linking (static
|
|
# functions)
|
|
#*< Like Internal, but omit from symbol table
|
|
#*< Function to be imported from DLL
|
|
#*< Function to be accessible from DLL
|
|
#*< ExternalWeak linkage description
|
|
#*< Stand-in functions for streaming fns from
|
|
# bitcode
|
|
#*< Tentative definitions
|
|
#*< Like Private, but linker removes.
|
|
LLVMVoidTypeKind, LLVMFloatTypeKind, LLVMDoubleTypeKind,
|
|
LLVMX86_FP80TypeKind, LLVMFP128TypeKind, LLVMPPC_FP128TypeKind,
|
|
LLVMLabelTypeKind, LLVMIntegerTypeKind, LLVMFunctionTypeKind,
|
|
LLVMStructTypeKind, LLVMArrayTypeKind, LLVMPointerTypeKind,
|
|
LLVMOpaqueTypeKind, LLVMVectorTypeKind, LLVMMetadataTypeKind
|
|
LLVMLinkage* = enum #*< The GV is visible
|
|
#*< The GV is hidden
|
|
#*< The GV is protected
|
|
LLVMExternalLinkage, LLVMAvailableExternallyLinkage, LLVMLinkOnceAnyLinkage,
|
|
LLVMLinkOnceODRLinkage, LLVMWeakAnyLinkage, LLVMWeakODRLinkage,
|
|
LLVMAppendingLinkage, LLVMInternalLinkage, LLVMPrivateLinkage,
|
|
LLVMDLLImportLinkage, LLVMDLLExportLinkage, LLVMExternalWeakLinkage,
|
|
LLVMGhostLinkage, LLVMCommonLinkage, LLVMLinkerPrivateLinkage
|
|
LLVMVisibility* = enum
|
|
LLVMDefaultVisibility, LLVMHiddenVisibility, LLVMProtectedVisibility
|
|
LLVMCallConv* = enum #*< equal
|
|
#*< not equal
|
|
#*< unsigned greater than
|
|
#*< unsigned greater or equal
|
|
#*< unsigned less than
|
|
#*< unsigned less or equal
|
|
#*< signed greater than
|
|
#*< signed greater or equal
|
|
#*< signed less than
|
|
#*< signed less or equal
|
|
LLVMCCallConv = 0, LLVMFastCallConv = 8, LLVMColdCallConv = 9,
|
|
LLVMX86StdcallCallConv = 64, LLVMX86FastcallCallConv = 65
|
|
LLVMIntPredicate* = enum #*< Always false (always folded)
|
|
#*< True if ordered and equal
|
|
#*< True if ordered and greater than
|
|
#*< True if ordered and greater than or equal
|
|
#*< True if ordered and less than
|
|
#*< True if ordered and less than or equal
|
|
#*< True if ordered and operands are unequal
|
|
#*< True if ordered (no nans)
|
|
#*< True if unordered: isnan(X) | isnan(Y)
|
|
#*< True if unordered or equal
|
|
#*< True if unordered or greater than
|
|
#*< True if unordered, greater than, or equal
|
|
#*< True if unordered or less than
|
|
#*< True if unordered, less than, or equal
|
|
#*< True if unordered or not equal
|
|
#*< Always true (always folded)
|
|
LLVMIntEQ = 32, LLVMIntNE, LLVMIntUGT, LLVMIntUGE, LLVMIntULT, LLVMIntULE,
|
|
LLVMIntSGT, LLVMIntSGE, LLVMIntSLT, LLVMIntSLE
|
|
LLVMRealPredicate* = enum #===-- Error handling ----------------------------------------------------===
|
|
LLVMRealPredicateFalse, LLVMRealOEQ, LLVMRealOGT, LLVMRealOGE, LLVMRealOLT,
|
|
LLVMRealOLE, LLVMRealONE, LLVMRealORD, LLVMRealUNO, LLVMRealUEQ,
|
|
LLVMRealUGT, LLVMRealUGE, LLVMRealULT, LLVMRealULE, LLVMRealUNE,
|
|
LLVMRealPredicateTrue
|
|
|
|
proc LLVMDisposeMessage*(Message: cstring){.cdecl, dynlib: libname,
|
|
importc: "LLVMDisposeMessage".}
|
|
#===-- Modules -----------------------------------------------------------===
|
|
# Create and destroy contexts.
|
|
proc LLVMContextCreate*(): LLVMContextRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMContextCreate".}
|
|
proc LLVMGetGlobalContext*(): LLVMContextRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetGlobalContext".}
|
|
proc LLVMContextDispose*(C: LLVMContextRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMContextDispose".}
|
|
# Create and destroy modules.
|
|
#* See llvm::Module::Module.
|
|
proc LLVMModuleCreateWithName*(ModuleID: cstring): LLVMModuleRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMModuleCreateWithName".}
|
|
proc LLVMModuleCreateWithNameInContext*(ModuleID: cstring, C: LLVMContextRef): LLVMModuleRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMModuleCreateWithNameInContext".}
|
|
#* See llvm::Module::~Module.
|
|
proc LLVMDisposeModule*(M: LLVMModuleRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDisposeModule".}
|
|
#* Data layout. See Module::getDataLayout.
|
|
proc LLVMGetDataLayout*(M: LLVMModuleRef): cstring{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetDataLayout".}
|
|
proc LLVMSetDataLayout*(M: LLVMModuleRef, Triple: cstring){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetDataLayout".}
|
|
#* Target triple. See Module::getTargetTriple.
|
|
proc LLVMGetTarget*(M: LLVMModuleRef): cstring{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetTarget".}
|
|
proc LLVMSetTarget*(M: LLVMModuleRef, Triple: cstring){.cdecl, dynlib: libname,
|
|
importc: "LLVMSetTarget".}
|
|
#* See Module::addTypeName.
|
|
proc LLVMAddTypeName*(M: LLVMModuleRef, Name: cstring, Ty: LLVMTypeRef): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMAddTypeName".}
|
|
proc LLVMDeleteTypeName*(M: LLVMModuleRef, Name: cstring){.cdecl,
|
|
dynlib: libname, importc: "LLVMDeleteTypeName".}
|
|
proc LLVMGetTypeByName*(M: LLVMModuleRef, Name: cstring): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetTypeByName".}
|
|
#* See Module::dump.
|
|
proc LLVMDumpModule*(M: LLVMModuleRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDumpModule".}
|
|
#===-- Types -------------------------------------------------------------===
|
|
# LLVM types conform to the following hierarchy:
|
|
# *
|
|
# * types:
|
|
# * integer type
|
|
# * real type
|
|
# * function type
|
|
# * sequence types:
|
|
# * array type
|
|
# * pointer type
|
|
# * vector type
|
|
# * void type
|
|
# * label type
|
|
# * opaque type
|
|
#
|
|
#* See llvm::LLVMTypeKind::getTypeID.
|
|
proc LLVMGetTypeKind*(Ty: LLVMTypeRef): LLVMTypeKind{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetTypeKind".}
|
|
#* See llvm::LLVMType::getContext.
|
|
proc LLVMGetTypeContext*(Ty: LLVMTypeRef): LLVMContextRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetTypeContext".}
|
|
# Operations on integer types
|
|
proc LLVMInt1TypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMInt1TypeInContext".}
|
|
proc LLVMInt8TypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMInt8TypeInContext".}
|
|
proc LLVMInt16TypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMInt16TypeInContext".}
|
|
proc LLVMInt32TypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMInt32TypeInContext".}
|
|
proc LLVMInt64TypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMInt64TypeInContext".}
|
|
proc LLVMIntTypeInContext*(C: LLVMContextRef, NumBits: dword): LLVMTypeRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMIntTypeInContext".}
|
|
proc LLVMInt1Type*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMInt1Type".}
|
|
proc LLVMInt8Type*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMInt8Type".}
|
|
proc LLVMInt16Type*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMInt16Type".}
|
|
proc LLVMInt32Type*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMInt32Type".}
|
|
proc LLVMInt64Type*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMInt64Type".}
|
|
proc LLVMIntType*(NumBits: dword): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIntType".}
|
|
proc LLVMGetIntTypeWidth*(IntegerTy: LLVMTypeRef): dword{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetIntTypeWidth".}
|
|
# Operations on real types
|
|
proc LLVMFloatTypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMFloatTypeInContext".}
|
|
proc LLVMDoubleTypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMDoubleTypeInContext".}
|
|
proc LLVMX86FP80TypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMX86FP80TypeInContext".}
|
|
proc LLVMFP128TypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMFP128TypeInContext".}
|
|
proc LLVMPPCFP128TypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMPPCFP128TypeInContext".}
|
|
proc LLVMFloatType*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMFloatType".}
|
|
proc LLVMDoubleType*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMDoubleType".}
|
|
proc LLVMX86FP80Type*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMX86FP80Type".}
|
|
proc LLVMFP128Type*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMFP128Type".}
|
|
proc LLVMPPCFP128Type*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMPPCFP128Type".}
|
|
# Operations on function types
|
|
proc LLVMFunctionType*(ReturnType: LLVMTypeRef, ParamTypes: pLLVMTypeRef,
|
|
ParamCount: dword, IsVarArg: int32): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMFunctionType".}
|
|
proc LLVMIsFunctionVarArg*(FunctionTy: LLVMTypeRef): int32{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsFunctionVarArg".}
|
|
proc LLVMGetReturnType*(FunctionTy: LLVMTypeRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetReturnType".}
|
|
proc LLVMCountParamTypes*(FunctionTy: LLVMTypeRef): dword{.cdecl,
|
|
dynlib: libname, importc: "LLVMCountParamTypes".}
|
|
proc LLVMGetParamTypes*(FunctionTy: LLVMTypeRef, Dest: pLLVMTypeRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMGetParamTypes".}
|
|
# Operations on struct types
|
|
proc LLVMStructTypeInContext*(C: LLVMContextRef, ElementTypes: pLLVMTypeRef,
|
|
ElementCount: dword, isPacked: int32): LLVMTypeRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMStructTypeInContext".}
|
|
proc LLVMStructType*(ElementTypes: pLLVMTypeRef, ElementCount: dword,
|
|
isPacked: int32): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMStructType".}
|
|
proc LLVMCountStructElementTypes*(StructTy: LLVMTypeRef): dword{.cdecl,
|
|
dynlib: libname, importc: "LLVMCountStructElementTypes".}
|
|
proc LLVMGetStructElementTypes*(StructTy: LLVMTypeRef, Dest: pLLVMTypeRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMGetStructElementTypes".}
|
|
proc LLVMIsPackedStruct*(StructTy: LLVMTypeRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsPackedStruct".}
|
|
# Operations on array, pointer, and vector types (sequence types)
|
|
proc LLVMArrayType*(ElementType: LLVMTypeRef, ElementCount: dword): LLVMTypeRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMArrayType".}
|
|
proc LLVMPointerType*(ElementType: LLVMTypeRef, AddressSpace: dword): LLVMTypeRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMPointerType".}
|
|
proc LLVMVectorType*(ElementType: LLVMTypeRef, ElementCount: dword): LLVMTypeRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMVectorType".}
|
|
proc LLVMGetElementType*(Ty: LLVMTypeRef): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetElementType".}
|
|
proc LLVMGetArrayLength*(ArrayTy: LLVMTypeRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetArrayLength".}
|
|
proc LLVMGetPointerAddressSpace*(PointerTy: LLVMTypeRef): dword{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetPointerAddressSpace".}
|
|
proc LLVMGetVectorSize*(VectorTy: LLVMTypeRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetVectorSize".}
|
|
# Operations on other types
|
|
proc LLVMVoidTypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMVoidTypeInContext".}
|
|
proc LLVMLabelTypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMLabelTypeInContext".}
|
|
proc LLVMOpaqueTypeInContext*(C: LLVMContextRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMOpaqueTypeInContext".}
|
|
proc LLVMVoidType*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMVoidType".}
|
|
proc LLVMLabelType*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMLabelType".}
|
|
proc LLVMOpaqueType*(): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMOpaqueType".}
|
|
# Operations on type handles
|
|
proc LLVMCreateTypeHandle*(PotentiallyAbstractTy: LLVMTypeRef): LLVMTypeHandleRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMCreateTypeHandle".}
|
|
proc LLVMRefineType*(AbstractTy: LLVMTypeRef, ConcreteTy: LLVMTypeRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMRefineType".}
|
|
proc LLVMResolveTypeHandle*(TypeHandle: LLVMTypeHandleRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMResolveTypeHandle".}
|
|
proc LLVMDisposeTypeHandle*(TypeHandle: LLVMTypeHandleRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMDisposeTypeHandle".}
|
|
# Operations on all values
|
|
proc LLVMTypeOf*(Val: LLVMValueRef): LLVMTypeRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMTypeOf".}
|
|
proc LLVMGetValueName*(Val: LLVMValueRef): cstring{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetValueName".}
|
|
proc LLVMSetValueName*(Val: LLVMValueRef, Name: cstring){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetValueName".}
|
|
proc LLVMDumpValue*(Val: LLVMValueRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDumpValue".}
|
|
proc LLVMReplaceAllUsesWith*(OldVal: LLVMValueRef, NewVal: LLVMValueRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMReplaceAllUsesWith".}
|
|
# Conversion functions. Return the input value if it is an instance of the
|
|
# specified class, otherwise NULL. See llvm::dyn_cast_or_null<>.
|
|
proc LLVMIsAArgument*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAArgument".}
|
|
proc LLVMIsABasicBlock*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsABasicBlock".}
|
|
proc LLVMIsAInlineAsm*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAInlineAsm".}
|
|
proc LLVMIsAUser*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAUser".}
|
|
proc LLVMIsAConstant*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAConstant".}
|
|
proc LLVMIsAConstantAggregateZero*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAConstantAggregateZero".}
|
|
proc LLVMIsAConstantArray*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAConstantArray".}
|
|
proc LLVMIsAConstantExpr*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAConstantExpr".}
|
|
proc LLVMIsAConstantFP*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAConstantFP".}
|
|
proc LLVMIsAConstantInt*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAConstantInt".}
|
|
proc LLVMIsAConstantPointerNull*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAConstantPointerNull".}
|
|
proc LLVMIsAConstantStruct*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAConstantStruct".}
|
|
proc LLVMIsAConstantVector*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAConstantVector".}
|
|
proc LLVMIsAGlobalValue*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAGlobalValue".}
|
|
proc LLVMIsAFunction*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAFunction".}
|
|
proc LLVMIsAGlobalAlias*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAGlobalAlias".}
|
|
proc LLVMIsAGlobalVariable*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAGlobalVariable".}
|
|
proc LLVMIsAUndefValue*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAUndefValue".}
|
|
proc LLVMIsAInstruction*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAInstruction".}
|
|
proc LLVMIsABinaryOperator*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsABinaryOperator".}
|
|
proc LLVMIsACallInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsACallInst".}
|
|
proc LLVMIsAIntrinsicInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAIntrinsicInst".}
|
|
proc LLVMIsADbgInfoIntrinsic*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsADbgInfoIntrinsic".}
|
|
proc LLVMIsADbgDeclareInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsADbgDeclareInst".}
|
|
proc LLVMIsADbgFuncStartInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsADbgFuncStartInst".}
|
|
proc LLVMIsADbgRegionEndInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsADbgRegionEndInst".}
|
|
proc LLVMIsADbgRegionStartInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsADbgRegionStartInst".}
|
|
proc LLVMIsADbgStopPointInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsADbgStopPointInst".}
|
|
proc LLVMIsAEHSelectorInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAEHSelectorInst".}
|
|
proc LLVMIsAMemIntrinsic*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAMemIntrinsic".}
|
|
proc LLVMIsAMemCpyInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAMemCpyInst".}
|
|
proc LLVMIsAMemMoveInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAMemMoveInst".}
|
|
proc LLVMIsAMemSetInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAMemSetInst".}
|
|
proc LLVMIsACmpInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsACmpInst".}
|
|
proc LLVMIsAFCmpInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAFCmpInst".}
|
|
proc LLVMIsAICmpInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAICmpInst".}
|
|
proc LLVMIsAExtractElementInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAExtractElementInst".}
|
|
proc LLVMIsAGetElementPtrInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAGetElementPtrInst".}
|
|
proc LLVMIsAInsertElementInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAInsertElementInst".}
|
|
proc LLVMIsAInsertValueInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAInsertValueInst".}
|
|
proc LLVMIsAPHINode*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAPHINode".}
|
|
proc LLVMIsASelectInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsASelectInst".}
|
|
proc LLVMIsAShuffleVectorInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAShuffleVectorInst".}
|
|
proc LLVMIsAStoreInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAStoreInst".}
|
|
proc LLVMIsATerminatorInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsATerminatorInst".}
|
|
proc LLVMIsABranchInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsABranchInst".}
|
|
proc LLVMIsAInvokeInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAInvokeInst".}
|
|
proc LLVMIsAReturnInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAReturnInst".}
|
|
proc LLVMIsASwitchInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsASwitchInst".}
|
|
proc LLVMIsAUnreachableInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAUnreachableInst".}
|
|
proc LLVMIsAUnwindInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAUnwindInst".}
|
|
proc LLVMIsAUnaryInstruction*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAUnaryInstruction".}
|
|
proc LLVMIsAAllocationInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAAllocationInst".}
|
|
proc LLVMIsAAllocaInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAAllocaInst".}
|
|
proc LLVMIsACastInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsACastInst".}
|
|
proc LLVMIsABitCastInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsABitCastInst".}
|
|
proc LLVMIsAFPExtInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAFPExtInst".}
|
|
proc LLVMIsAFPToSIInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAFPToSIInst".}
|
|
proc LLVMIsAFPToUIInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAFPToUIInst".}
|
|
proc LLVMIsAFPTruncInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAFPTruncInst".}
|
|
proc LLVMIsAIntToPtrInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAIntToPtrInst".}
|
|
proc LLVMIsAPtrToIntInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAPtrToIntInst".}
|
|
proc LLVMIsASExtInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsASExtInst".}
|
|
proc LLVMIsASIToFPInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsASIToFPInst".}
|
|
proc LLVMIsATruncInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsATruncInst".}
|
|
proc LLVMIsAUIToFPInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAUIToFPInst".}
|
|
proc LLVMIsAZExtInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAZExtInst".}
|
|
proc LLVMIsAExtractValueInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsAExtractValueInst".}
|
|
proc LLVMIsAFreeInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAFreeInst".}
|
|
proc LLVMIsALoadInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsALoadInst".}
|
|
proc LLVMIsAVAArgInst*(Val: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsAVAArgInst".}
|
|
# Operations on Uses
|
|
proc LLVMGetFirstUse*(Val: LLVMValueRef): LLVMUseIteratorRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetFirstUse".}
|
|
proc LLVMGetNextUse*(U: LLVMUseIteratorRef): LLVMUseIteratorRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetNextUse".}
|
|
proc LLVMGetUser*(U: LLVMUseIteratorRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetUser".}
|
|
proc LLVMGetUsedValue*(U: LLVMUseIteratorRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetUsedValue".}
|
|
# Operations on Users
|
|
proc LLVMGetOperand*(Val: LLVMValueRef, Index: dword): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetOperand".}
|
|
# Operations on constants of any type
|
|
proc LLVMConstNull*(Ty: LLVMTypeRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMConstNull".}
|
|
# all zeroes
|
|
proc LLVMConstAllOnes*(Ty: LLVMTypeRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMConstAllOnes".}
|
|
# only for int/vector
|
|
proc LLVMGetUndef*(Ty: LLVMTypeRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetUndef".}
|
|
proc LLVMIsConstant*(Val: LLVMValueRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsConstant".}
|
|
proc LLVMIsNull*(Val: LLVMValueRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsNull".}
|
|
proc LLVMIsUndef*(Val: LLVMValueRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsUndef".}
|
|
proc LLVMConstPointerNull*(Ty: LLVMTypeRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstPointerNull".}
|
|
# Operations on scalar constants
|
|
proc LLVMConstInt*(IntTy: LLVMTypeRef, N: qword, SignExtend: int32): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstInt".}
|
|
proc LLVMConstIntOfString*(IntTy: LLVMTypeRef, Text: cstring, Radix: uint8_t): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstIntOfString".}
|
|
proc LLVMConstIntOfStringAndSize*(IntTy: LLVMTypeRef, Text: cstring,
|
|
SLen: dword, Radix: uint8_t): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstIntOfStringAndSize".}
|
|
proc LLVMConstReal*(RealTy: LLVMTypeRef, N: float64): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstReal".}
|
|
proc LLVMConstRealOfString*(RealTy: LLVMTypeRef, Text: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstRealOfString".}
|
|
proc LLVMConstRealOfStringAndSize*(RealTy: LLVMTypeRef, Text: cstring,
|
|
SLen: dword): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstRealOfStringAndSize".}
|
|
proc LLVMConstIntGetZExtValue*(ConstantVal: LLVMValueRef): qword{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstIntGetZExtValue".}
|
|
proc LLVMConstIntGetSExtValue*(ConstantVal: LLVMValueRef): int64{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstIntGetSExtValue".}
|
|
# Operations on composite constants
|
|
proc LLVMConstStringInContext*(C: LLVMContextRef, Str: cstring, len: dword,
|
|
DontNullTerminate: int32): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstStringInContext".}
|
|
proc LLVMConstStructInContext*(C: LLVMContextRef, ConstantVals: pLLVMValueRef,
|
|
Count: dword, isPacked: int32): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstStructInContext".}
|
|
proc LLVMConstString*(Str: cstring, len: dword, DontNullTerminate: int32): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstString".}
|
|
proc LLVMConstArray*(ElementTy: LLVMTypeRef, ConstantVals: pLLVMValueRef,
|
|
len: dword): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMConstArray".}
|
|
proc LLVMConstStruct*(ConstantVals: pLLVMValueRef, Count: dword, isPacked: int32): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstStruct".}
|
|
proc LLVMConstVector*(ScalarConstantVals: pLLVMValueRef, Size: dword): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstVector".}
|
|
# Constant expressions
|
|
proc LLVMGetConstOpcode*(ConstantVal: LLVMValueRef): LLVMOpcode{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetConstOpcode".}
|
|
proc LLVMAlignOf*(Ty: LLVMTypeRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMAlignOf".}
|
|
proc LLVMSizeOf*(Ty: LLVMTypeRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMSizeOf".}
|
|
proc LLVMConstNeg*(ConstantVal: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstNeg".}
|
|
proc LLVMConstFNeg*(ConstantVal: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstFNeg".}
|
|
proc LLVMConstNot*(ConstantVal: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstNot".}
|
|
proc LLVMConstAdd*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstAdd".}
|
|
proc LLVMConstNSWAdd*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstNSWAdd".}
|
|
proc LLVMConstFAdd*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFAdd".}
|
|
proc LLVMConstSub*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstSub".}
|
|
proc LLVMConstFSub*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFSub".}
|
|
proc LLVMConstMul*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstMul".}
|
|
proc LLVMConstFMul*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFMul".}
|
|
proc LLVMConstUDiv*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstUDiv".}
|
|
proc LLVMConstSDiv*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstSDiv".}
|
|
proc LLVMConstExactSDiv*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstExactSDiv".}
|
|
proc LLVMConstFDiv*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFDiv".}
|
|
proc LLVMConstURem*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstURem".}
|
|
proc LLVMConstSRem*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstSRem".}
|
|
proc LLVMConstFRem*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFRem".}
|
|
proc LLVMConstAnd*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstAnd".}
|
|
proc LLVMConstOr*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstOr".}
|
|
proc LLVMConstXor*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstXor".}
|
|
proc LLVMConstICmp*(Predicate: LLVMIntPredicate, LHSConstant: LLVMValueRef,
|
|
RHSConstant: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstICmp".}
|
|
proc LLVMConstFCmp*(Predicate: LLVMRealPredicate, LHSConstant: LLVMValueRef,
|
|
RHSConstant: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstFCmp".}
|
|
proc LLVMConstShl*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstShl".}
|
|
proc LLVMConstLShr*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstLShr".}
|
|
proc LLVMConstAShr*(LHSConstant: LLVMValueRef, RHSConstant: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstAShr".}
|
|
proc LLVMConstGEP*(ConstantVal: LLVMValueRef, ConstantIndices: pLLVMValueRef,
|
|
NumIndices: dword): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMConstGEP".}
|
|
proc LLVMConstInBoundsGEP*(ConstantVal: LLVMValueRef,
|
|
ConstantIndices: pLLVMValueRef, NumIndices: dword): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstInBoundsGEP".}
|
|
proc LLVMConstTrunc*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstTrunc".}
|
|
proc LLVMConstSExt*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstSExt".}
|
|
proc LLVMConstZExt*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstZExt".}
|
|
proc LLVMConstFPTrunc*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFPTrunc".}
|
|
proc LLVMConstFPExt*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFPExt".}
|
|
proc LLVMConstUIToFP*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstUIToFP".}
|
|
proc LLVMConstSIToFP*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstSIToFP".}
|
|
proc LLVMConstFPToUI*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFPToUI".}
|
|
proc LLVMConstFPToSI*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFPToSI".}
|
|
proc LLVMConstPtrToInt*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstPtrToInt".}
|
|
proc LLVMConstIntToPtr*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstIntToPtr".}
|
|
proc LLVMConstBitCast*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstBitCast".}
|
|
proc LLVMConstZExtOrBitCast*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstZExtOrBitCast".}
|
|
proc LLVMConstSExtOrBitCast*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstSExtOrBitCast".}
|
|
proc LLVMConstTruncOrBitCast*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstTruncOrBitCast".}
|
|
proc LLVMConstPointerCast*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstPointerCast".}
|
|
proc LLVMConstIntCast*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef,
|
|
isSigned: dword): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMConstIntCast".}
|
|
proc LLVMConstFPCast*(ConstantVal: LLVMValueRef, ToType: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstFPCast".}
|
|
proc LLVMConstSelect*(ConstantCondition: LLVMValueRef,
|
|
ConstantIfTrue: LLVMValueRef,
|
|
ConstantIfFalse: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstSelect".}
|
|
proc LLVMConstExtractElement*(VectorConstant: LLVMValueRef,
|
|
IndexConstant: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstExtractElement".}
|
|
proc LLVMConstInsertElement*(VectorConstant: LLVMValueRef,
|
|
ElementValueConstant: LLVMValueRef,
|
|
IndexConstant: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstInsertElement".}
|
|
proc LLVMConstShuffleVector*(VectorAConstant: LLVMValueRef,
|
|
VectorBConstant: LLVMValueRef,
|
|
MaskConstant: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstShuffleVector".}
|
|
proc LLVMConstExtractValue*(AggConstant: LLVMValueRef, IdxList: pdword,
|
|
NumIdx: dword): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMConstExtractValue".}
|
|
proc LLVMConstInsertValue*(AggConstant: LLVMValueRef,
|
|
ElementValueConstant: LLVMValueRef, IdxList: pdword,
|
|
NumIdx: dword): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMConstInsertValue".}
|
|
proc LLVMConstInlineAsm*(Ty: LLVMTypeRef, AsmString: cstring,
|
|
Constraints: cstring, HasSideEffects: int32): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMConstInlineAsm".}
|
|
# Operations on global variables, functions, and aliases (globals)
|
|
proc LLVMGetGlobalParent*(Global: LLVMValueRef): LLVMModuleRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetGlobalParent".}
|
|
proc LLVMIsDeclaration*(Global: LLVMValueRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsDeclaration".}
|
|
proc LLVMGetLinkage*(Global: LLVMValueRef): LLVMLinkage{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetLinkage".}
|
|
proc LLVMSetLinkage*(Global: LLVMValueRef, Linkage: LLVMLinkage){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetLinkage".}
|
|
proc LLVMGetSection*(Global: LLVMValueRef): cstring{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetSection".}
|
|
proc LLVMSetSection*(Global: LLVMValueRef, Section: cstring){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetSection".}
|
|
proc LLVMGetVisibility*(Global: LLVMValueRef): LLVMVisibility{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetVisibility".}
|
|
proc LLVMSetVisibility*(Global: LLVMValueRef, Viz: LLVMVisibility){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetVisibility".}
|
|
proc LLVMGetAlignment*(Global: LLVMValueRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetAlignment".}
|
|
proc LLVMSetAlignment*(Global: LLVMValueRef, Bytes: dword){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetAlignment".}
|
|
# Operations on global variables
|
|
proc LLVMAddGlobal*(M: LLVMModuleRef, Ty: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMAddGlobal".}
|
|
proc LLVMGetNamedGlobal*(M: LLVMModuleRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetNamedGlobal".}
|
|
proc LLVMGetFirstGlobal*(M: LLVMModuleRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetFirstGlobal".}
|
|
proc LLVMGetLastGlobal*(M: LLVMModuleRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetLastGlobal".}
|
|
proc LLVMGetNextGlobal*(GlobalVar: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetNextGlobal".}
|
|
proc LLVMGetPreviousGlobal*(GlobalVar: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetPreviousGlobal".}
|
|
proc LLVMDeleteGlobal*(GlobalVar: LLVMValueRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDeleteGlobal".}
|
|
proc LLVMGetInitializer*(GlobalVar: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetInitializer".}
|
|
proc LLVMSetInitializer*(GlobalVar: LLVMValueRef, ConstantVal: LLVMValueRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMSetInitializer".}
|
|
proc LLVMIsThreadLocal*(GlobalVar: LLVMValueRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsThreadLocal".}
|
|
proc LLVMSetThreadLocal*(GlobalVar: LLVMValueRef, IsThreadLocal: int32){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetThreadLocal".}
|
|
proc LLVMIsGlobalConstant*(GlobalVar: LLVMValueRef): int32{.cdecl,
|
|
dynlib: libname, importc: "LLVMIsGlobalConstant".}
|
|
proc LLVMSetGlobalConstant*(GlobalVar: LLVMValueRef, IsConstant: int32){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetGlobalConstant".}
|
|
# Operations on aliases
|
|
proc LLVMAddAlias*(M: LLVMModuleRef, Ty: LLVMTypeRef, Aliasee: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMAddAlias".}
|
|
# Operations on functions
|
|
proc LLVMAddFunction*(M: LLVMModuleRef, Name: cstring, FunctionTy: LLVMTypeRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMAddFunction".}
|
|
proc LLVMGetNamedFunction*(M: LLVMModuleRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMGetNamedFunction".}
|
|
proc LLVMGetFirstFunction*(M: LLVMModuleRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetFirstFunction".}
|
|
proc LLVMGetLastFunction*(M: LLVMModuleRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetLastFunction".}
|
|
proc LLVMGetNextFunction*(Fn: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetNextFunction".}
|
|
proc LLVMGetPreviousFunction*(Fn: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetPreviousFunction".}
|
|
proc LLVMDeleteFunction*(Fn: LLVMValueRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDeleteFunction".}
|
|
proc LLVMGetIntrinsicID*(Fn: LLVMValueRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetIntrinsicID".}
|
|
proc LLVMGetFunctionCallConv*(Fn: LLVMValueRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetFunctionCallConv".}
|
|
proc LLVMSetFunctionCallConv*(Fn: LLVMValueRef, CC: dword){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetFunctionCallConv".}
|
|
proc LLVMGetGC*(Fn: LLVMValueRef): cstring{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetGC".}
|
|
proc LLVMSetGC*(Fn: LLVMValueRef, Name: cstring){.cdecl, dynlib: libname,
|
|
importc: "LLVMSetGC".}
|
|
proc LLVMAddFunctionAttr*(Fn: LLVMValueRef, PA: LLVMAttribute){.cdecl,
|
|
dynlib: libname, importc: "LLVMAddFunctionAttr".}
|
|
proc LLVMGetFunctionAttr*(Fn: LLVMValueRef): LLVMAttribute{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetFunctionAttr".}
|
|
proc LLVMRemoveFunctionAttr*(Fn: LLVMValueRef, PA: LLVMAttribute){.cdecl,
|
|
dynlib: libname, importc: "LLVMRemoveFunctionAttr".}
|
|
# Operations on parameters
|
|
proc LLVMCountParams*(Fn: LLVMValueRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMCountParams".}
|
|
proc LLVMGetParams*(Fn: LLVMValueRef, Params: pLLVMValueRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMGetParams".}
|
|
proc LLVMGetParam*(Fn: LLVMValueRef, Index: dword): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetParam".}
|
|
proc LLVMGetParamParent*(Inst: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetParamParent".}
|
|
proc LLVMGetFirstParam*(Fn: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetFirstParam".}
|
|
proc LLVMGetLastParam*(Fn: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetLastParam".}
|
|
proc LLVMGetNextParam*(Arg: LLVMValueRef): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMGetNextParam".}
|
|
proc LLVMGetPreviousParam*(Arg: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetPreviousParam".}
|
|
proc LLVMAddAttribute*(Arg: LLVMValueRef, PA: LLVMAttribute){.cdecl,
|
|
dynlib: libname, importc: "LLVMAddAttribute".}
|
|
proc LLVMRemoveAttribute*(Arg: LLVMValueRef, PA: LLVMAttribute){.cdecl,
|
|
dynlib: libname, importc: "LLVMRemoveAttribute".}
|
|
proc LLVMGetAttribute*(Arg: LLVMValueRef): LLVMAttribute{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetAttribute".}
|
|
proc LLVMSetParamAlignment*(Arg: LLVMValueRef, align: dword){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetParamAlignment".}
|
|
# Operations on basic blocks
|
|
proc LLVMBasicBlockAsValue*(BB: LLVMBasicBlockRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBasicBlockAsValue".}
|
|
proc LLVMValueIsBasicBlock*(Val: LLVMValueRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMValueIsBasicBlock".}
|
|
proc LLVMValueAsBasicBlock*(Val: LLVMValueRef): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMValueAsBasicBlock".}
|
|
proc LLVMGetBasicBlockParent*(BB: LLVMBasicBlockRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetBasicBlockParent".}
|
|
proc LLVMCountBasicBlocks*(Fn: LLVMValueRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMCountBasicBlocks".}
|
|
proc LLVMGetBasicBlocks*(Fn: LLVMValueRef, BasicBlocks: pLLVMBasicBlockRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMGetBasicBlocks".}
|
|
proc LLVMGetFirstBasicBlock*(Fn: LLVMValueRef): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetFirstBasicBlock".}
|
|
proc LLVMGetLastBasicBlock*(Fn: LLVMValueRef): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetLastBasicBlock".}
|
|
proc LLVMGetNextBasicBlock*(BB: LLVMBasicBlockRef): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetNextBasicBlock".}
|
|
proc LLVMGetPreviousBasicBlock*(BB: LLVMBasicBlockRef): LLVMBasicBlockRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMGetPreviousBasicBlock".}
|
|
proc LLVMGetEntryBasicBlock*(Fn: LLVMValueRef): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetEntryBasicBlock".}
|
|
proc LLVMAppendBasicBlockInContext*(C: LLVMContextRef, Fn: LLVMValueRef,
|
|
Name: cstring): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMAppendBasicBlockInContext".}
|
|
proc LLVMInsertBasicBlockInContext*(C: LLVMContextRef, BB: LLVMBasicBlockRef,
|
|
Name: cstring): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMInsertBasicBlockInContext".}
|
|
proc LLVMAppendBasicBlock*(Fn: LLVMValueRef, Name: cstring): LLVMBasicBlockRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMAppendBasicBlock".}
|
|
proc LLVMInsertBasicBlock*(InsertBeforeBB: LLVMBasicBlockRef, Name: cstring): LLVMBasicBlockRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMInsertBasicBlock".}
|
|
proc LLVMDeleteBasicBlock*(BB: LLVMBasicBlockRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDeleteBasicBlock".}
|
|
# Operations on instructions
|
|
proc LLVMGetInstructionParent*(Inst: LLVMValueRef): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetInstructionParent".}
|
|
proc LLVMGetFirstInstruction*(BB: LLVMBasicBlockRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetFirstInstruction".}
|
|
proc LLVMGetLastInstruction*(BB: LLVMBasicBlockRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetLastInstruction".}
|
|
proc LLVMGetNextInstruction*(Inst: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetNextInstruction".}
|
|
proc LLVMGetPreviousInstruction*(Inst: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetPreviousInstruction".}
|
|
# Operations on call sites
|
|
proc LLVMSetInstructionCallConv*(Instr: LLVMValueRef, CC: dword){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetInstructionCallConv".}
|
|
proc LLVMGetInstructionCallConv*(Instr: LLVMValueRef): dword{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetInstructionCallConv".}
|
|
proc LLVMAddInstrAttribute*(Instr: LLVMValueRef, index: dword,
|
|
para3: LLVMAttribute){.cdecl, dynlib: libname,
|
|
importc: "LLVMAddInstrAttribute".}
|
|
proc LLVMRemoveInstrAttribute*(Instr: LLVMValueRef, index: dword,
|
|
para3: LLVMAttribute){.cdecl, dynlib: libname,
|
|
importc: "LLVMRemoveInstrAttribute".}
|
|
proc LLVMSetInstrParamAlignment*(Instr: LLVMValueRef, index: dword, align: dword){.
|
|
cdecl, dynlib: libname, importc: "LLVMSetInstrParamAlignment".}
|
|
# Operations on call instructions (only)
|
|
proc LLVMIsTailCall*(CallInst: LLVMValueRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMIsTailCall".}
|
|
proc LLVMSetTailCall*(CallInst: LLVMValueRef, IsTailCall: int32){.cdecl,
|
|
dynlib: libname, importc: "LLVMSetTailCall".}
|
|
# Operations on phi nodes
|
|
proc LLVMAddIncoming*(PhiNode: LLVMValueRef, IncomingValues: pLLVMValueRef,
|
|
IncomingBlocks: pLLVMBasicBlockRef, Count: dword){.cdecl,
|
|
dynlib: libname, importc: "LLVMAddIncoming".}
|
|
proc LLVMCountIncoming*(PhiNode: LLVMValueRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMCountIncoming".}
|
|
proc LLVMGetIncomingValue*(PhiNode: LLVMValueRef, Index: dword): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMGetIncomingValue".}
|
|
proc LLVMGetIncomingBlock*(PhiNode: LLVMValueRef, Index: dword): LLVMBasicBlockRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMGetIncomingBlock".}
|
|
#===-- Instruction builders ----------------------------------------------===
|
|
# An instruction builder represents a point within a basic block, and is the
|
|
# * exclusive means of building instructions using the C interface.
|
|
#
|
|
proc LLVMCreateBuilderInContext*(C: LLVMContextRef): LLVMBuilderRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMCreateBuilderInContext".}
|
|
proc LLVMCreateBuilder*(): LLVMBuilderRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMCreateBuilder".}
|
|
proc LLVMPositionBuilder*(Builder: LLVMBuilderRef, theBlock: LLVMBasicBlockRef,
|
|
Instr: LLVMValueRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMPositionBuilder".}
|
|
proc LLVMPositionBuilderBefore*(Builder: LLVMBuilderRef, Instr: LLVMValueRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMPositionBuilderBefore".}
|
|
proc LLVMPositionBuilderAtEnd*(Builder: LLVMBuilderRef, theBlock: LLVMBasicBlockRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMPositionBuilderAtEnd".}
|
|
proc LLVMGetInsertBlock*(Builder: LLVMBuilderRef): LLVMBasicBlockRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetInsertBlock".}
|
|
proc LLVMClearInsertionPosition*(Builder: LLVMBuilderRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMClearInsertionPosition".}
|
|
proc LLVMInsertIntoBuilder*(Builder: LLVMBuilderRef, Instr: LLVMValueRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMInsertIntoBuilder".}
|
|
proc LLVMInsertIntoBuilderWithName*(Builder: LLVMBuilderRef,
|
|
Instr: LLVMValueRef, Name: cstring){.cdecl,
|
|
dynlib: libname, importc: "LLVMInsertIntoBuilderWithName".}
|
|
proc LLVMDisposeBuilder*(Builder: LLVMBuilderRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDisposeBuilder".}
|
|
# Terminators
|
|
proc LLVMBuildRetVoid*(para1: LLVMBuilderRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildRetVoid".}
|
|
proc LLVMBuildRet*(para1: LLVMBuilderRef, V: LLVMValueRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildRet".}
|
|
proc LLVMBuildAggregateRet*(para1: LLVMBuilderRef, RetVals: pLLVMValueRef,
|
|
N: dword): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildAggregateRet".}
|
|
proc LLVMBuildBr*(para1: LLVMBuilderRef, Dest: LLVMBasicBlockRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildBr".}
|
|
proc LLVMBuildCondBr*(para1: LLVMBuilderRef, Cond: LLVMValueRef,
|
|
ThenBranch: LLVMBasicBlockRef,
|
|
ElseBranch: LLVMBasicBlockRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildCondBr".}
|
|
proc LLVMBuildSwitch*(para1: LLVMBuilderRef, V: LLVMValueRef,
|
|
ElseBranch: LLVMBasicBlockRef, NumCases: dword): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildSwitch".}
|
|
proc LLVMBuildInvoke*(para1: LLVMBuilderRef, Fn: LLVMValueRef,
|
|
Args: pLLVMValueRef, NumArgs: dword,
|
|
ThenBranch: LLVMBasicBlockRef, Catch: LLVMBasicBlockRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildInvoke".}
|
|
proc LLVMBuildUnwind*(para1: LLVMBuilderRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildUnwind".}
|
|
proc LLVMBuildUnreachable*(para1: LLVMBuilderRef): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildUnreachable".}
|
|
# Add a case to the switch instruction
|
|
proc LLVMAddCase*(Switch: LLVMValueRef, OnVal: LLVMValueRef,
|
|
Dest: LLVMBasicBlockRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMAddCase".}
|
|
# Arithmetic
|
|
proc LLVMBuildAdd*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildAdd".}
|
|
proc LLVMBuildNSWAdd*(para1: LLVMBuilderRef, LHS: LLVMValueRef,
|
|
RHS: LLVMValueRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildNSWAdd".}
|
|
proc LLVMBuildFAdd*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildFAdd".}
|
|
proc LLVMBuildSub*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildSub".}
|
|
proc LLVMBuildFSub*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildFSub".}
|
|
proc LLVMBuildMul*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildMul".}
|
|
proc LLVMBuildFMul*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildFMul".}
|
|
proc LLVMBuildUDiv*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildUDiv".}
|
|
proc LLVMBuildSDiv*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildSDiv".}
|
|
proc LLVMBuildExactSDiv*(para1: LLVMBuilderRef, LHS: LLVMValueRef,
|
|
RHS: LLVMValueRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildExactSDiv".}
|
|
proc LLVMBuildFDiv*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildFDiv".}
|
|
proc LLVMBuildURem*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildURem".}
|
|
proc LLVMBuildSRem*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildSRem".}
|
|
proc LLVMBuildFRem*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildFRem".}
|
|
proc LLVMBuildShl*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildShl".}
|
|
proc LLVMBuildLShr*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildLShr".}
|
|
proc LLVMBuildAShr*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildAShr".}
|
|
proc LLVMBuildAnd*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildAnd".}
|
|
proc LLVMBuildOr*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildOr".}
|
|
proc LLVMBuildXor*(para1: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildXor".}
|
|
proc LLVMBuildNeg*(para1: LLVMBuilderRef, V: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildNeg".}
|
|
proc LLVMBuildFNeg*(para1: LLVMBuilderRef, V: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildFNeg".}
|
|
proc LLVMBuildNot*(para1: LLVMBuilderRef, V: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildNot".}
|
|
# Memory
|
|
proc LLVMBuildMalloc*(para1: LLVMBuilderRef, Ty: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildMalloc".}
|
|
proc LLVMBuildArrayMalloc*(para1: LLVMBuilderRef, Ty: LLVMTypeRef,
|
|
Val: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildArrayMalloc".}
|
|
proc LLVMBuildAlloca*(para1: LLVMBuilderRef, Ty: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildAlloca".}
|
|
proc LLVMBuildArrayAlloca*(para1: LLVMBuilderRef, Ty: LLVMTypeRef,
|
|
Val: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildArrayAlloca".}
|
|
proc LLVMBuildFree*(para1: LLVMBuilderRef, PointerVal: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildFree".}
|
|
proc LLVMBuildLoad*(para1: LLVMBuilderRef, PointerVal: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildLoad".}
|
|
proc LLVMBuildStore*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
thePtr: LLVMValueRef): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildStore".}
|
|
proc LLVMBuildGEP*(B: LLVMBuilderRef, Pointer: LLVMValueRef,
|
|
Indices: pLLVMValueRef, NumIndices: dword, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildGEP".}
|
|
proc LLVMBuildInBoundsGEP*(B: LLVMBuilderRef, Pointer: LLVMValueRef,
|
|
Indices: pLLVMValueRef, NumIndices: dword,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildInBoundsGEP".}
|
|
proc LLVMBuildStructGEP*(B: LLVMBuilderRef, Pointer: LLVMValueRef, Idx: dword,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildStructGEP".}
|
|
proc LLVMBuildGlobalString*(B: LLVMBuilderRef, Str: cstring, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildGlobalString".}
|
|
proc LLVMBuildGlobalStringPtr*(B: LLVMBuilderRef, Str: cstring, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildGlobalStringPtr".}
|
|
# Casts
|
|
proc LLVMBuildTrunc*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildTrunc".}
|
|
proc LLVMBuildZExt*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildZExt".}
|
|
proc LLVMBuildSExt*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildSExt".}
|
|
proc LLVMBuildFPToUI*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildFPToUI".}
|
|
proc LLVMBuildFPToSI*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildFPToSI".}
|
|
proc LLVMBuildUIToFP*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildUIToFP".}
|
|
proc LLVMBuildSIToFP*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildSIToFP".}
|
|
proc LLVMBuildFPTrunc*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildFPTrunc".}
|
|
proc LLVMBuildFPExt*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildFPExt".}
|
|
proc LLVMBuildPtrToInt*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildPtrToInt".}
|
|
proc LLVMBuildIntToPtr*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildIntToPtr".}
|
|
proc LLVMBuildBitCast*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildBitCast".}
|
|
proc LLVMBuildZExtOrBitCast*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildZExtOrBitCast".}
|
|
proc LLVMBuildSExtOrBitCast*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildSExtOrBitCast".}
|
|
proc LLVMBuildTruncOrBitCast*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildTruncOrBitCast".}
|
|
proc LLVMBuildPointerCast*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildPointerCast".}
|
|
proc LLVMBuildIntCast*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildIntCast".}
|
|
proc LLVMBuildFPCast*(para1: LLVMBuilderRef, Val: LLVMValueRef,
|
|
DestTy: LLVMTypeRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildFPCast".}
|
|
# Comparisons
|
|
proc LLVMBuildICmp*(para1: LLVMBuilderRef, Op: LLVMIntPredicate,
|
|
LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildICmp".}
|
|
proc LLVMBuildFCmp*(para1: LLVMBuilderRef, Op: LLVMRealPredicate,
|
|
LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildFCmp".}
|
|
# Miscellaneous instructions
|
|
proc LLVMBuildPhi*(para1: LLVMBuilderRef, Ty: LLVMTypeRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildPhi".}
|
|
proc LLVMBuildCall*(para1: LLVMBuilderRef, Fn: LLVMValueRef,
|
|
Args: pLLVMValueRef, NumArgs: dword, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildCall".}
|
|
proc LLVMBuildSelect*(para1: LLVMBuilderRef, Cond: LLVMValueRef,
|
|
ThenBranch: LLVMValueRef, ElseBranch: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildSelect".}
|
|
proc LLVMBuildVAArg*(para1: LLVMBuilderRef, List: LLVMValueRef, Ty: LLVMTypeRef,
|
|
Name: cstring): LLVMValueRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMBuildVAArg".}
|
|
proc LLVMBuildExtractElement*(para1: LLVMBuilderRef, VecVal: LLVMValueRef,
|
|
Index: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildExtractElement".}
|
|
proc LLVMBuildInsertElement*(para1: LLVMBuilderRef, VecVal: LLVMValueRef,
|
|
EltVal: LLVMValueRef, Index: LLVMValueRef,
|
|
Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildInsertElement".}
|
|
proc LLVMBuildShuffleVector*(para1: LLVMBuilderRef, V1: LLVMValueRef,
|
|
V2: LLVMValueRef, Mask: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildShuffleVector".}
|
|
proc LLVMBuildExtractValue*(para1: LLVMBuilderRef, AggVal: LLVMValueRef,
|
|
Index: dword, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildExtractValue".}
|
|
proc LLVMBuildInsertValue*(para1: LLVMBuilderRef, AggVal: LLVMValueRef,
|
|
EltVal: LLVMValueRef, Index: dword, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildInsertValue".}
|
|
proc LLVMBuildIsNull*(para1: LLVMBuilderRef, Val: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildIsNull".}
|
|
proc LLVMBuildIsNotNull*(para1: LLVMBuilderRef, Val: LLVMValueRef, Name: cstring): LLVMValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMBuildIsNotNull".}
|
|
proc LLVMBuildPtrDiff*(para1: LLVMBuilderRef, LHS: LLVMValueRef,
|
|
RHS: LLVMValueRef, Name: cstring): LLVMValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMBuildPtrDiff".}
|
|
#===-- Module providers --------------------------------------------------===
|
|
# Encapsulates the module M in a module provider, taking ownership of the
|
|
# * module.
|
|
# * See the constructor llvm::ExistingModuleProvider::ExistingModuleProvider.
|
|
#
|
|
proc LLVMCreateModuleProviderForExistingModule*(M: LLVMModuleRef): LLVMModuleProviderRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMCreateModuleProviderForExistingModule".}
|
|
# Destroys the module provider MP as well as the contained module.
|
|
# * See the destructor llvm::ModuleProvider::~ModuleProvider.
|
|
#
|
|
proc LLVMDisposeModuleProvider*(MP: LLVMModuleProviderRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMDisposeModuleProvider".}
|
|
#===-- Memory buffers ----------------------------------------------------===
|
|
proc LLVMCreateMemoryBufferWithContentsOfFile*(Path: cstring,
|
|
OutMemBuf: pLLVMMemoryBufferRef, OutMessage: Ppchar): int32{.cdecl,
|
|
dynlib: libname, importc: "LLVMCreateMemoryBufferWithContentsOfFile".}
|
|
proc LLVMCreateMemoryBufferWithSTDIN*(OutMemBuf: pLLVMMemoryBufferRef,
|
|
OutMessage: Ppchar): int32{.cdecl,
|
|
dynlib: libname, importc: "LLVMCreateMemoryBufferWithSTDIN".}
|
|
proc LLVMDisposeMemoryBuffer*(MemBuf: LLVMMemoryBufferRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMDisposeMemoryBuffer".}
|
|
#===-- Pass Managers -----------------------------------------------------===
|
|
#* Constructs a new whole-module pass pipeline. This type of pipeline is
|
|
# suitable for link-time optimization and whole-module transformations.
|
|
# See llvm::PassManager::PassManager.
|
|
proc LLVMCreatePassManager*(): LLVMPassManagerRef{.cdecl, dynlib: libname,
|
|
importc: "LLVMCreatePassManager".}
|
|
#* Constructs a new function-by-function pass pipeline over the module
|
|
# provider. It does not take ownership of the module provider. This type of
|
|
# pipeline is suitable for code generation and JIT compilation tasks.
|
|
# See llvm::FunctionPassManager::FunctionPassManager.
|
|
proc LLVMCreateFunctionPassManager*(MP: LLVMModuleProviderRef): LLVMPassManagerRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMCreateFunctionPassManager".}
|
|
#* Initializes, executes on the provided module, and finalizes all of the
|
|
# passes scheduled in the pass manager. Returns 1 if any of the passes
|
|
# modified the module, 0 otherwise. See llvm::PassManager::run(Module&).
|
|
proc LLVMRunPassManager*(PM: LLVMPassManagerRef, M: LLVMModuleRef): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMRunPassManager".}
|
|
#* Initializes all of the function passes scheduled in the function pass
|
|
# manager. Returns 1 if any of the passes modified the module, 0 otherwise.
|
|
# See llvm::FunctionPassManager::doInitialization.
|
|
proc LLVMInitializeFunctionPassManager*(FPM: LLVMPassManagerRef): int32{.cdecl,
|
|
dynlib: libname, importc: "LLVMInitializeFunctionPassManager".}
|
|
#* Executes all of the function passes scheduled in the function pass manager
|
|
# on the provided function. Returns 1 if any of the passes modified the
|
|
# function, false otherwise.
|
|
# See llvm::FunctionPassManager::run(Function&).
|
|
proc LLVMRunFunctionPassManager*(FPM: LLVMPassManagerRef, F: LLVMValueRef): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMRunFunctionPassManager".}
|
|
#* Finalizes all of the function passes scheduled in in the function pass
|
|
# manager. Returns 1 if any of the passes modified the module, 0 otherwise.
|
|
# See llvm::FunctionPassManager::doFinalization.
|
|
proc LLVMFinalizeFunctionPassManager*(FPM: LLVMPassManagerRef): int32{.cdecl,
|
|
dynlib: libname, importc: "LLVMFinalizeFunctionPassManager".}
|
|
#* Frees the memory of a pass pipeline. For function pipelines, does not free
|
|
# the module provider.
|
|
# See llvm::PassManagerBase::~PassManagerBase.
|
|
proc LLVMDisposePassManager*(PM: LLVMPassManagerRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDisposePassManager".}
|
|
# Analysis.h
|
|
# verifier will print to stderr and abort()
|
|
# verifier will print to stderr and return 1
|
|
# verifier will just return 1
|
|
type
|
|
LLVMVerifierFailureAction* = enum # Verifies that a module is valid, taking the specified action if not.
|
|
# Optionally returns a human-readable description of any invalid constructs.
|
|
# OutMessage must be disposed with LLVMDisposeMessage.
|
|
LLVMAbortProcessAction, LLVMPrintMessageAction, LLVMReturnStatusAction
|
|
|
|
proc LLVMVerifyModule*(M: LLVMModuleRef, Action: LLVMVerifierFailureAction,
|
|
OutMessage: Ppchar): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMVerifyModule".}
|
|
# Verifies that a single function is valid, taking the specified action. Useful
|
|
# for debugging.
|
|
proc LLVMVerifyFunction*(Fn: LLVMValueRef, Action: LLVMVerifierFailureAction): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMVerifyFunction".}
|
|
# Open up a ghostview window that displays the CFG of the current function.
|
|
# Useful for debugging.
|
|
proc LLVMViewFunctionCFG*(Fn: LLVMValueRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMViewFunctionCFG".}
|
|
proc LLVMViewFunctionCFGOnly*(Fn: LLVMValueRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMViewFunctionCFGOnly".}
|
|
# BitReader.h
|
|
# Builds a module from the bitcode in the specified memory buffer, returning a
|
|
# reference to the module via the OutModule parameter. Returns 0 on success.
|
|
# Optionally returns a human-readable error message via OutMessage.
|
|
proc LLVMParseBitcode*(MemBuf: LLVMMemoryBufferRef, OutModule: pLLVMModuleRef,
|
|
OutMessage: Ppchar): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMParseBitcode".}
|
|
proc LLVMParseBitcodeInContext*(ContextRef: LLVMContextRef,
|
|
MemBuf: LLVMMemoryBufferRef,
|
|
OutModule: pLLVMModuleRef, OutMessage: Ppchar): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMParseBitcodeInContext".}
|
|
# Reads a module from the specified path, returning via the OutMP parameter
|
|
# a module provider which performs lazy deserialization. Returns 0 on success.
|
|
# Optionally returns a human-readable error message via OutMessage.
|
|
proc LLVMGetBitcodeModuleProvider*(MemBuf: LLVMMemoryBufferRef,
|
|
OutMP: pLLVMModuleProviderRef,
|
|
OutMessage: Ppchar): int32{.cdecl,
|
|
dynlib: libname, importc: "LLVMGetBitcodeModuleProvider".}
|
|
proc LLVMGetBitcodeModuleProviderInContext*(ContextRef: LLVMContextRef,
|
|
MemBuf: LLVMMemoryBufferRef, OutMP: pLLVMModuleProviderRef,
|
|
OutMessage: Ppchar): int32{.cdecl, dynlib: libname, importc: "LLVMGetBitcodeModuleProviderInContext".}
|
|
# BitWriter.h
|
|
#===-- Operations on modules ---------------------------------------------===
|
|
# Writes a module to an open file descriptor. Returns 0 on success.
|
|
# Closes the Handle. Use dup first if this is not what you want.
|
|
proc LLVMWriteBitcodeToFileHandle*(M: LLVMModuleRef, Handle: int32): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMWriteBitcodeToFileHandle".}
|
|
# Writes a module to the specified path. Returns 0 on success.
|
|
proc LLVMWriteBitcodeToFile*(M: LLVMModuleRef, Path: cstring): int32{.cdecl,
|
|
dynlib: libname, importc: "LLVMWriteBitcodeToFile".}
|
|
# Target.h
|
|
const
|
|
LLVMBigEndian* = 0
|
|
LLVMLittleEndian* = 1
|
|
|
|
type
|
|
LLVMByteOrdering* = int32
|
|
LLVMTargetDataRef* = LLVMOpaqueTargetData
|
|
LLVMStructLayoutRef* = LLVMStructLayout #===-- Target Data -------------------------------------------------------===
|
|
#* Creates target data from a target layout string.
|
|
# See the constructor llvm::TargetData::TargetData.
|
|
|
|
proc LLVMCreateTargetData*(StringRep: cstring): LLVMTargetDataRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMCreateTargetData".}
|
|
#* Adds target data information to a pass manager. This does not take ownership
|
|
# of the target data.
|
|
# See the method llvm::PassManagerBase::add.
|
|
proc LLVMAddTargetData*(para1: LLVMTargetDataRef, para2: LLVMPassManagerRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMAddTargetData".}
|
|
#* Converts target data to a target layout string. The string must be disposed
|
|
# with LLVMDisposeMessage.
|
|
# See the constructor llvm::TargetData::TargetData.
|
|
proc LLVMCopyStringRepOfTargetData*(para1: LLVMTargetDataRef): cstring{.cdecl,
|
|
dynlib: libname, importc: "LLVMCopyStringRepOfTargetData".}
|
|
#* Returns the byte order of a target, either LLVMBigEndian or
|
|
# LLVMLittleEndian.
|
|
# See the method llvm::TargetData::isLittleEndian.
|
|
proc LLVMByteOrder*(para1: LLVMTargetDataRef): LLVMByteOrdering{.cdecl,
|
|
dynlib: libname, importc: "LLVMByteOrder".}
|
|
#* Returns the pointer size in bytes for a target.
|
|
# See the method llvm::TargetData::getPointerSize.
|
|
proc LLVMPointerSize*(para1: LLVMTargetDataRef): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMPointerSize".}
|
|
#* Returns the integer type that is the same size as a pointer on a target.
|
|
# See the method llvm::TargetData::getIntPtrType.
|
|
proc LLVMIntPtrType*(para1: LLVMTargetDataRef): LLVMTypeRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMIntPtrType".}
|
|
#* Computes the size of a type in bytes for a target.
|
|
# See the method llvm::TargetData::getTypeSizeInBits.
|
|
proc LLVMSizeOfTypeInBits*(para1: LLVMTargetDataRef, para2: LLVMTypeRef): qword{.
|
|
cdecl, dynlib: libname, importc: "LLVMSizeOfTypeInBits".}
|
|
#* Computes the storage size of a type in bytes for a target.
|
|
# See the method llvm::TargetData::getTypeStoreSize.
|
|
proc LLVMStoreSizeOfType*(para1: LLVMTargetDataRef, para2: LLVMTypeRef): qword{.
|
|
cdecl, dynlib: libname, importc: "LLVMStoreSizeOfType".}
|
|
#* Computes the ABI size of a type in bytes for a target.
|
|
# See the method llvm::TargetData::getTypeAllocSize.
|
|
proc LLVMABISizeOfType*(para1: LLVMTargetDataRef, para2: LLVMTypeRef): qword{.
|
|
cdecl, dynlib: libname, importc: "LLVMABISizeOfType".}
|
|
#* Computes the ABI alignment of a type in bytes for a target.
|
|
# See the method llvm::TargetData::getTypeABISize.
|
|
proc LLVMABIAlignmentOfType*(para1: LLVMTargetDataRef, para2: LLVMTypeRef): dword{.
|
|
cdecl, dynlib: libname, importc: "LLVMABIAlignmentOfType".}
|
|
#* Computes the call frame alignment of a type in bytes for a target.
|
|
# See the method llvm::TargetData::getTypeABISize.
|
|
proc LLVMCallFrameAlignmentOfType*(para1: LLVMTargetDataRef, para2: LLVMTypeRef): dword{.
|
|
cdecl, dynlib: libname, importc: "LLVMCallFrameAlignmentOfType".}
|
|
#* Computes the preferred alignment of a type in bytes for a target.
|
|
# See the method llvm::TargetData::getTypeABISize.
|
|
proc LLVMPreferredAlignmentOfType*(para1: LLVMTargetDataRef, para2: LLVMTypeRef): dword{.
|
|
cdecl, dynlib: libname, importc: "LLVMPreferredAlignmentOfType".}
|
|
#* Computes the preferred alignment of a global variable in bytes for a target.
|
|
# See the method llvm::TargetData::getPreferredAlignment.
|
|
proc LLVMPreferredAlignmentOfGlobal*(para1: LLVMTargetDataRef,
|
|
GlobalVar: LLVMValueRef): dword{.cdecl,
|
|
dynlib: libname, importc: "LLVMPreferredAlignmentOfGlobal".}
|
|
#* Computes the structure element that contains the byte offset for a target.
|
|
# See the method llvm::StructLayout::getElementContainingOffset.
|
|
proc LLVMElementAtOffset*(para1: LLVMTargetDataRef, StructTy: LLVMTypeRef,
|
|
Offset: qword): dword{.cdecl, dynlib: libname,
|
|
importc: "LLVMElementAtOffset".}
|
|
#* Computes the byte offset of the indexed struct element for a target.
|
|
# See the method llvm::StructLayout::getElementContainingOffset.
|
|
proc LLVMOffsetOfElement*(para1: LLVMTargetDataRef, StructTy: LLVMTypeRef,
|
|
Element: dword): qword{.cdecl, dynlib: libname,
|
|
importc: "LLVMOffsetOfElement".}
|
|
#* Struct layouts are speculatively cached. If a TargetDataRef is alive when
|
|
# types are being refined and removed, this method must be called whenever a
|
|
# struct type is removed to avoid a dangling pointer in this cache.
|
|
# See the method llvm::TargetData::InvalidateStructLayoutInfo.
|
|
proc LLVMInvalidateStructLayout*(para1: LLVMTargetDataRef, StructTy: LLVMTypeRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMInvalidateStructLayout".}
|
|
#* Deallocates a TargetData.
|
|
# See the destructor llvm::TargetData::~TargetData.
|
|
proc LLVMDisposeTargetData*(para1: LLVMTargetDataRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMDisposeTargetData".}
|
|
# ExecutionEngine.h
|
|
proc LLVMLinkInJIT*(){.cdecl, dynlib: libname, importc: "LLVMLinkInJIT".}
|
|
proc LLVMLinkInInterpreter*(){.cdecl, dynlib: libname,
|
|
importc: "LLVMLinkInInterpreter".}
|
|
type
|
|
LLVMGenericValueRef* = LLVMOpaqueGenericValue
|
|
LLVMExecutionEngineRef* = LLVMOpaqueExecutionEngine #===-- Operations on generic values --------------------------------------===
|
|
|
|
proc LLVMCreateGenericValueOfInt*(Ty: LLVMTypeRef, N: qword, IsSigned: int32): LLVMGenericValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMCreateGenericValueOfInt".}
|
|
proc LLVMCreateGenericValueOfPointer*(P: pointer): LLVMGenericValueRef{.cdecl,
|
|
dynlib: libname, importc: "LLVMCreateGenericValueOfPointer".}
|
|
proc LLVMCreateGenericValueOfFloat*(Ty: LLVMTypeRef, N: float64): LLVMGenericValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMCreateGenericValueOfFloat".}
|
|
proc LLVMGenericValueIntWidth*(GenValRef: LLVMGenericValueRef): dword{.cdecl,
|
|
dynlib: libname, importc: "LLVMGenericValueIntWidth".}
|
|
proc LLVMGenericValueToInt*(GenVal: LLVMGenericValueRef, IsSigned: int32): qword{.
|
|
cdecl, dynlib: libname, importc: "LLVMGenericValueToInt".}
|
|
proc LLVMGenericValueToPointer*(GenVal: LLVMGenericValueRef): pointer{.cdecl,
|
|
dynlib: libname, importc: "LLVMGenericValueToPointer".}
|
|
proc LLVMGenericValueToFloat*(TyRef: LLVMTypeRef, GenVal: LLVMGenericValueRef): float64{.
|
|
cdecl, dynlib: libname, importc: "LLVMGenericValueToFloat".}
|
|
proc LLVMDisposeGenericValue*(GenVal: LLVMGenericValueRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMDisposeGenericValue".}
|
|
#===-- Operations on execution engines -----------------------------------===
|
|
proc LLVMCreateExecutionEngine*(OutEE: pLLVMExecutionEngineRef,
|
|
MP: LLVMModuleProviderRef, OutError: Ppchar): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMCreateExecutionEngine".}
|
|
proc LLVMCreateInterpreter*(OutInterp: pLLVMExecutionEngineRef,
|
|
MP: LLVMModuleProviderRef, OutError: Ppchar): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMCreateInterpreter".}
|
|
proc LLVMCreateJITCompiler*(OutJIT: pLLVMExecutionEngineRef,
|
|
MP: LLVMModuleProviderRef, OptLevel: dword,
|
|
OutError: Ppchar): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMCreateJITCompiler".}
|
|
proc LLVMDisposeExecutionEngine*(EE: LLVMExecutionEngineRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMDisposeExecutionEngine".}
|
|
proc LLVMRunStaticConstructors*(EE: LLVMExecutionEngineRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMRunStaticConstructors".}
|
|
proc LLVMRunStaticDestructors*(EE: LLVMExecutionEngineRef){.cdecl,
|
|
dynlib: libname, importc: "LLVMRunStaticDestructors".}
|
|
# Const before declarator ignored
|
|
# Const before declarator ignored
|
|
proc LLVMRunFunctionAsMain*(EE: LLVMExecutionEngineRef, F: LLVMValueRef,
|
|
ArgC: dword, ArgV: Ppchar, EnvP: Ppchar): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMRunFunctionAsMain".}
|
|
proc LLVMRunFunction*(EE: LLVMExecutionEngineRef, F: LLVMValueRef,
|
|
NumArgs: dword, Args: pLLVMGenericValueRef): LLVMGenericValueRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMRunFunction".}
|
|
proc LLVMFreeMachineCodeForFunction*(EE: LLVMExecutionEngineRef, F: LLVMValueRef){.
|
|
cdecl, dynlib: libname, importc: "LLVMFreeMachineCodeForFunction".}
|
|
proc LLVMAddModuleProvider*(EE: LLVMExecutionEngineRef,
|
|
MP: LLVMModuleProviderRef){.cdecl, dynlib: libname,
|
|
importc: "LLVMAddModuleProvider".}
|
|
proc LLVMRemoveModuleProvider*(EE: LLVMExecutionEngineRef,
|
|
MP: LLVMModuleProviderRef,
|
|
OutMod: pLLVMModuleRef, OutError: Ppchar): int32{.
|
|
cdecl, dynlib: libname, importc: "LLVMRemoveModuleProvider".}
|
|
proc LLVMFindFunction*(EE: LLVMExecutionEngineRef, Name: cstring,
|
|
OutFn: pLLVMValueRef): int32{.cdecl, dynlib: libname,
|
|
importc: "LLVMFindFunction".}
|
|
proc LLVMGetExecutionEngineTargetData*(EE: LLVMExecutionEngineRef): LLVMTargetDataRef{.
|
|
cdecl, dynlib: libname, importc: "LLVMGetExecutionEngineTargetData".}
|
|
proc LLVMAddGlobalMapping*(EE: LLVMExecutionEngineRef, Global: LLVMValueRef,
|
|
theAddr: pointer){.cdecl, dynlib: libname,
|
|
importc: "LLVMAddGlobalMapping".}
|
|
proc LLVMGetPointerToGlobal*(EE: LLVMExecutionEngineRef, Global: LLVMValueRef): pointer{.
|
|
cdecl, dynlib: libname, importc: "LLVMGetPointerToGlobal".}
|
|
# LinkTimeOptimizer.h
|
|
#/ This provides a dummy type for pointers to the LTO object.
|
|
type
|
|
llvm_lto_t* = pointer #/ This provides a C-visible enumerator to manage status codes.
|
|
#/ This should map exactly onto the C++ enumerator LTOStatus.
|
|
# Added C-specific error codes
|
|
llvm_lto_status* = enum
|
|
LLVM_LTO_UNKNOWN, LLVM_LTO_OPT_SUCCESS, LLVM_LTO_READ_SUCCESS,
|
|
LLVM_LTO_READ_FAILURE, LLVM_LTO_WRITE_FAILURE, LLVM_LTO_NO_TARGET,
|
|
LLVM_LTO_NO_WORK, LLVM_LTO_MODULE_MERGE_FAILURE, LLVM_LTO_ASM_FAILURE,
|
|
LLVM_LTO_NULL_OBJECT
|
|
llvm_lto_status_t* = llvm_lto_status #/ This provides C interface to initialize link time optimizer. This allows
|
|
#/ linker to use dlopen() interface to dynamically load LinkTimeOptimizer.
|
|
#/ extern "C" helps, because dlopen() interface uses name to find the symbol.
|
|
|
|
proc llvm_create_optimizer*(): llvm_lto_t{.cdecl, dynlib: libname,
|
|
importc: "llvm_create_optimizer".}
|
|
proc llvm_destroy_optimizer*(lto: llvm_lto_t){.cdecl, dynlib: libname,
|
|
importc: "llvm_destroy_optimizer".}
|
|
proc llvm_read_object_file*(lto: llvm_lto_t, input_filename: cstring): llvm_lto_status_t{.
|
|
cdecl, dynlib: libname, importc: "llvm_read_object_file".}
|
|
proc llvm_optimize_modules*(lto: llvm_lto_t, output_filename: cstring): llvm_lto_status_t{.
|
|
cdecl, dynlib: libname, importc: "llvm_optimize_modules".}
|
|
# lto.h
|
|
const
|
|
LTO_API_VERSION* = 3 # log2 of alignment
|
|
|
|
type
|
|
lto_symbol_attributes* = enum
|
|
LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F,
|
|
LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,
|
|
LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0,
|
|
LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,
|
|
LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080,
|
|
LTO_SYMBOL_DEFINITION_MASK = 0x00000700,
|
|
LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100,
|
|
LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,
|
|
LTO_SYMBOL_DEFINITION_WEAK = 0x00000300,
|
|
LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400,
|
|
LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,
|
|
LTO_SYMBOL_SCOPE_MASK = 0x00003800, LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800,
|
|
LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000,
|
|
LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,
|
|
LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800
|
|
lto_debug_model* = enum
|
|
LTO_DEBUG_MODEL_NONE = 0, LTO_DEBUG_MODEL_DWARF = 1
|
|
lto_codegen_model* = enum #* opaque reference to a loaded object module
|
|
LTO_CODEGEN_PIC_MODEL_STATIC = 0, LTO_CODEGEN_PIC_MODEL_DYNAMIC = 1,
|
|
LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC = 2
|
|
lto_module_t* = LTOModule #* opaque reference to a code generator
|
|
lto_code_gen_t* = LTOCodeGenerator #*
|
|
# * Returns a printable string.
|
|
#
|
|
|
|
proc lto_get_version*(): cstring{.cdecl, dynlib: libname,
|
|
importc: "lto_get_version".}
|
|
#*
|
|
# * Returns the last error string or NULL if last operation was sucessful.
|
|
#
|
|
proc lto_get_error_message*(): cstring{.cdecl, dynlib: libname,
|
|
importc: "lto_get_error_message".}
|
|
#*
|
|
# * Checks if a file is a loadable object file.
|
|
#
|
|
proc lto_module_is_object_file*(path: cstring): bool{.cdecl, dynlib: libname,
|
|
importc: "lto_module_is_object_file".}
|
|
#*
|
|
# * Checks if a file is a loadable object compiled for requested target.
|
|
#
|
|
proc lto_module_is_object_file_for_target*(path: cstring,
|
|
target_triple_prefix: cstring): bool{.cdecl, dynlib: libname,
|
|
importc: "lto_module_is_object_file_for_target".}
|
|
#*
|
|
# * Checks if a buffer is a loadable object file.
|
|
#
|
|
proc lto_module_is_object_file_in_memory*(mem: pointer, len: size_t): bool{.
|
|
cdecl, dynlib: libname, importc: "lto_module_is_object_file_in_memory".}
|
|
#*
|
|
# * Checks if a buffer is a loadable object compiled for requested target.
|
|
#
|
|
proc lto_module_is_object_file_in_memory_for_target*(mem: pointer, len: size_t,
|
|
target_triple_prefix: cstring): bool{.cdecl, dynlib: libname,
|
|
importc: "lto_module_is_object_file_in_memory_for_target".}
|
|
#*
|
|
# * Loads an object file from disk.
|
|
# * Returns NULL on error (check lto_get_error_message() for details).
|
|
#
|
|
proc lto_module_create*(path: cstring): lto_module_t{.cdecl, dynlib: libname,
|
|
importc: "lto_module_create".}
|
|
#*
|
|
# * Loads an object file from memory.
|
|
# * Returns NULL on error (check lto_get_error_message() for details).
|
|
#
|
|
proc lto_module_create_from_memory*(mem: pointer, len: size_t): lto_module_t{.
|
|
cdecl, dynlib: libname, importc: "lto_module_create_from_memory".}
|
|
#*
|
|
# * Frees all memory internally allocated by the module.
|
|
# * Upon return the lto_module_t is no longer valid.
|
|
#
|
|
proc lto_module_dispose*(module: lto_module_t){.cdecl, dynlib: libname,
|
|
importc: "lto_module_dispose".}
|
|
#*
|
|
# * Returns triple string which the object module was compiled under.
|
|
#
|
|
proc lto_module_get_target_triple*(module: lto_module_t): cstring{.cdecl,
|
|
dynlib: libname, importc: "lto_module_get_target_triple".}
|
|
#*
|
|
# * Returns the number of symbols in the object module.
|
|
#
|
|
proc lto_module_get_num_symbols*(module: lto_module_t): dword{.cdecl,
|
|
dynlib: libname, importc: "lto_module_get_num_symbols".}
|
|
#*
|
|
# * Returns the name of the ith symbol in the object module.
|
|
#
|
|
proc lto_module_get_symbol_name*(module: lto_module_t, index: dword): cstring{.
|
|
cdecl, dynlib: libname, importc: "lto_module_get_symbol_name".}
|
|
#*
|
|
# * Returns the attributes of the ith symbol in the object module.
|
|
#
|
|
proc lto_module_get_symbol_attribute*(module: lto_module_t, index: dword): lto_symbol_attributes{.
|
|
cdecl, dynlib: libname, importc: "lto_module_get_symbol_attribute".}
|
|
#*
|
|
# * Instantiates a code generator.
|
|
# * Returns NULL on error (check lto_get_error_message() for details).
|
|
#
|
|
proc lto_codegen_create*(): lto_code_gen_t{.cdecl, dynlib: libname,
|
|
importc: "lto_codegen_create".}
|
|
#*
|
|
# * Frees all code generator and all memory it internally allocated.
|
|
# * Upon return the lto_code_gen_t is no longer valid.
|
|
#
|
|
proc lto_codegen_dispose*(para1: lto_code_gen_t){.cdecl, dynlib: libname,
|
|
importc: "lto_codegen_dispose".}
|
|
#*
|
|
# * Add an object module to the set of modules for which code will be generated.
|
|
# * Returns true on error (check lto_get_error_message() for details).
|
|
#
|
|
proc lto_codegen_add_module*(cg: lto_code_gen_t, module: lto_module_t): bool{.
|
|
cdecl, dynlib: libname, importc: "lto_codegen_add_module".}
|
|
#*
|
|
# * Sets if debug info should be generated.
|
|
# * Returns true on error (check lto_get_error_message() for details).
|
|
#
|
|
proc lto_codegen_set_debug_model*(cg: lto_code_gen_t, para2: lto_debug_model): bool{.
|
|
cdecl, dynlib: libname, importc: "lto_codegen_set_debug_model".}
|
|
#*
|
|
# * Sets which PIC code model to generated.
|
|
# * Returns true on error (check lto_get_error_message() for details).
|
|
#
|
|
proc lto_codegen_set_pic_model*(cg: lto_code_gen_t, para2: lto_codegen_model): bool{.
|
|
cdecl, dynlib: libname, importc: "lto_codegen_set_pic_model".}
|
|
#*
|
|
# * Sets the location of the "gcc" to run. If not set, libLTO will search for
|
|
# * "gcc" on the path.
|
|
#
|
|
proc lto_codegen_set_gcc_path*(cg: lto_code_gen_t, path: cstring){.cdecl,
|
|
dynlib: libname, importc: "lto_codegen_set_gcc_path".}
|
|
#*
|
|
# * Sets the location of the assembler tool to run. If not set, libLTO
|
|
# * will use gcc to invoke the assembler.
|
|
#
|
|
proc lto_codegen_set_assembler_path*(cg: lto_code_gen_t, path: cstring){.cdecl,
|
|
dynlib: libname, importc: "lto_codegen_set_assembler_path".}
|
|
#*
|
|
# * Adds to a list of all global symbols that must exist in the final
|
|
# * generated code. If a function is not listed, it might be
|
|
# * inlined into every usage and optimized away.
|
|
#
|
|
proc lto_codegen_add_must_preserve_symbol*(cg: lto_code_gen_t, symbol: cstring){.
|
|
cdecl, dynlib: libname, importc: "lto_codegen_add_must_preserve_symbol".}
|
|
#*
|
|
# * Writes a new object file at the specified path that contains the
|
|
# * merged contents of all modules added so far.
|
|
# * Returns true on error (check lto_get_error_message() for details).
|
|
#
|
|
proc lto_codegen_write_merged_modules*(cg: lto_code_gen_t, path: cstring): bool{.
|
|
cdecl, dynlib: libname, importc: "lto_codegen_write_merged_modules".}
|
|
#*
|
|
# * Generates code for all added modules into one native object file.
|
|
# * On sucess returns a pointer to a generated mach-o/ELF buffer and
|
|
# * length set to the buffer size. The buffer is owned by the
|
|
# * lto_code_gen_t and will be freed when lto_codegen_dispose()
|
|
# * is called, or lto_codegen_compile() is called again.
|
|
# * On failure, returns NULL (check lto_get_error_message() for details).
|
|
#
|
|
proc lto_codegen_compile*(cg: lto_code_gen_t, len: var int): pointer{.cdecl,
|
|
dynlib: libname, importc: "lto_codegen_compile".}
|
|
#*
|
|
# * Sets options to help debug codegen bugs.
|
|
#
|
|
proc lto_codegen_debug_options*(cg: lto_code_gen_t, para2: cstring){.cdecl,
|
|
dynlib: libname, importc: "lto_codegen_debug_options".}
|
|
# implementation
|