summary refs log tree commit diff stats
path: root/llvm/llvm.nim
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/llvm.nim')
-rwxr-xr-xllvm/llvm.nim1452
1 files changed, 0 insertions, 1452 deletions
diff --git a/llvm/llvm.nim b/llvm/llvm.nim
deleted file mode 100755
index d010457f8..000000000
--- a/llvm/llvm.nim
+++ /dev/null
@@ -1,1452 +0,0 @@
-const 
-  libname* = "llvm.dll"               #Setup as you need
-
-type
-  OpaqueContext {.pure.} = object
-  OpaqueModule {.pure.} = object
-  TOpaqueType {.pure.} = object
-  OpaqueTypeHandle {.pure.} = object
-  OpaqueValue {.pure.} = object
-  OpaqueBasicBlock {.pure.} = object
-  OpaqueBuilder {.pure.} = object
-  OpaqueModuleProvider {.pure.} = object
-  OpaqueMemoryBuffer {.pure.} = object
-  OpaquePassManager {.pure.} = object
-  OpaqueUseIterator {.pure.} = object
-
-  ContextRef* = OpaqueContext
-  ModuleRef* = OpaqueModule  
-  TypeRef* = TOpaqueType  
-  TypeHandleRef* = OpaqueTypeHandle
-  ValueRef* = OpaqueValue
-  BasicBlockRef* = OpaqueBasicBlock
-  BuilderRef* = OpaqueBuilder 
-  ModuleProviderRef* = OpaqueModuleProvider   
-  MemoryBufferRef* = OpaqueMemoryBuffer   
-  PassManagerRef* = OpaquePassManager 
-  UseIteratorRef* = OpaqueUseIterator
-  Attribute* = enum 
-    ZExtAttribute = 1 shl 0, SExtAttribute = 1 shl 1, 
-    NoReturnAttribute = 1 shl 2, InRegAttribute = 1 shl 3, 
-    StructRetAttribute = 1 shl 4, NoUnwindAttribute = 1 shl 5, 
-    NoAliasAttribute = 1 shl 6, ByValAttribute = 1 shl 7, 
-    NestAttribute = 1 shl 8, ReadNoneAttribute = 1 shl 9, 
-    ReadOnlyAttribute = 1 shl 10, NoInlineAttribute = 1 shl 11, 
-    AlwaysInlineAttribute = 1 shl 12, OptimizeForSizeAttribute = 1 shl 13, 
-    StackProtectAttribute = 1 shl 14, StackProtectReqAttribute = 1 shl 15, 
-    NoCaptureAttribute = 1 shl 21, NoRedZoneAttribute = 1 shl 22, 
-    NoImplicitFloatAttribute = 1 shl 23, NakedAttribute = 1 shl 24, 
-    InlineHintAttribute = 1 shl 25
-  Opcode* = enum
-    opcRet = 1, opcBr = 2, opcSwitch = 3, opcInvoke = 4, opcUnwind = 5,
-    opcUnreachable = 6, 
-    opcAdd = 7, opcFAdd = 8, opcSub = 9, opcFSub = 10, opcMul = 11,
-    opcFMul = 12, opcUDiv = 13, 
-    opcSDiv = 14, opcFDiv = 15, opcURem = 16, opcSRem = 17, opcFRem = 18,
-    opcShl = 19,
-    opcLShr = 20, opcAShr = 21, opcAnd = 22, opcOr = 23, opcXor = 24,
-    opcMalloc = 25, opcFree = 26, opcAlloca = 27, 
-    opcLoad = 28, opcStore = 29,
-    opcGetElementPtr = 30, opcTrunk = 31, opcZExt = 32, opcSExt = 33, 
-    opcFPToUI = 34, opcFPToSI = 35, opcUIToFP = 36, opcSIToFP = 37,
-    opcFPTrunc = 38, opcFPExt = 39, opcPtrToInt = 40, opcIntToPtr = 41,
-    opcBitCast = 42, opcICmp = 43, 
-    opcFCmp = 44, opcPHI = 45, opcCall = 46, opcSelect = 47, opcVAArg = 50, 
-    opcExtractElement = 51, opcInsertElement = 52, opcShuffleVector = 53, 
-    opcExtractValue = 54, opcInsertValue = 55
-  TypeKind* = enum 
-    VoidTypeKind, FloatTypeKind, DoubleTypeKind, X86_FP80TypeKind, 
-    FP128TypeKind, PPC_FP128TypeKind, LabelTypeKind, IntegerTypeKind, 
-    FunctionTypeKind, StructTypeKind, ArrayTypeKind, PointerTypeKind, 
-    OpaqueTypeKind, VectorTypeKind, MetadataTypeKind
-  TLinkage* = enum
-    ExternalLinkage,            ## Externally visible function 
-    AvailableExternallyLinkage, ## Keep one copy of function when linking (inline) 
-    LinkOnceAnyLinkage, ## Same, but only replaced by something equivalent.
-    LinkOnceODRLinkage, ## Keep one copy of function when linking (weak)
-    WeakAnyLinkage,     ## Same, but only replaced by something equivalent.
-    WeakODRLinkage,     ## Special purpose, only applies to global arrays
-    AppendingLinkage,   ## Rename collisions when linking (static functions)
-    InternalLinkage,    ## 
-    PrivateLinkage,     ## Like Internal, but omit from symbol table
-    DLLImportLinkage,   ## Function to be imported from DLL
-    DLLExportLinkage,   ## Function to be accessible from DLL 
-    ExternalWeakLinkage, ## ExternalWeak linkage description 
-    GhostLinkage,       ## Stand-in functions for streaming fns from bitcode 
-    CommonLinkage,      ## Tentative definitions  
-    LinkerPrivateLinkage ## Like Private, but linker removes.
-  TVisibility* = enum
-    DefaultVisibility,
-    HiddenVisibility,
-    ProtectedVisibility
-  TCallConv* = enum          
-    CCallConv = 0, FastCallConv = 8, ColdCallConv = 9, X86StdcallCallConv = 64, 
-    X86FastcallCallConv = 65
-  IntPredicate* = enum       
-    IntEQ = 32, IntNE, IntUGT, IntUGE, IntULT, IntULE, IntSGT, IntSGE, IntSLT, 
-    IntSLE
-  RealPredicate* = enum       
-    RealPredicateFalse, RealOEQ, RealOGT, RealOGE, RealOLT, RealOLE, RealONE, 
-    RealORD, RealUNO, RealUEQ, RealUGT, RealUGE, RealULT, RealULE, RealUNE, 
-    RealPredicateTrue
-
-#===-- Error handling ----------------------------------------------------=== 
-
-proc DisposeMessage*(Message: cstring){.cdecl, dynlib: libname, 
-                                        importc: "LLVMDisposeMessage".}
-  
-#===-- Modules -----------------------------------------------------------=== 
-# Create and destroy contexts.  
-proc ContextCreate*(): ContextRef{.cdecl, dynlib: libname, 
-                                   importc: "LLVMContextCreate".}
-proc GetGlobalContext*(): ContextRef{.cdecl, dynlib: libname, 
-                                      importc: "LLVMGetGlobalContext".}
-proc ContextDispose*(C: ContextRef){.cdecl, dynlib: libname, 
-                                     importc: "LLVMContextDispose".}
-  # Create and destroy modules.  
-  # See llvm::Module::Module.  
-proc ModuleCreateWithName*(ModuleID: cstring): ModuleRef{.cdecl, 
-    dynlib: libname, importc: "LLVMModuleCreateWithName".}
-proc ModuleCreateWithNameInContext*(ModuleID: cstring, C: ContextRef): ModuleRef{.
-    cdecl, dynlib: libname, importc: "LLVMModuleCreateWithNameInContext".}
-  # See llvm::Module::~Module.  
-proc DisposeModule*(M: ModuleRef){.cdecl, dynlib: libname, 
-                                   importc: "LLVMDisposeModule".}
-  # Data layout. See Module::getDataLayout.  
-proc GetDataLayout*(M: ModuleRef): cstring{.cdecl, dynlib: libname, 
-    importc: "LLVMGetDataLayout".}
-proc SetDataLayout*(M: ModuleRef, Triple: cstring){.cdecl, dynlib: libname, 
-    importc: "LLVMSetDataLayout".}
-  # Target triple. See Module::getTargetTriple.  
-proc GetTarget*(M: ModuleRef): cstring{.cdecl, dynlib: libname, 
-                                        importc: "LLVMGetTarget".}
-proc SetTarget*(M: ModuleRef, Triple: cstring){.cdecl, dynlib: libname, 
-    importc: "LLVMSetTarget".}
-  # See Module::addTypeName.  
-proc AddTypeName*(M: ModuleRef, Name: cstring, Ty: TypeRef): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMAddTypeName".}
-proc DeleteTypeName*(M: ModuleRef, Name: cstring){.cdecl, dynlib: libname, 
-    importc: "LLVMDeleteTypeName".}
-proc GetTypeByName*(M: ModuleRef, Name: cstring): TypeRef{.cdecl, 
-    dynlib: libname, importc: "LLVMGetTypeByName".}
-  # See Module::dump.  
-proc DumpModule*(M: ModuleRef){.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 GetTypeKind*(Ty: TypeRef): TypeKind{.cdecl, dynlib: libname, 
-    importc: "LLVMGetTypeKind".}
-  # See llvm::LLVMType::getContext.  
-proc GetTypeContext*(Ty: TypeRef): ContextRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetTypeContext".}
-  # Operations on integer types  
-proc Int1TypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMInt1TypeInContext".}
-proc Int8TypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMInt8TypeInContext".}
-proc Int16TypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMInt16TypeInContext".}
-proc Int32TypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMInt32TypeInContext".}
-proc Int64TypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMInt64TypeInContext".}
-proc IntTypeInContext*(C: ContextRef, NumBits: int32): TypeRef{.cdecl, 
-    dynlib: libname, importc: "LLVMIntTypeInContext".}
-proc Int1Type*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMInt1Type".}
-proc Int8Type*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMInt8Type".}
-proc Int16Type*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMInt16Type".}
-proc Int32Type*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMInt32Type".}
-proc Int64Type*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMInt64Type".}
-proc IntType*(NumBits: int32): TypeRef{.cdecl, dynlib: libname, 
-                                        importc: "LLVMIntType".}
-proc GetIntTypeWidth*(IntegerTy: TypeRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMGetIntTypeWidth".}
-  # Operations on real types  
-proc FloatTypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMFloatTypeInContext".}
-proc DoubleTypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMDoubleTypeInContext".}
-proc X86FP80TypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMX86FP80TypeInContext".}
-proc FP128TypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMFP128TypeInContext".}
-proc PPCFP128TypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMPPCFP128TypeInContext".}
-proc FloatType*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMFloatType".}
-proc DoubleType*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMDoubleType".}
-proc X86FP80Type*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMX86FP80Type".}
-proc FP128Type*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMFP128Type".}
-proc PPCFP128Type*(): TypeRef{.cdecl, dynlib: libname, 
-                               importc: "LLVMPPCFP128Type".}
-  # Operations on function types  
-proc FunctionType*(ReturnType: TypeRef, ParamTypes: ptr TypeRef,
-                   ParamCount: int32, IsVarArg: int32): TypeRef {.
-    cdecl, dynlib: libname, importc: "LLVMFunctionType".}
-proc IsFunctionVarArg*(FunctionTy: TypeRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMIsFunctionVarArg".}
-proc GetReturnType*(FunctionTy: TypeRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetReturnType".}
-proc CountParamTypes*(FunctionTy: TypeRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMCountParamTypes".}
-proc GetParamTypes*(FunctionTy: TypeRef, Dest: ptr TypeRef){.cdecl, 
-    dynlib: libname, importc: "LLVMGetParamTypes".}
-  # Operations on struct types  
-proc StructTypeInContext*(C: ContextRef, ElementTypes: ptr TypeRef, 
-                          ElementCount: int32, isPacked: int32): TypeRef{.cdecl, 
-    dynlib: libname, importc: "LLVMStructTypeInContext".}
-proc StructType*(ElementTypes: ptr TypeRef, ElementCount: int32, isPacked: int32): TypeRef{.
-    cdecl, dynlib: libname, importc: "LLVMStructType".}
-proc CountStructElementTypes*(StructTy: TypeRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMCountStructElementTypes".}
-proc GetStructElementTypes*(StructTy: TypeRef, Dest: ptr TypeRef){.cdecl, 
-    dynlib: libname, importc: "LLVMGetStructElementTypes".}
-proc IsPackedStruct*(StructTy: TypeRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMIsPackedStruct".}
-  # Operations on array, pointer, and vector types (sequence types)  
-proc ArrayType*(ElementType: TypeRef, ElementCount: int32): TypeRef{.cdecl, 
-    dynlib: libname, importc: "LLVMArrayType".}
-proc PointerType*(ElementType: TypeRef, AddressSpace: int32): TypeRef{.cdecl, 
-    dynlib: libname, importc: "LLVMPointerType".}
-proc VectorType*(ElementType: TypeRef, ElementCount: int32): TypeRef{.cdecl, 
-    dynlib: libname, importc: "LLVMVectorType".}
-proc GetElementType*(Ty: TypeRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetElementType".}
-proc GetArrayLength*(ArrayTy: TypeRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMGetArrayLength".}
-proc GetPointerAddressSpace*(PointerTy: TypeRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMGetPointerAddressSpace".}
-proc GetVectorSize*(VectorTy: TypeRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMGetVectorSize".}
-  # Operations on other types  
-proc VoidTypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMVoidTypeInContext".}
-proc LabelTypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMLabelTypeInContext".}
-proc OpaqueTypeInContext*(C: ContextRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMOpaqueTypeInContext".}
-proc VoidType*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMVoidType".}
-proc LabelType*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMLabelType".}
-proc OpaqueType*(): TypeRef{.cdecl, dynlib: libname, importc: "LLVMOpaqueType".}
-  # Operations on type handles  
-proc CreateTypeHandle*(PotentiallyAbstractTy: TypeRef): TypeHandleRef{.cdecl, 
-    dynlib: libname, importc: "LLVMCreateTypeHandle".}
-proc RefineType*(AbstractTy: TypeRef, ConcreteTy: TypeRef){.cdecl, 
-    dynlib: libname, importc: "LLVMRefineType".}
-proc ResolveTypeHandle*(TypeHandle: TypeHandleRef): TypeRef{.cdecl, 
-    dynlib: libname, importc: "LLVMResolveTypeHandle".}
-proc DisposeTypeHandle*(TypeHandle: TypeHandleRef){.cdecl, dynlib: libname, 
-    importc: "LLVMDisposeTypeHandle".}
-  # Operations on all values  
-proc TypeOf*(Val: ValueRef): TypeRef{.cdecl, dynlib: libname, 
-                                      importc: "LLVMTypeOf".}
-proc GetValueName*(Val: ValueRef): cstring{.cdecl, dynlib: libname, 
-    importc: "LLVMGetValueName".}
-proc SetValueName*(Val: ValueRef, Name: cstring){.cdecl, dynlib: libname, 
-    importc: "LLVMSetValueName".}
-proc DumpValue*(Val: ValueRef){.cdecl, dynlib: libname, importc: "LLVMDumpValue".}
-proc ReplaceAllUsesWith*(OldVal: ValueRef, NewVal: ValueRef){.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 IsAArgument*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAArgument".}
-proc IsABasicBlock*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsABasicBlock".}
-proc IsAInlineAsm*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAInlineAsm".}
-proc IsAUser*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-                                        importc: "LLVMIsAUser".}
-proc IsAConstant*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstant".}
-proc IsAConstantAggregateZero*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstantAggregateZero".}
-proc IsAConstantArray*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstantArray".}
-proc IsAConstantExpr*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstantExpr".}
-proc IsAConstantFP*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstantFP".}
-proc IsAConstantInt*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstantInt".}
-proc IsAConstantPointerNull*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstantPointerNull".}
-proc IsAConstantStruct*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstantStruct".}
-proc IsAConstantVector*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAConstantVector".}
-proc IsAGlobalValue*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAGlobalValue".}
-proc IsAFunction*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAFunction".}
-proc IsAGlobalAlias*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAGlobalAlias".}
-proc IsAGlobalVariable*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAGlobalVariable".}
-proc IsAUndefValue*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAUndefValue".}
-proc IsAInstruction*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAInstruction".}
-proc IsABinaryOperator*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsABinaryOperator".}
-proc IsACallInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsACallInst".}
-proc IsAIntrinsicInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAIntrinsicInst".}
-proc IsADbgInfoIntrinsic*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsADbgInfoIntrinsic".}
-proc IsADbgDeclareInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsADbgDeclareInst".}
-proc IsADbgFuncStartInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsADbgFuncStartInst".}
-proc IsADbgRegionEndInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsADbgRegionEndInst".}
-proc IsADbgRegionStartInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsADbgRegionStartInst".}
-proc IsADbgStopPointInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsADbgStopPointInst".}
-proc IsAEHSelectorInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAEHSelectorInst".}
-proc IsAMemIntrinsic*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAMemIntrinsic".}
-proc IsAMemCpyInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAMemCpyInst".}
-proc IsAMemMoveInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAMemMoveInst".}
-proc IsAMemSetInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAMemSetInst".}
-proc IsACmpInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsACmpInst".}
-proc IsAFCmpInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAFCmpInst".}
-proc IsAICmpInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAICmpInst".}
-proc IsAExtractElementInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAExtractElementInst".}
-proc IsAGetElementPtrInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAGetElementPtrInst".}
-proc IsAInsertElementInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAInsertElementInst".}
-proc IsAInsertValueInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAInsertValueInst".}
-proc IsAPHINode*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAPHINode".}
-proc IsASelectInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsASelectInst".}
-proc IsAShuffleVectorInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAShuffleVectorInst".}
-proc IsAStoreInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAStoreInst".}
-proc IsATerminatorInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsATerminatorInst".}
-proc IsABranchInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsABranchInst".}
-proc IsAInvokeInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAInvokeInst".}
-proc IsAReturnInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAReturnInst".}
-proc IsASwitchInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsASwitchInst".}
-proc IsAUnreachableInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAUnreachableInst".}
-proc IsAUnwindInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAUnwindInst".}
-proc IsAUnaryInstruction*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAUnaryInstruction".}
-proc IsAAllocationInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAAllocationInst".}
-proc IsAAllocaInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAAllocaInst".}
-proc IsACastInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsACastInst".}
-proc IsABitCastInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsABitCastInst".}
-proc IsAFPExtInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAFPExtInst".}
-proc IsAFPToSIInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAFPToSIInst".}
-proc IsAFPToUIInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAFPToUIInst".}
-proc IsAFPTruncInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAFPTruncInst".}
-proc IsAIntToPtrInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAIntToPtrInst".}
-proc IsAPtrToIntInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAPtrToIntInst".}
-proc IsASExtInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsASExtInst".}
-proc IsASIToFPInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsASIToFPInst".}
-proc IsATruncInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsATruncInst".}
-proc IsAUIToFPInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAUIToFPInst".}
-proc IsAZExtInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAZExtInst".}
-proc IsAExtractValueInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAExtractValueInst".}
-proc IsAFreeInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAFreeInst".}
-proc IsALoadInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsALoadInst".}
-proc IsAVAArgInst*(Val: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIsAVAArgInst".}
-  # Operations on Uses  
-proc GetFirstUse*(Val: ValueRef): UseIteratorRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetFirstUse".}
-proc GetNextUse*(U: UseIteratorRef): UseIteratorRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetNextUse".}
-proc GetUser*(U: UseIteratorRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetUser".}
-proc GetUsedValue*(U: UseIteratorRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetUsedValue".}
-  # Operations on Users  
-proc GetOperand*(Val: ValueRef, Index: int32): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetOperand".}
-  # Operations on constants of any type  
-proc ConstNull*(Ty: TypeRef): ValueRef{.cdecl, dynlib: libname, 
-                                        importc: "LLVMConstNull".}
-  # all zeroes  
-proc ConstAllOnes*(Ty: TypeRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstAllOnes".}
-  # only for int/vector  
-proc GetUndef*(Ty: TypeRef): ValueRef{.cdecl, dynlib: libname, 
-                                       importc: "LLVMGetUndef".}
-proc IsConstant*(Val: ValueRef): int32{.cdecl, dynlib: libname, 
-                                        importc: "LLVMIsConstant".}
-proc IsNull*(Val: ValueRef): int32{.cdecl, dynlib: libname, 
-                                    importc: "LLVMIsNull".}
-proc IsUndef*(Val: ValueRef): int32{.cdecl, dynlib: libname, 
-                                     importc: "LLVMIsUndef".}
-proc ConstPointerNull*(Ty: TypeRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstPointerNull".}
-  # Operations on scalar constants  
-proc ConstInt*(IntTy: TypeRef, N: int64, SignExtend: int32): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstInt".}
-proc ConstIntOfString*(IntTy: TypeRef, Text: cstring, Radix: byte): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstIntOfString".}
-proc ConstIntOfStringAndSize*(IntTy: TypeRef, Text: cstring, SLen: int32, 
-                              Radix: byte): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstIntOfStringAndSize".}
-proc ConstReal*(RealTy: TypeRef, N: float64): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstReal".}
-proc ConstRealOfString*(RealTy: TypeRef, Text: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstRealOfString".}
-proc ConstRealOfStringAndSize*(RealTy: TypeRef, Text: cstring, SLen: int32): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstRealOfStringAndSize".}
-proc ConstIntGetZExtValue*(ConstantVal: ValueRef): int64{.cdecl, 
-    dynlib: libname, importc: "LLVMConstIntGetZExtValue".}
-proc ConstIntGetSExtValue*(ConstantVal: ValueRef): int64{.cdecl, 
-    dynlib: libname, importc: "LLVMConstIntGetSExtValue".}
-  # Operations on composite constants  
-proc ConstStringInContext*(C: ContextRef, Str: cstring, len: int32, 
-                           DontNullTerminate: int32): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstStringInContext".}
-proc ConstStructInContext*(C: ContextRef, ConstantVals: ptr ValueRef,
-                           Count: int32, 
-                           isPacked: int32): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstStructInContext".}
-proc ConstString*(Str: cstring, len: int32, DontNullTerminate: int32): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstString".}
-proc ConstArray*(ElementTy: TypeRef, ConstantVals: ptr ValueRef, len: int32): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstArray".}
-proc ConstStruct*(ConstantVals: ptr ValueRef, Count: int32, isPacked: int32): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstStruct".}
-proc ConstVector*(ScalarConstantVals: ptr ValueRef, Size: int32): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstVector".}
-  # Constant expressions  
-proc GetConstOpcode*(ConstantVal: ValueRef): Opcode{.cdecl, dynlib: libname, 
-    importc: "LLVMGetConstOpcode".}
-proc AlignOf*(Ty: TypeRef): ValueRef{.cdecl, dynlib: libname, 
-                                      importc: "LLVMAlignOf".}
-proc SizeOf*(Ty: TypeRef): ValueRef{.cdecl, dynlib: libname, 
-                                     importc: "LLVMSizeOf".}
-proc ConstNeg*(ConstantVal: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstNeg".}
-proc ConstFNeg*(ConstantVal: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstFNeg".}
-proc ConstNot*(ConstantVal: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstNot".}
-proc ConstAdd*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstAdd".}
-proc ConstNSWAdd*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstNSWAdd".}
-proc ConstFAdd*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFAdd".}
-proc ConstSub*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstSub".}
-proc ConstFSub*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFSub".}
-proc ConstMul*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstMul".}
-proc ConstFMul*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFMul".}
-proc ConstUDiv*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstUDiv".}
-proc ConstSDiv*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstSDiv".}
-proc ConstExactSDiv*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstExactSDiv".}
-proc ConstFDiv*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFDiv".}
-proc ConstURem*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstURem".}
-proc ConstSRem*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstSRem".}
-proc ConstFRem*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFRem".}
-proc ConstAnd*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstAnd".}
-proc ConstOr*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstOr".}
-proc ConstXor*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstXor".}
-proc ConstICmp*(Predicate: IntPredicate, LHSConstant: ValueRef, 
-                RHSConstant: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstICmp".}
-proc ConstFCmp*(Predicate: RealPredicate, LHSConstant: ValueRef, 
-                RHSConstant: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstFCmp".}
-proc ConstShl*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstShl".}
-proc ConstLShr*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstLShr".}
-proc ConstAShr*(LHSConstant: ValueRef, RHSConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstAShr".}
-proc ConstGEP*(ConstantVal: ValueRef, ConstantIndices: ptr ValueRef, 
-               NumIndices: int32): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstGEP".}
-proc ConstInBoundsGEP*(ConstantVal: ValueRef, ConstantIndices: ptr ValueRef, 
-                       NumIndices: int32): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstInBoundsGEP".}
-proc ConstTrunc*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstTrunc".}
-proc ConstSExt*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstSExt".}
-proc ConstZExt*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstZExt".}
-proc ConstFPTrunc*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFPTrunc".}
-proc ConstFPExt*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFPExt".}
-proc ConstUIToFP*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstUIToFP".}
-proc ConstSIToFP*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstSIToFP".}
-proc ConstFPToUI*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFPToUI".}
-proc ConstFPToSI*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFPToSI".}
-proc ConstPtrToInt*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstPtrToInt".}
-proc ConstIntToPtr*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstIntToPtr".}
-proc ConstBitCast*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstBitCast".}
-proc ConstZExtOrBitCast*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstZExtOrBitCast".}
-proc ConstSExtOrBitCast*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstSExtOrBitCast".}
-proc ConstTruncOrBitCast*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstTruncOrBitCast".}
-proc ConstPointerCast*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstPointerCast".}
-proc ConstIntCast*(ConstantVal: ValueRef, ToType: TypeRef, isSigned: int32): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstIntCast".}
-proc ConstFPCast*(ConstantVal: ValueRef, ToType: TypeRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstFPCast".}
-proc ConstSelect*(ConstantCondition: ValueRef, ConstantIfTrue: ValueRef, 
-                  ConstantIfFalse: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstSelect".}
-proc ConstExtractElement*(VectorConstant: ValueRef, IndexConstant: ValueRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstExtractElement".}
-proc ConstInsertElement*(VectorConstant: ValueRef, 
-                         ElementValueConstant: ValueRef, IndexConstant: ValueRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstInsertElement".}
-proc ConstShuffleVector*(VectorAConstant: ValueRef, VectorBConstant: ValueRef, 
-                         MaskConstant: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstShuffleVector".}
-proc ConstExtractValue*(AggConstant: ValueRef, IdxList: ptr int32, NumIdx: int32): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMConstExtractValue".}
-proc ConstInsertValue*(AggConstant: ValueRef, ElementValueConstant: ValueRef, 
-                       IdxList: ptr int32, NumIdx: int32): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMConstInsertValue".}
-proc ConstInlineAsm*(Ty: TypeRef, AsmString: cstring, Constraints: cstring, 
-                     HasSideEffects: int32): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMConstInlineAsm".}
-  # Operations on global variables, functions, and aliases (globals)  
-proc GetGlobalParent*(Global: ValueRef): ModuleRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetGlobalParent".}
-proc IsDeclaration*(Global: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMIsDeclaration".}
-proc GetLinkage*(Global: ValueRef): TLinkage{.cdecl, dynlib: libname, 
-    importc: "LLVMGetLinkage".}
-proc SetLinkage*(Global: ValueRef, Linkage: TLinkage){.cdecl, dynlib: libname, 
-    importc: "LLVMSetLinkage".}
-proc GetSection*(Global: ValueRef): cstring{.cdecl, dynlib: libname, 
-    importc: "LLVMGetSection".}
-proc SetSection*(Global: ValueRef, Section: cstring){.cdecl, dynlib: libname, 
-    importc: "LLVMSetSection".}
-proc GetVisibility*(Global: ValueRef): TVisibility{.cdecl, dynlib: libname, 
-    importc: "LLVMGetVisibility".}
-proc SetVisibility*(Global: ValueRef, Viz: TVisibility){.cdecl, dynlib: libname, 
-    importc: "LLVMSetVisibility".}
-proc GetAlignment*(Global: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMGetAlignment".}
-proc SetAlignment*(Global: ValueRef, Bytes: int32){.cdecl, dynlib: libname, 
-    importc: "LLVMSetAlignment".}
-  # Operations on global variables  
-proc AddGlobal*(M: ModuleRef, Ty: TypeRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMAddGlobal".}
-proc GetNamedGlobal*(M: ModuleRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMGetNamedGlobal".}
-proc GetFirstGlobal*(M: ModuleRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetFirstGlobal".}
-proc GetLastGlobal*(M: ModuleRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetLastGlobal".}
-proc GetNextGlobal*(GlobalVar: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetNextGlobal".}
-proc GetPreviousGlobal*(GlobalVar: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetPreviousGlobal".}
-proc DeleteGlobal*(GlobalVar: ValueRef){.cdecl, dynlib: libname, 
-    importc: "LLVMDeleteGlobal".}
-proc GetInitializer*(GlobalVar: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetInitializer".}
-proc SetInitializer*(GlobalVar: ValueRef, ConstantVal: ValueRef){.cdecl, 
-    dynlib: libname, importc: "LLVMSetInitializer".}
-proc IsThreadLocal*(GlobalVar: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMIsThreadLocal".}
-proc SetThreadLocal*(GlobalVar: ValueRef, IsThreadLocal: int32){.cdecl, 
-    dynlib: libname, importc: "LLVMSetThreadLocal".}
-proc IsGlobalConstant*(GlobalVar: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMIsGlobalConstant".}
-proc SetGlobalConstant*(GlobalVar: ValueRef, IsConstant: int32){.cdecl, 
-    dynlib: libname, importc: "LLVMSetGlobalConstant".}
-  # Operations on aliases  
-proc AddAlias*(M: ModuleRef, Ty: TypeRef, Aliasee: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMAddAlias".}
-  # Operations on functions  
-proc AddFunction*(M: ModuleRef, Name: cstring, FunctionTy: TypeRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMAddFunction".}
-proc GetNamedFunction*(M: ModuleRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMGetNamedFunction".}
-proc GetFirstFunction*(M: ModuleRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetFirstFunction".}
-proc GetLastFunction*(M: ModuleRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetLastFunction".}
-proc GetNextFunction*(Fn: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetNextFunction".}
-proc GetPreviousFunction*(Fn: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetPreviousFunction".}
-proc DeleteFunction*(Fn: ValueRef){.cdecl, dynlib: libname, 
-                                    importc: "LLVMDeleteFunction".}
-proc GetIntrinsicID*(Fn: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMGetIntrinsicID".}
-proc GetFunctionCallConv*(Fn: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMGetFunctionCallConv".}
-proc SetFunctionCallConv*(Fn: ValueRef, CC: int32){.cdecl, dynlib: libname, 
-    importc: "LLVMSetFunctionCallConv".}
-proc GetGC*(Fn: ValueRef): cstring{.cdecl, dynlib: libname, importc: "LLVMGetGC".}
-proc SetGC*(Fn: ValueRef, Name: cstring){.cdecl, dynlib: libname, 
-    importc: "LLVMSetGC".}
-proc AddFunctionAttr*(Fn: ValueRef, PA: Attribute){.cdecl, dynlib: libname, 
-    importc: "LLVMAddFunctionAttr".}
-proc GetFunctionAttr*(Fn: ValueRef): Attribute{.cdecl, dynlib: libname, 
-    importc: "LLVMGetFunctionAttr".}
-proc RemoveFunctionAttr*(Fn: ValueRef, PA: Attribute){.cdecl, dynlib: libname, 
-    importc: "LLVMRemoveFunctionAttr".}
-  # Operations on parameters  
-proc CountParams*(Fn: ValueRef): int32{.cdecl, dynlib: libname, 
-                                        importc: "LLVMCountParams".}
-proc GetParams*(Fn: ValueRef, Params: ptr ValueRef){.cdecl, dynlib: libname, 
-    importc: "LLVMGetParams".}
-proc GetParam*(Fn: ValueRef, Index: int32): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetParam".}
-proc GetParamParent*(Inst: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetParamParent".}
-proc GetFirstParam*(Fn: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetFirstParam".}
-proc GetLastParam*(Fn: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetLastParam".}
-proc GetNextParam*(Arg: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetNextParam".}
-proc GetPreviousParam*(Arg: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetPreviousParam".}
-proc AddAttribute*(Arg: ValueRef, PA: Attribute){.cdecl, dynlib: libname, 
-    importc: "LLVMAddAttribute".}
-proc RemoveAttribute*(Arg: ValueRef, PA: Attribute){.cdecl, dynlib: libname, 
-    importc: "LLVMRemoveAttribute".}
-proc GetAttribute*(Arg: ValueRef): Attribute{.cdecl, dynlib: libname, 
-    importc: "LLVMGetAttribute".}
-proc SetParamAlignment*(Arg: ValueRef, align: int32){.cdecl, dynlib: libname, 
-    importc: "LLVMSetParamAlignment".}
-  # Operations on basic blocks  
-proc BasicBlockAsValue*(BB: BasicBlockRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBasicBlockAsValue".}
-proc ValueIsBasicBlock*(Val: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMValueIsBasicBlock".}
-proc ValueAsBasicBlock*(Val: ValueRef): BasicBlockRef{.cdecl, dynlib: libname, 
-    importc: "LLVMValueAsBasicBlock".}
-proc GetBasicBlockParent*(BB: BasicBlockRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetBasicBlockParent".}
-proc CountBasicBlocks*(Fn: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMCountBasicBlocks".}
-proc GetBasicBlocks*(Fn: ValueRef, BasicBlocks: ptr BasicBlockRef){.cdecl, 
-    dynlib: libname, importc: "LLVMGetBasicBlocks".}
-proc GetFirstBasicBlock*(Fn: ValueRef): BasicBlockRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetFirstBasicBlock".}
-proc GetLastBasicBlock*(Fn: ValueRef): BasicBlockRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetLastBasicBlock".}
-proc GetNextBasicBlock*(BB: BasicBlockRef): BasicBlockRef{.cdecl, 
-    dynlib: libname, importc: "LLVMGetNextBasicBlock".}
-proc GetPreviousBasicBlock*(BB: BasicBlockRef): BasicBlockRef{.cdecl, 
-    dynlib: libname, importc: "LLVMGetPreviousBasicBlock".}
-proc GetEntryBasicBlock*(Fn: ValueRef): BasicBlockRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetEntryBasicBlock".}
-proc AppendBasicBlockInContext*(C: ContextRef, Fn: ValueRef, Name: cstring): BasicBlockRef{.
-    cdecl, dynlib: libname, importc: "LLVMAppendBasicBlockInContext".}
-proc InsertBasicBlockInContext*(C: ContextRef, BB: BasicBlockRef, Name: cstring): BasicBlockRef{.
-    cdecl, dynlib: libname, importc: "LLVMInsertBasicBlockInContext".}
-proc AppendBasicBlock*(Fn: ValueRef, Name: cstring): BasicBlockRef{.cdecl, 
-    dynlib: libname, importc: "LLVMAppendBasicBlock".}
-proc InsertBasicBlock*(InsertBeforeBB: BasicBlockRef, Name: cstring): BasicBlockRef{.
-    cdecl, dynlib: libname, importc: "LLVMInsertBasicBlock".}
-proc DeleteBasicBlock*(BB: BasicBlockRef){.cdecl, dynlib: libname, 
-    importc: "LLVMDeleteBasicBlock".}
-  # Operations on instructions  
-proc GetInstructionParent*(Inst: ValueRef): BasicBlockRef{.cdecl, 
-    dynlib: libname, importc: "LLVMGetInstructionParent".}
-proc GetFirstInstruction*(BB: BasicBlockRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetFirstInstruction".}
-proc GetLastInstruction*(BB: BasicBlockRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetLastInstruction".}
-proc GetNextInstruction*(Inst: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetNextInstruction".}
-proc GetPreviousInstruction*(Inst: ValueRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMGetPreviousInstruction".}
-  # Operations on call sites  
-proc SetInstructionCallConv*(Instr: ValueRef, CC: int32){.cdecl, 
-    dynlib: libname, importc: "LLVMSetInstructionCallConv".}
-proc GetInstructionCallConv*(Instr: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMGetInstructionCallConv".}
-proc AddInstrAttribute*(Instr: ValueRef, index: int32, para3: Attribute){.cdecl, 
-    dynlib: libname, importc: "LLVMAddInstrAttribute".}
-proc RemoveInstrAttribute*(Instr: ValueRef, index: int32, para3: Attribute){.
-    cdecl, dynlib: libname, importc: "LLVMRemoveInstrAttribute".}
-proc SetInstrParamAlignment*(Instr: ValueRef, index: int32, align: int32){.
-    cdecl, dynlib: libname, importc: "LLVMSetInstrParamAlignment".}
-  # Operations on call instructions (only)  
-proc IsTailCall*(CallInst: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMIsTailCall".}
-proc SetTailCall*(CallInst: ValueRef, IsTailCall: int32){.cdecl, 
-    dynlib: libname, importc: "LLVMSetTailCall".}
-  # Operations on phi nodes  
-proc AddIncoming*(PhiNode: ValueRef, IncomingValues: ptr ValueRef, 
-                  IncomingBlocks: ptr BasicBlockRef, Count: int32){.cdecl, 
-    dynlib: libname, importc: "LLVMAddIncoming".}
-proc CountIncoming*(PhiNode: ValueRef): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMCountIncoming".}
-proc GetIncomingValue*(PhiNode: ValueRef, Index: int32): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMGetIncomingValue".}
-proc GetIncomingBlock*(PhiNode: ValueRef, Index: int32): BasicBlockRef{.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 CreateBuilderInContext*(C: ContextRef): BuilderRef{.cdecl, dynlib: libname, 
-    importc: "LLVMCreateBuilderInContext".}
-proc CreateBuilder*(): BuilderRef{.cdecl, dynlib: libname, 
-                                   importc: "LLVMCreateBuilder".}
-proc PositionBuilder*(Builder: BuilderRef, theBlock: BasicBlockRef, 
-                      Instr: ValueRef){.cdecl, dynlib: libname, 
-                                        importc: "LLVMPositionBuilder".}
-proc PositionBuilderBefore*(Builder: BuilderRef, Instr: ValueRef){.cdecl, 
-    dynlib: libname, importc: "LLVMPositionBuilderBefore".}
-proc PositionBuilderAtEnd*(Builder: BuilderRef, theBlock: BasicBlockRef){.cdecl, 
-    dynlib: libname, importc: "LLVMPositionBuilderAtEnd".}
-proc GetInsertBlock*(Builder: BuilderRef): BasicBlockRef{.cdecl, 
-    dynlib: libname, importc: "LLVMGetInsertBlock".}
-proc ClearInsertionPosition*(Builder: BuilderRef){.cdecl, dynlib: libname, 
-    importc: "LLVMClearInsertionPosition".}
-proc InsertIntoBuilder*(Builder: BuilderRef, Instr: ValueRef){.cdecl, 
-    dynlib: libname, importc: "LLVMInsertIntoBuilder".}
-proc InsertIntoBuilderWithName*(Builder: BuilderRef, Instr: ValueRef, 
-                                Name: cstring){.cdecl, dynlib: libname, 
-    importc: "LLVMInsertIntoBuilderWithName".}
-proc DisposeBuilder*(Builder: BuilderRef){.cdecl, dynlib: libname, 
-    importc: "LLVMDisposeBuilder".}
-  # Terminators  
-proc BuildRetVoid*(para1: BuilderRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildRetVoid".}
-proc BuildRet*(para1: BuilderRef, V: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildRet".}
-proc BuildAggregateRet*(para1: BuilderRef, RetVals: ptr ValueRef, N: int32): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildAggregateRet".}
-proc BuildBr*(para1: BuilderRef, Dest: BasicBlockRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildBr".}
-proc BuildCondBr*(para1: BuilderRef, Cond: ValueRef, ThenBranch: BasicBlockRef, 
-                  ElseBranch: BasicBlockRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildCondBr".}
-proc BuildSwitch*(para1: BuilderRef, V: ValueRef, ElseBranch: BasicBlockRef, 
-                  NumCases: int32): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildSwitch".}
-proc BuildInvoke*(para1: BuilderRef, Fn: ValueRef, Args: ptr ValueRef, 
-                  NumArgs: int32, ThenBranch: BasicBlockRef, 
-                  Catch: BasicBlockRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildInvoke".}
-proc BuildUnwind*(para1: BuilderRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildUnwind".}
-proc BuildUnreachable*(para1: BuilderRef): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildUnreachable".}
-  # Add a case to the switch instruction  
-proc AddCase*(Switch: ValueRef, OnVal: ValueRef, Dest: BasicBlockRef){.cdecl, 
-    dynlib: libname, importc: "LLVMAddCase".}
-  # Arithmetic  
-proc BuildAdd*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildAdd".}
-proc BuildNSWAdd*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildNSWAdd".}
-proc BuildFAdd*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildFAdd".}
-proc BuildSub*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildSub".}
-proc BuildFSub*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildFSub".}
-proc BuildMul*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildMul".}
-proc BuildFMul*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildFMul".}
-proc BuildUDiv*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildUDiv".}
-proc BuildSDiv*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildSDiv".}
-proc BuildExactSDiv*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, 
-                     Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildExactSDiv".}
-proc BuildFDiv*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildFDiv".}
-proc BuildURem*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildURem".}
-proc BuildSRem*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildSRem".}
-proc BuildFRem*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildFRem".}
-proc BuildShl*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildShl".}
-proc BuildLShr*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildLShr".}
-proc BuildAShr*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildAShr".}
-proc BuildAnd*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildAnd".}
-proc BuildOr*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildOr".}
-proc BuildXor*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildXor".}
-proc BuildNeg*(para1: BuilderRef, V: ValueRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildNeg".}
-proc BuildFNeg*(para1: BuilderRef, V: ValueRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildFNeg".}
-proc BuildNot*(para1: BuilderRef, V: ValueRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildNot".}
-  # Memory  
-proc BuildMalloc*(para1: BuilderRef, Ty: TypeRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildMalloc".}
-proc BuildArrayMalloc*(para1: BuilderRef, Ty: TypeRef, Val: ValueRef, 
-                       Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildArrayMalloc".}
-proc BuildAlloca*(para1: BuilderRef, Ty: TypeRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildAlloca".}
-proc BuildArrayAlloca*(para1: BuilderRef, Ty: TypeRef, Val: ValueRef, 
-                       Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildArrayAlloca".}
-proc BuildFree*(para1: BuilderRef, PointerVal: ValueRef): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildFree".}
-proc BuildLoad*(para1: BuilderRef, PointerVal: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildLoad".}
-proc BuildStore*(para1: BuilderRef, Val: ValueRef, thePtr: ValueRef): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildStore".}
-proc BuildGEP*(B: BuilderRef, Pointer: ValueRef, Indices: ptr ValueRef, 
-               NumIndices: int32, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildGEP".}
-proc BuildInBoundsGEP*(B: BuilderRef, Pointer: ValueRef, Indices: ptr ValueRef, 
-                       NumIndices: int32, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildInBoundsGEP".}
-proc BuildStructGEP*(B: BuilderRef, Pointer: ValueRef, Idx: int32, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildStructGEP".}
-proc BuildGlobalString*(B: BuilderRef, Str: cstring, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildGlobalString".}
-proc BuildGlobalStringPtr*(B: BuilderRef, Str: cstring, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildGlobalStringPtr".}
-  # Casts  
-proc BuildTrunc*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                 Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildTrunc".}
-proc BuildZExt*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildZExt".}
-proc BuildSExt*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildSExt".}
-proc BuildFPToUI*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                  Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildFPToUI".}
-proc BuildFPToSI*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                  Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildFPToSI".}
-proc BuildUIToFP*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                  Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildUIToFP".}
-proc BuildSIToFP*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                  Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildSIToFP".}
-proc BuildFPTrunc*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                   Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildFPTrunc".}
-proc BuildFPExt*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                 Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildFPExt".}
-proc BuildPtrToInt*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                    Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildPtrToInt".}
-proc BuildIntToPtr*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                    Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildIntToPtr".}
-proc BuildBitCast*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                   Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildBitCast".}
-proc BuildZExtOrBitCast*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                         Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildZExtOrBitCast".}
-proc BuildSExtOrBitCast*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                         Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildSExtOrBitCast".}
-proc BuildTruncOrBitCast*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                          Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildTruncOrBitCast".}
-proc BuildPointerCast*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                       Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildPointerCast".}
-proc BuildIntCast*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                   Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildIntCast".}
-proc BuildFPCast*(para1: BuilderRef, Val: ValueRef, DestTy: TypeRef, 
-                  Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildFPCast".}
-  # Comparisons  
-proc BuildICmp*(para1: BuilderRef, Op: IntPredicate, LHS: ValueRef, 
-                RHS: ValueRef, Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildICmp".}
-proc BuildFCmp*(para1: BuilderRef, Op: RealPredicate, LHS: ValueRef, 
-                RHS: ValueRef, Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildFCmp".}
-  # Miscellaneous instructions  
-proc BuildPhi*(para1: BuilderRef, Ty: TypeRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildPhi".}
-proc BuildCall*(para1: BuilderRef, Fn: ValueRef, Args: ptr ValueRef, 
-                NumArgs: int32, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildCall".}
-proc BuildSelect*(para1: BuilderRef, Cond: ValueRef, ThenBranch: ValueRef, 
-                  ElseBranch: ValueRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildSelect".}
-proc BuildVAArg*(para1: BuilderRef, List: ValueRef, Ty: TypeRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildVAArg".}
-proc BuildExtractElement*(para1: BuilderRef, VecVal: ValueRef, Index: ValueRef, 
-                          Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildExtractElement".}
-proc BuildInsertElement*(para1: BuilderRef, VecVal: ValueRef, EltVal: ValueRef, 
-                         Index: ValueRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildInsertElement".}
-proc BuildShuffleVector*(para1: BuilderRef, V1: ValueRef, V2: ValueRef, 
-                         Mask: ValueRef, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildShuffleVector".}
-proc BuildExtractValue*(para1: BuilderRef, AggVal: ValueRef, Index: int32, 
-                        Name: cstring): ValueRef{.cdecl, dynlib: libname, 
-    importc: "LLVMBuildExtractValue".}
-proc BuildInsertValue*(para1: BuilderRef, AggVal: ValueRef, EltVal: ValueRef, 
-                       Index: int32, Name: cstring): ValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMBuildInsertValue".}
-proc BuildIsNull*(para1: BuilderRef, Val: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildIsNull".}
-proc BuildIsNotNull*(para1: BuilderRef, Val: ValueRef, Name: cstring): ValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMBuildIsNotNull".}
-proc BuildPtrDiff*(para1: BuilderRef, LHS: ValueRef, RHS: ValueRef, 
-                   Name: cstring): ValueRef{.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 CreateModuleProviderForExistingModule*(M: ModuleRef): ModuleProviderRef{.
-    cdecl, dynlib: libname, importc: "LLVMCreateModuleProviderForExistingModule".}
-  # Destroys the module provider MP as well as the contained module.
-  # See the destructor llvm::ModuleProvider::~ModuleProvider.
-  #  
-proc DisposeModuleProvider*(MP: ModuleProviderRef){.cdecl, dynlib: libname, 
-    importc: "LLVMDisposeModuleProvider".}
-  #===-- Memory buffers ----------------------------------------------------=== 
-proc CreateMemoryBufferWithContentsOfFile*(Path: cstring, 
-    OutMemBuf: ptr MemoryBufferRef, OutMessage: var cstring): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMCreateMemoryBufferWithContentsOfFile".}
-proc CreateMemoryBufferWithSTDIN*(OutMemBuf: ptr MemoryBufferRef, 
-                                  OutMessage: var cstring): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMCreateMemoryBufferWithSTDIN".}
-proc DisposeMemoryBuffer*(MemBuf: MemoryBufferRef){.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 CreatePassManager*(): PassManagerRef{.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 CreateFunctionPassManager*(MP: ModuleProviderRef): PassManagerRef{.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 RunPassManager*(PM: PassManagerRef, M: ModuleRef): 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 InitializeFunctionPassManager*(FPM: PassManagerRef): 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 RunFunctionPassManager*(FPM: PassManagerRef, F: ValueRef): 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 FinalizeFunctionPassManager*(FPM: PassManagerRef): 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 DisposePassManager*(PM: PassManagerRef){.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 
-  VerifierFailureAction* = 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.  
-    AbortProcessAction, PrintMessageAction, ReturnStatusAction
-
-proc VerifyModule*(M: ModuleRef, Action: VerifierFailureAction, 
-                   OutMessage: var cstring): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMVerifyModule".}
-  # Verifies that a single function is valid, taking the specified action. Useful
-  #   for debugging.  
-proc VerifyFunction*(Fn: ValueRef, Action: VerifierFailureAction): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMVerifyFunction".}
-  # Open up a ghostview window that displays the CFG of the current function.
-  #   Useful for debugging.  
-proc ViewFunctionCFG*(Fn: ValueRef){.cdecl, dynlib: libname, 
-                                     importc: "LLVMViewFunctionCFG".}
-proc ViewFunctionCFGOnly*(Fn: ValueRef){.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 ParseBitcode*(MemBuf: MemoryBufferRef, OutModule: var ModuleRef, 
-                   OutMessage: var cstring): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMParseBitcode".}
-proc ParseBitcodeInContext*(ContextRef: ContextRef, MemBuf: MemoryBufferRef, 
-                            OutModule: var ModuleRef, OutMessage: var cstring): 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 GetBitcodeModuleProvider*(MemBuf: MemoryBufferRef, 
-                               OutMP: var ModuleProviderRef,
-                               OutMessage: var cstring): int32{.
-    cdecl, dynlib: libname, importc: "LLVMGetBitcodeModuleProvider".}
-proc GetBitcodeModuleProviderInContext*(ContextRef: ContextRef, 
-                                        MemBuf: MemoryBufferRef, 
-                                        OutMP: var ModuleProviderRef, 
-                                        OutMessage: var cstring): 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 WriteBitcodeToFileHandle*(M: ModuleRef, Handle: int32): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMWriteBitcodeToFileHandle".}
-  # Writes a module to the specified path. Returns 0 on success.  
-proc WriteBitcodeToFile*(M: ModuleRef, Path: cstring): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMWriteBitcodeToFile".}
-  # Target.h  
-const 
-  BigEndian* = 0
-  LittleEndian* = 1
-
-type 
-  ByteOrdering* = int32
-  OpaqueTargetData {.pure} = object
-  StructLayout {.pure} = object
-  TargetDataRef* = ref OpaqueTargetData
-  StructLayoutRef* = ref StructLayout
-  
-  
-#===-- Target Data -------------------------------------------------------=== 
-# Creates target data from a target layout string.
-# See the constructor llvm::TargetData::TargetData.  
-
-proc CreateTargetData*(StringRep: cstring): TargetDataRef{.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 AddTargetData*(para1: TargetDataRef, para2: PassManagerRef){.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 CopyStringRepOfTargetData*(para1: TargetDataRef): cstring{.cdecl, 
-    dynlib: libname, importc: "LLVMCopyStringRepOfTargetData".}
-  # Returns the byte order of a target, either LLVMBigEndian or
-  #    LLVMLittleEndian.
-  #    See the method llvm::TargetData::isLittleEndian.  
-proc ByteOrder*(para1: TargetDataRef): ByteOrdering{.cdecl, dynlib: libname, 
-    importc: "LLVMByteOrder".}
-  # Returns the pointer size in bytes for a target.
-  #    See the method llvm::TargetData::getPointerSize.  
-proc PointerSize*(para1: TargetDataRef): int32{.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 IntPtrType*(para1: TargetDataRef): TypeRef{.cdecl, dynlib: libname, 
-    importc: "LLVMIntPtrType".}
-  # Computes the size of a type in bytes for a target.
-  #    See the method llvm::TargetData::getTypeSizeInBits.  
-proc SizeOfTypeInBits*(para1: TargetDataRef, para2: TypeRef): int64{.cdecl, 
-    dynlib: libname, importc: "LLVMSizeOfTypeInBits".}
-  # Computes the storage size of a type in bytes for a target.
-  #    See the method llvm::TargetData::getTypeStoreSize.  
-proc StoreSizeOfType*(para1: TargetDataRef, para2: TypeRef): int64{.cdecl, 
-    dynlib: libname, importc: "LLVMStoreSizeOfType".}
-  # Computes the ABI size of a type in bytes for a target.
-  #    See the method llvm::TargetData::getTypeAllocSize.  
-proc ABISizeOfType*(para1: TargetDataRef, para2: TypeRef): int64{.cdecl, 
-    dynlib: libname, importc: "LLVMABISizeOfType".}
-  # Computes the ABI alignment of a type in bytes for a target.
-  #    See the method llvm::TargetData::getTypeABISize.  
-proc ABIAlignmentOfType*(para1: TargetDataRef, para2: TypeRef): int32{.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 CallFrameAlignmentOfType*(para1: TargetDataRef, para2: TypeRef): int32{.
-    cdecl, dynlib: libname, importc: "LLVMCallFrameAlignmentOfType".}
-  # Computes the preferred alignment of a type in bytes for a target.
-  #    See the method llvm::TargetData::getTypeABISize.  
-proc PreferredAlignmentOfType*(para1: TargetDataRef, para2: TypeRef): int32{.
-    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 PreferredAlignmentOfGlobal*(para1: TargetDataRef, GlobalVar: ValueRef): int32{.
-    cdecl, dynlib: libname, importc: "LLVMPreferredAlignmentOfGlobal".}
-  # Computes the structure element that contains the byte offset for a target.
-  #    See the method llvm::StructLayout::getElementContainingOffset.  
-proc ElementAtOffset*(para1: TargetDataRef, StructTy: TypeRef, Offset: int64): int32{.
-    cdecl, dynlib: libname, importc: "LLVMElementAtOffset".}
-  # Computes the byte offset of the indexed struct element for a target.
-  #    See the method llvm::StructLayout::getElementContainingOffset.  
-proc OffsetOfElement*(para1: TargetDataRef, StructTy: TypeRef, Element: int32): int64{.
-    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 InvalidateStructLayout*(para1: TargetDataRef, StructTy: TypeRef){.cdecl, 
-    dynlib: libname, importc: "LLVMInvalidateStructLayout".}
-  # Deallocates a TargetData.
-  #    See the destructor llvm::TargetData::~TargetData.  
-proc DisposeTargetData*(para1: TargetDataRef){.cdecl, dynlib: libname, 
-    importc: "LLVMDisposeTargetData".}
-  # ExecutionEngine.h  
-proc LinkInJIT*(){.cdecl, dynlib: libname, importc: "LLVMLinkInJIT".}
-proc LinkInInterpreter*(){.cdecl, dynlib: libname, 
-                           importc: "LLVMLinkInInterpreter".}
-type 
-  OpaqueGenericValue {.pure} = object
-  OpaqueExecutionEngine {.pure} = object
-  GenericValueRef* = OpaqueGenericValue
-  ExecutionEngineRef* = OpaqueExecutionEngine
-  
-#===-- Operations on generic values --------------------------------------=== 
-
-proc CreateGenericValueOfInt*(Ty: TypeRef, N: int64, IsSigned: int32): GenericValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMCreateGenericValueOfInt".}
-proc CreateGenericValueOfPointer*(P: pointer): GenericValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMCreateGenericValueOfPointer".}
-proc CreateGenericValueOfFloat*(Ty: TypeRef, N: float64): GenericValueRef{.
-    cdecl, dynlib: libname, importc: "LLVMCreateGenericValueOfFloat".}
-proc GenericValueIntWidth*(GenValRef: GenericValueRef): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMGenericValueIntWidth".}
-proc GenericValueToInt*(GenVal: GenericValueRef, IsSigned: int32): int64{.cdecl, 
-    dynlib: libname, importc: "LLVMGenericValueToInt".}
-proc GenericValueToPointer*(GenVal: GenericValueRef): pointer{.cdecl, 
-    dynlib: libname, importc: "LLVMGenericValueToPointer".}
-proc GenericValueToFloat*(TyRef: TypeRef, GenVal: GenericValueRef): float64{.
-    cdecl, dynlib: libname, importc: "LLVMGenericValueToFloat".}
-proc DisposeGenericValue*(GenVal: GenericValueRef){.cdecl, dynlib: libname, 
-    importc: "LLVMDisposeGenericValue".}
-  
-#===-- Operations on execution engines -----------------------------------=== 
-proc CreateExecutionEngine*(OutEE: var ExecutionEngineRef, MP: ModuleProviderRef, 
-                            OutError: var cstring): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMCreateExecutionEngine".}
-proc CreateInterpreter*(OutInterp: var ExecutionEngineRef, MP: ModuleProviderRef, 
-                        OutError: var cstring): int32{.cdecl, dynlib: libname, 
-    importc: "LLVMCreateInterpreter".}
-proc CreateJITCompiler*(OutJIT: var ExecutionEngineRef, MP: ModuleProviderRef, 
-                        OptLevel: int32, OutError: var cstring): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMCreateJITCompiler".}
-proc DisposeExecutionEngine*(EE: ExecutionEngineRef){.cdecl, dynlib: libname, 
-    importc: "LLVMDisposeExecutionEngine".}
-proc RunStaticConstructors*(EE: ExecutionEngineRef){.cdecl, dynlib: libname, 
-    importc: "LLVMRunStaticConstructors".}
-proc RunStaticDestructors*(EE: ExecutionEngineRef){.cdecl, dynlib: libname, 
-    importc: "LLVMRunStaticDestructors".}
-
-proc RunFunctionAsMain*(EE: ExecutionEngineRef, F: ValueRef, ArgC: int32, 
-                        ArgV: cstringArray, EnvP: cstringArray): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMRunFunctionAsMain".}
-proc RunFunction*(EE: ExecutionEngineRef, F: ValueRef, NumArgs: int32, 
-                  Args: ptr GenericValueRef): GenericValueRef{.cdecl, 
-    dynlib: libname, importc: "LLVMRunFunction".}
-proc FreeMachineCodeForFunction*(EE: ExecutionEngineRef, F: ValueRef){.cdecl, 
-    dynlib: libname, importc: "LLVMFreeMachineCodeForFunction".}
-proc AddModuleProvider*(EE: ExecutionEngineRef, MP: ModuleProviderRef){.cdecl, 
-    dynlib: libname, importc: "LLVMAddModuleProvider".}
-proc RemoveModuleProvider*(EE: ExecutionEngineRef, MP: ModuleProviderRef, 
-                           OutMod: var ModuleRef, OutError: var cstring): int32{.cdecl, 
-    dynlib: libname, importc: "LLVMRemoveModuleProvider".}
-proc FindFunction*(EE: ExecutionEngineRef, Name: cstring, OutFn: var ValueRef): int32{.
-    cdecl, dynlib: libname, importc: "LLVMFindFunction".}
-proc GetExecutionEngineTargetData*(EE: ExecutionEngineRef): TargetDataRef{.
-    cdecl, dynlib: libname, importc: "LLVMGetExecutionEngineTargetData".}
-proc AddGlobalMapping*(EE: ExecutionEngineRef, Global: ValueRef, 
-                       theAddr: pointer){.cdecl, dynlib: libname, 
-    importc: "LLVMAddGlobalMapping".}
-proc GetPointerToGlobal*(EE: ExecutionEngineRef, Global: ValueRef): pointer{.
-    cdecl, dynlib: libname, importc: "LLVMGetPointerToGlobal".}
-
-# LinkTimeOptimizer.h  
-# This provides a dummy type for pointers to the LTO object. 
-type 
-  lto_t* = pointer
-  lto_status* = enum 
-    LTO_UNKNOWN, LTO_OPT_SUCCESS, LTO_READ_SUCCESS, LTO_READ_FAILURE, 
-    LTO_WRITE_FAILURE, LTO_NO_TARGET, LTO_NO_WORK, LTO_MODULE_MERGE_FAILURE, 
-    LTO_ASM_FAILURE, LTO_NULL_OBJECT
-  lto_status_t* = 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 create_optimizer*(): lto_t{.cdecl, dynlib: libname, 
-                                 importc: "llvm_create_optimizer".}
-proc destroy_optimizer*(lto: lto_t){.cdecl, dynlib: libname, 
-                                     importc: "llvm_destroy_optimizer".}
-proc read_object_file*(lto: lto_t, input_filename: cstring): lto_status_t{.
-    cdecl, dynlib: libname, importc: "llvm_read_object_file".}
-proc optimize_modules*(lto: lto_t, output_filename: cstring): 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 
-    SYMBOL_ALIGNMENT_MASK = 0x0000001F,
-    SYMBOL_PERMISSIONS_RODATA = 0x00000080,
-    SYMBOL_PERMISSIONS_CODE = 0x000000A0,
-    SYMBOL_PERMISSIONS_DATA = 0x000000C0, 
-    SYMBOL_PERMISSIONS_MASK = 0x000000E0, 
-    
-    SYMBOL_DEFINITION_REGULAR = 0x00000100, 
-    SYMBOL_DEFINITION_TENTATIVE = 0x00000200, 
-    SYMBOL_DEFINITION_WEAK = 0x00000300, 
-    SYMBOL_DEFINITION_UNDEFINED = 0x00000400, 
-    SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,
-    SYMBOL_DEFINITION_MASK = 0x00000700, 
-    SYMBOL_SCOPE_INTERNAL = 0x00000800,
-    
-    SYMBOL_SCOPE_HIDDEN = 0x00001000,
-    SYMBOL_SCOPE_DEFAULT = 0x00001800,
-    SYMBOL_SCOPE_PROTECTED = 0x00002000,
-    SYMBOL_SCOPE_MASK = 0x00003800, 
-  lto_debug_model* = enum 
-    DEBUG_MODEL_NONE = 0, DEBUG_MODEL_DWARF = 1
-  lto_codegen_model* = enum
-    CODEGEN_PIC_MODEL_STATIC = 0, CODEGEN_PIC_MODEL_DYNAMIC = 1, 
-    CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC = 2
-  
-  LTOModule {.pure} = object
-  LTOCodeGenerator {.pure} = object
-  lto_module_t* = ref LTOModule
-  lto_code_gen_t* = ref LTOCodeGenerator
-
-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: int): 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: int, 
-    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: int): 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): int32{.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: int32): 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: int32): 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".}