; Attention: ltrace does not accept a space between LLVMWriteBitcodeToFile and '('
; but it also does not emit a parse error.

typedef LLVMBool = enum (false = 0, true = 1)

; it seems that typedef-types cannot be used for results
; If we enable the following declarations instead of the other ones,
; then they are silently ignored.

; LLVMBool LLVMInitializeNativeTarget();

; LLVMBool LLVMInitializeX86Target();
; LLVMBool LLVMInitializeX86TargetInfo();

int LLVMInitializeNativeTarget();

int LLVMInitializeX86Target();
int LLVMInitializeX86TargetInfo();
int LLVMInitializeX86TargetMC();
int LLVMInitializeX86AsmParser();
int LLVMInitializeX86AsmPrinter();


typedef LLVMMemoryBufferRef = addr
typedef LLVMModuleRef = addr
typedef LLVMContextRef = addr


; BitReader.h

int LLVMParseBitcode(LLVMMemoryBufferRef, LLVMModuleRef*, string*);
int LLVMParseBitcodeInContext(LLVMContextRef,LLVMMemoryBufferRef,LLVMModuleRef*, string*);
int LLVMGetBitcodeModuleInContext(LLVMContextRef,LLVMMemoryBufferRef,LLVMModuleRef*,string*);
int LLVMGetBitcodeModule(LLVMMemoryBufferRef, LLVMModuleRef*,string*);

; BitWriter.h


int LLVMWriteBitcodeToFile(LLVMModuleRef,string);
int LLVMWriteBitcodeToFD(LLVMModuleRef,int,int,int);
int LLVMWriteBitcodeToFileHandle(LLVMModuleRef,file);


; Target.h

typedef LLVMPassManagerRef = addr
typedef LLVMTypeRef = addr
typedef LLVMValueRef = addr
typedef LLVMTargetDataRef = addr
typedef LLVMByteOrdering = enum(LLVMBigEndian=0,LLVMLittleEndian=1)

addr LLVMCreateTargetData(string);    ; result LLVMTargetDataRef
void LLVMAddTargetData(LLVMTargetDataRef,LLVMPassManagerRef);
string LLVMCopyStringRepOfTargetData(LLVMTargetDataRef);
addr LLVMByteOrder(LLVMTargetDataRef);    ; result LLVMByteOrdering
uint LLVMPointerSize(LLVMTargetDataRef);
addr LLVMIntPtrType(LLVMTargetDataRef);    ; result LLVMTypeRef
ulong LLVMSizeOfTypeInBits(LLVMTargetDataRef, LLVMTypeRef);
ulong LLVMStoreSizeOfType(LLVMTargetDataRef, LLVMTypeRef);
ulong LLVMABISizeOfType(LLVMTargetDataRef, LLVMTypeRef);
uint LLVMABIAlignmentOfType(LLVMTargetDataRef, LLVMTypeRef);
uint LLVMCallFrameAlignmentOfType(LLVMTargetDataRef, LLVMTypeRef);
uint LLVMPreferredAlignmentOfType(LLVMTargetDataRef, LLVMTypeRef);
uint LLVMPreferredAlignmentOfGlobal(LLVMTargetDataRef,LLVMValueRef);
uint LLVMElementAtOffset(LLVMTargetDataRef, LLVMTypeRef, ulong);
ulong LLVMOffsetOfElement(LLVMTargetDataRef, LLVMTypeRef, uint);
void LLVMInvalidateStructLayout(LLVMTargetDataRef, LLVMTypeRef);
void LLVMDisposeTargetData(LLVMTargetDataRef);


; Transforms/IPO.h
void LLVMAddArgumentPromotionPass(LLVMPassManagerRef);
void LLVMAddConstantMergePass(LLVMPassManagerRef);
void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef);
void LLVMAddDeadTypeEliminationPass(LLVMPassManagerRef);
void LLVMAddFunctionAttrsPass(LLVMPassManagerRef);
void LLVMAddFunctionInliningPass(LLVMPassManagerRef);
void LLVMAddGlobalDCEPass(LLVMPassManagerRef);
void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef);
void LLVMAddIPConstantPropagationPass(LLVMPassManagerRef);
void LLVMAddLowerSetJmpPass(LLVMPassManagerRef);
void LLVMAddPruneEHPass(LLVMPassManagerRef);
void LLVMAddIPSCCPPass(LLVMPassManagerRef);
void LLVMAddInternalizePass(LLVMPassManagerRef, uint);
void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef);
void LLVMAddStripSymbolsPass(LLVMPassManagerRef);

; Transforms/Scalar.h
void LLVMAddAggressiveDCEPass(LLVMPassManagerRef);
void LLVMAddCFGSimplificationPass(LLVMPassManagerRef);
void LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef);
void LLVMAddGVNPass(LLVMPassManagerRef);
void LLVMAddIndVarSimplifyPass(LLVMPassManagerRef);
void LLVMAddInstructionCombiningPass(LLVMPassManagerRef);
void LLVMAddJumpThreadingPass(LLVMPassManagerRef);
void LLVMAddLICMPass(LLVMPassManagerRef);
void LLVMAddLoopDeletionPass(LLVMPassManagerRef);
void LLVMAddLoopIndexSplitPass(LLVMPassManagerRef);
void LLVMAddLoopRotatePass(LLVMPassManagerRef);
void LLVMAddLoopUnrollPass(LLVMPassManagerRef);
void LLVMAddLoopUnswitchPass(LLVMPassManagerRef);
void LLVMAddMemCpyOptPass(LLVMPassManagerRef);
void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef);
void LLVMAddReassociatePass(LLVMPassManagerRef);
void LLVMAddSCCPPass(LLVMPassManagerRef);
void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef);
void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef, int);
void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef);
void LLVMAddTailCallEliminationPass(LLVMPassManagerRef);
void LLVMAddConstantPropagationPass(LLVMPassManagerRef);
void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef);
void LLVMAddVerifierPass(LLVMPassManagerRef);


; Core.h

typedef LLVMContextRef = addr
typedef LLVMModuleRef = addr
typedef LLVMTypeRef = addr
typedef LLVMTypeHandleRef = addr
typedef LLVMValueRef = addr
typedef LLVMBasicBlockRef = addr
typedef LLVMBuilderRef = addr
typedef LLVMModuleProviderRef = addr
typedef LLVMMemoryBufferRef = addr
typedef LLVMPassManagerRef = addr
typedef LLVMUseRef = addr
typedef LLVMExecutionEngineRef = addr
typedef LLVMGenericValueRef = addr

typedef LLVMAttribute = enum (LLVMZExtAttribute = 1, LLVMSExtAttribute = 2, LLVMNoReturnAttribute = 4, LLVMInRegAttribute = 8, LLVMStructRetAttribute = 16, LLVMNoUnwindAttribute = 32, LLVMNoAliasAttribute = 64, LLVMByValAttribute = 128, LLVMNestAttribute = 256, LLVMReadNoneAttribute = 512, LLVMReadOnlyAttribute = 1024, LLVMNoInlineAttribute = 2048, LLVMAlwaysInlineAttribute = 4096, LLVMOptimizeForSizeAttribute = 8192, LLVMStackProtectAttribute = 16384, LLVMStackProtectReqAttribute = 32768, LLVMAlignment = 2031616, LLVMNoCaptureAttribute = 2097152, LLVMNoRedZoneAttribute = 4194304, LLVMNoImplicitFloatAttribute = 8388608, LLVMNakedAttribute = 16777216, LLVMInlineHintAttribute = 33554432, LLVMStackAlignment = 67108864)

typedef LLVMOpcode = enum (LLVMRet = 1, LLVMBr = 2, LLVMSwitch = 3, LLVMIndirectBr = 4, LLVMInvoke = 5, LLVMUnwind = 6, LLVMUnreachable = 7, LLVMAdd = 8, LLVMFAdd = 9, LLVMSub = 10, LLVMFSub = 11, LLVMMul = 12, LLVMFMul = 13, LLVMUDiv = 14, LLVMSDiv = 15, LLVMFDiv = 16, LLVMURem = 17, LLVMSRem = 18, LLVMFRem = 19, LLVMShl = 20, LLVMLShr = 21, LLVMAShr = 22, LLVMAnd = 23, LLVMOr = 24, LLVMXor = 25, LLVMAlloca = 26, LLVMLoad = 27, LLVMStore = 28, LLVMGetElementPtr = 29, LLVMTrunc = 30, LLVMZExt = 31, LLVMSExt = 32, LLVMFPToUI = 33, LLVMFPToSI = 34, LLVMUIToFP = 35, LLVMSIToFP = 36, LLVMFPTrunc = 37, LLVMFPExt = 38, LLVMPtrToInt = 39, LLVMIntToPtr = 40, LLVMBitCast = 41, LLVMICmp = 42, LLVMFCmp = 43, LLVMPHI = 44, LLVMCall = 45, LLVMSelect = 46, LLVMVAArg = 49, LLVMExtractElement = 50, LLVMInsertElement = 51, LLVMShuffleVector = 52, LLVMExtractValue = 53, LLVMInsertValue = 54)

typedef LLVMTypeKind = enum (LLVMVoidTypeKind = 0, LLVMFloatTypeKind = 1, LLVMDoubleTypeKind = 2, LLVMX86_FP80TypeKind = 3, LLVMFP128TypeKind = 4, LLVMPPC_FP128TypeKind = 5, LLVMLabelTypeKind = 6, LLVMIntegerTypeKind = 7, LLVMFunctionTypeKind = 8, LLVMStructTypeKind = 9, LLVMArrayTypeKind = 10, LLVMPointerTypeKind = 11, LLVMOpaqueTypeKind = 12, LLVMVectorTypeKind = 13, LLVMMetadataTypeKind = 14)

typedef LLVMLinkage = enum (LLVMExternalLinkage = 0, LLVMAvailableExternallyLinkage = 1, LLVMLinkOnceAnyLinkage = 2, LLVMLinkOnceODRLinkage = 3, LLVMWeakAnyLinkage = 4, LLVMWeakODRLinkage = 5, LLVMAppendingLinkage = 6, LLVMInternalLinkage = 7, LLVMPrivateLinkage = 8, LLVMDLLImportLinkage = 9, LLVMDLLExportLinkage = 10, LLVMExternalWeakLinkage = 11, LLVMGhostLinkage = 12, LLVMCommonLinkage = 13, LLVMLinkerPrivateLinkage = 14, LLVMLinkerPrivateWeakLinkage = 15, LLVMLinkerPrivateWeakDefAutoLinkage = 16)

typedef LLVMVisibility = enum (LLVMDefaultVisibility = 0, LLVMHiddenVisibility = 1, LLVMProtectedVisibility = 2)

typedef LLVMCallConv = enum (LLVMCCallConv = 0, LLVMFastCallConv = 8, LLVMColdCallConv = 9, LLVMX86StdcallCallConv = 64, LLVMX86FastcallCallConv = 65)

typedef LLVMIntPredicate = enum (LLVMIntEQ = 32, LLVMIntNE = 33, LLVMIntUGT = 34, LLVMIntUGE = 35, LLVMIntULT = 36, LLVMIntULE = 37, LLVMIntSGT = 38, LLVMIntSGE = 39, LLVMIntSLT = 40, LLVMIntSLE = 41)

typedef LLVMRealPredicate = enum (LLVMRealPredicateFalse = 0, LLVMRealOEQ = 1, LLVMRealOGT = 2, LLVMRealOGE = 3, LLVMRealOLT = 4, LLVMRealOLE = 5, LLVMRealONE = 6, LLVMRealORD = 7, LLVMRealUNO = 8, LLVMRealUEQ = 9, LLVMRealUGT = 10, LLVMRealUGE = 11, LLVMRealULT = 12, LLVMRealULE = 13, LLVMRealUNE = 14, LLVMRealPredicateTrue = 15)



void LLVMDisposeMessage(string);


addr LLVMContextCreate(void);    ; result LLVMContextRef
addr LLVMGetGlobalContext(void);    ; result LLVMContextRef
void LLVMContextDispose(LLVMContextRef);

uint LLVMGetMDKindIDInContext(LLVMContextRef, string, uint);
uint LLVMGetMDKindID(string, uint);

addr LLVMModuleCreateWithName(string);    ; result LLVMModuleRef
addr LLVMModuleCreateWithNameInContext(string, LLVMContextRef);    ; result LLVMModuleRef

void LLVMDisposeModule(LLVMModuleRef);

string LLVMGetDataLayout(LLVMModuleRef);
void LLVMSetDataLayout(LLVMModuleRef, string);

string LLVMGetTarget(LLVMModuleRef);
void LLVMSetTarget(LLVMModuleRef, string);

uint LLVMAddTypeName(LLVMModuleRef, string, LLVMTypeRef);    ; result LLVMBool
void LLVMDeleteTypeName(LLVMModuleRef, string);
addr LLVMGetTypeByName(LLVMModuleRef, string);    ; result LLVMTypeRef

void LLVMDumpModule(LLVMModuleRef);

void LLVMSetModuleInlineAsm(LLVMModuleRef, string);


addr LLVMGetTypeKind(LLVMTypeRef);    ; result LLVMTypeKind

addr LLVMGetTypeContext(LLVMTypeRef);    ; result LLVMContextRef

addr LLVMInt1TypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMInt8TypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMInt16TypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMInt32TypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMInt64TypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMIntTypeInContext(LLVMContextRef, uint);    ; result LLVMTypeRef

addr LLVMInt1Type(void);    ; result LLVMTypeRef
addr LLVMInt8Type(void);    ; result LLVMTypeRef
addr LLVMInt16Type(void);    ; result LLVMTypeRef
addr LLVMInt32Type(void);    ; result LLVMTypeRef
addr LLVMInt64Type(void);    ; result LLVMTypeRef
addr LLVMIntType(uint);    ; result LLVMTypeRef
uint LLVMGetIntTypeWidth(LLVMTypeRef);

addr LLVMFloatTypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMDoubleTypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMX86FP80TypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMFP128TypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMPPCFP128TypeInContext(LLVMContextRef);    ; result LLVMTypeRef

addr LLVMFloatType(void);    ; result LLVMTypeRef
addr LLVMDoubleType(void);    ; result LLVMTypeRef
addr LLVMX86FP80Type(void);    ; result LLVMTypeRef
addr LLVMFP128Type(void);    ; result LLVMTypeRef
addr LLVMPPCFP128Type(void);    ; result LLVMTypeRef

addr LLVMFunctionType(LLVMTypeRef, array(LLVMTypeRef,arg3)*, uint, LLVMBool);    ; result LLVMTypeRef
uint LLVMIsFunctionVarArg(LLVMTypeRef);    ; result LLVMBool
addr LLVMGetReturnType(LLVMTypeRef);    ; result LLVMTypeRef
uint LLVMCountParamTypes(LLVMTypeRef);
void LLVMGetParamTypes(LLVMTypeRef, LLVMTypeRef*);

addr LLVMStructTypeInContext(LLVMContextRef, array(LLVMTypeRef,arg3)*, uint, LLVMBool);    ; result LLVMTypeRef
addr LLVMStructType(array(LLVMTypeRef,arg2)*, uint, LLVMBool);    ; result LLVMTypeRef
uint LLVMCountStructElementTypes(LLVMTypeRef);
void LLVMGetStructElementTypes(LLVMTypeRef, LLVMTypeRef*);
uint LLVMIsPackedStruct(LLVMTypeRef);    ; result LLVMBool

addr LLVMArrayType(LLVMTypeRef, uint);    ; result LLVMTypeRef
addr LLVMPointerType(LLVMTypeRef, uint);    ; result LLVMTypeRef
addr LLVMVectorType(LLVMTypeRef, uint);    ; result LLVMTypeRef

addr LLVMGetElementType(LLVMTypeRef);    ; result LLVMTypeRef
uint LLVMGetArrayLength(LLVMTypeRef);
uint LLVMGetPointerAddressSpace(LLVMTypeRef);
uint LLVMGetVectorSize(LLVMTypeRef);

addr LLVMVoidTypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMLabelTypeInContext(LLVMContextRef);    ; result LLVMTypeRef
addr LLVMOpaqueTypeInContext(LLVMContextRef);    ; result LLVMTypeRef

addr LLVMVoidType(void);    ; result LLVMTypeRef
addr LLVMLabelType(void);    ; result LLVMTypeRef
addr LLVMOpaqueType(void);    ; result LLVMTypeRef

addr LLVMCreateTypeHandle(LLVMTypeRef);    ; result LLVMTypeHandleRef
void LLVMRefineType(LLVMTypeRef, LLVMTypeRef);
addr LLVMResolveTypeHandle(LLVMTypeHandleRef);    ; result LLVMTypeRef
void LLVMDisposeTypeHandle(LLVMTypeHandleRef);


addr LLVMTypeOf(LLVMValueRef);    ; result LLVMTypeRef
string LLVMGetValueName(LLVMValueRef);
void LLVMSetValueName(LLVMValueRef, string);
void LLVMDumpValue(LLVMValueRef);
void LLVMReplaceAllUsesWith(LLVMValueRef, LLVMValueRef);
int LLVMHasMetadata(LLVMValueRef);
addr LLVMGetMetadata(LLVMValueRef, uint);    ; result LLVMValueRef
void LLVMSetMetadata(LLVMValueRef, uint, LLVMValueRef);

addr LLVMGetFirstUse(LLVMValueRef);    ; result LLVMUseRef
addr LLVMGetNextUse(LLVMUseRef);    ; result LLVMUseRef
addr LLVMGetUser(LLVMUseRef);    ; result LLVMValueRef
addr LLVMGetUsedValue(LLVMUseRef);    ; result LLVMValueRef

addr LLVMGetOperand(LLVMValueRef, uint);    ; result LLVMValueRef
void LLVMSetOperand(LLVMValueRef, uint, LLVMValueRef);
int LLVMGetNumOperands(LLVMValueRef);

addr LLVMConstNull(LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstAllOnes(LLVMTypeRef);    ; result LLVMValueRef
addr LLVMGetUndef(LLVMTypeRef);    ; result LLVMValueRef
uint LLVMIsConstant(LLVMValueRef);    ; result LLVMBool
uint LLVMIsNull(LLVMValueRef);    ; result LLVMBool
uint LLVMIsUndef(LLVMValueRef);    ; result LLVMBool
addr LLVMConstPointerNull(LLVMTypeRef);    ; result LLVMValueRef

addr LLVMMDStringInContext(LLVMContextRef, string, uint);    ; result LLVMValueRef
addr LLVMMDString(string, uint);    ; result LLVMValueRef
addr LLVMMDNodeInContext(LLVMContextRef, array(LLVMValueRef,arg3)*, uint);    ; result LLVMValueRef
addr LLVMMDNode(array(LLVMValueRef,arg2)*, uint);    ; result LLVMValueRef

addr LLVMConstInt(LLVMTypeRef, ulong, LLVMBool);    ; result LLVMValueRef
addr LLVMConstIntOfString(LLVMTypeRef, string, short);    ; result LLVMValueRef
addr LLVMConstIntOfStringAndSize(LLVMTypeRef, string, uint, short);    ; result LLVMValueRef
addr LLVMConstReal(LLVMTypeRef, double);    ; result LLVMValueRef
addr LLVMConstRealOfString(LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMConstRealOfStringAndSize(LLVMTypeRef, string, uint);    ; result LLVMValueRef
ulong LLVMConstIntGetZExtValue(LLVMValueRef);
long LLVMConstIntGetSExtValue(LLVMValueRef);


addr LLVMConstStringInContext(LLVMContextRef, string, uint, LLVMBool);    ; result LLVMValueRef
addr LLVMConstStructInContext(LLVMContextRef, array(LLVMValueRef,arg3)*, uint, LLVMBool);    ; result LLVMValueRef

addr LLVMConstString(string, uint, LLVMBool);    ; result LLVMValueRef
addr LLVMConstArray(LLVMTypeRef, array(LLVMValueRef,arg3)*, uint);    ; result LLVMValueRef
addr LLVMConstStruct(array(LLVMValueRef,arg2)*, uint, LLVMBool);    ; result LLVMValueRef
addr LLVMConstVector(array(LLVMValueRef,arg2)*, uint);    ; result LLVMValueRef

addr LLVMGetConstOpcode(LLVMValueRef);    ; result LLVMOpcode
addr LLVMAlignOf(LLVMTypeRef);    ; result LLVMValueRef
addr LLVMSizeOf(LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstNeg(LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNSWNeg(LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNUWNeg(LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstFNeg(LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNot(LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstAdd(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNSWAdd(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNUWAdd(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstFAdd(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstSub(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNSWSub(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNUWSub(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstFSub(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstMul(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNSWMul(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstNUWMul(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstFMul(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstUDiv(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstSDiv(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstExactSDiv(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstFDiv(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstURem(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstSRem(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstFRem(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstAnd(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstOr(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstXor(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstICmp(LLVMIntPredicate, LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstFCmp(LLVMRealPredicate, LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstShl(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstLShr(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstAShr(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstGEP(LLVMValueRef, array(LLVMValueRef,arg3)*, uint);    ; result LLVMValueRef
addr LLVMConstInBoundsGEP(LLVMValueRef, array(LLVMValueRef,arg3)*, uint);    ; result LLVMValueRef
addr LLVMConstTrunc(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstSExt(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstZExt(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstFPTrunc(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstFPExt(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstUIToFP(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstSIToFP(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstFPToUI(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstFPToSI(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstPtrToInt(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstIntToPtr(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstBitCast(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstZExtOrBitCast(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstSExtOrBitCast(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstTruncOrBitCast(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstPointerCast(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstIntCast(LLVMValueRef, LLVMTypeRef, LLVMBool);    ; result LLVMValueRef
addr LLVMConstFPCast(LLVMValueRef, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMConstSelect(LLVMValueRef, LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstExtractElement(LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstInsertElement(LLVMValueRef, LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstShuffleVector(LLVMValueRef, LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMConstExtractValue(LLVMValueRef, array(uint,arg3)*, uint);    ; result LLVMValueRef
addr LLVMConstInsertValue(LLVMValueRef, LLVMValueRef, array(uint,arg4)*, uint);    ; result LLVMValueRef
addr LLVMConstInlineAsm(LLVMTypeRef, string, string, LLVMBool, LLVMBool);    ; result LLVMValueRef
addr LLVMBlockAddress(LLVMValueRef, LLVMBasicBlockRef);    ; result LLVMValueRef

addr LLVMGetGlobalParent(LLVMValueRef);    ; result LLVMModuleRef
uint LLVMIsDeclaration(LLVMValueRef);    ; result LLVMBool
addr LLVMGetLinkage(LLVMValueRef);    ; result LLVMLinkage
void LLVMSetLinkage(LLVMValueRef, LLVMLinkage);
string LLVMGetSection(LLVMValueRef);
void LLVMSetSection(LLVMValueRef, string);
addr LLVMGetVisibility(LLVMValueRef);    ; result LLVMVisibility
void LLVMSetVisibility(LLVMValueRef, LLVMVisibility);
uint LLVMGetAlignment(LLVMValueRef);
void LLVMSetAlignment(LLVMValueRef, uint);

addr LLVMAddGlobal(LLVMModuleRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMAddGlobalInAddressSpace(LLVMModuleRef, LLVMTypeRef, string, uint);    ; result LLVMValueRef
addr LLVMGetNamedGlobal(LLVMModuleRef, string);    ; result LLVMValueRef
addr LLVMGetFirstGlobal(LLVMModuleRef);    ; result LLVMValueRef
addr LLVMGetLastGlobal(LLVMModuleRef);    ; result LLVMValueRef
addr LLVMGetNextGlobal(LLVMValueRef);    ; result LLVMValueRef
addr LLVMGetPreviousGlobal(LLVMValueRef);    ; result LLVMValueRef
void LLVMDeleteGlobal(LLVMValueRef);
addr LLVMGetInitializer(LLVMValueRef);    ; result LLVMValueRef
void LLVMSetInitializer(LLVMValueRef, LLVMValueRef);
uint LLVMIsThreadLocal(LLVMValueRef);    ; result LLVMBool
void LLVMSetThreadLocal(LLVMValueRef, LLVMBool);
uint LLVMIsGlobalConstant(LLVMValueRef);    ; result LLVMBool
void LLVMSetGlobalConstant(LLVMValueRef, LLVMBool);

addr LLVMAddAlias(LLVMModuleRef, LLVMTypeRef, LLVMValueRef, string);    ; result LLVMValueRef

addr LLVMAddFunction(LLVMModuleRef, string, LLVMTypeRef);    ; result LLVMValueRef
addr LLVMGetNamedFunction(LLVMModuleRef, string);    ; result LLVMValueRef
addr LLVMGetFirstFunction(LLVMModuleRef);    ; result LLVMValueRef
addr LLVMGetLastFunction(LLVMModuleRef);    ; result LLVMValueRef
addr LLVMGetNextFunction(LLVMValueRef);    ; result LLVMValueRef
addr LLVMGetPreviousFunction(LLVMValueRef);    ; result LLVMValueRef
void LLVMDeleteFunction(LLVMValueRef);
uint LLVMGetIntrinsicID(LLVMValueRef);
uint LLVMGetFunctionCallConv(LLVMValueRef);
void LLVMSetFunctionCallConv(LLVMValueRef, LLVMCallConv);
string LLVMGetGC(LLVMValueRef);
void LLVMSetGC(LLVMValueRef, string);
void LLVMAddFunctionAttr(LLVMValueRef, LLVMAttribute);
addr LLVMGetFunctionAttr(LLVMValueRef);    ; result LLVMAttribute
void LLVMRemoveFunctionAttr(LLVMValueRef, LLVMAttribute);

uint LLVMCountParams(LLVMValueRef);
void LLVMGetParams(LLVMValueRef, LLVMValueRef*);
addr LLVMGetParam(LLVMValueRef, uint);    ; result LLVMValueRef
addr LLVMGetParamParent(LLVMValueRef);    ; result LLVMValueRef
addr LLVMGetFirstParam(LLVMValueRef);    ; result LLVMValueRef
addr LLVMGetLastParam(LLVMValueRef);    ; result LLVMValueRef
addr LLVMGetNextParam(LLVMValueRef);    ; result LLVMValueRef
addr LLVMGetPreviousParam(LLVMValueRef);    ; result LLVMValueRef
void LLVMAddAttribute(LLVMValueRef, LLVMAttribute);
void LLVMRemoveAttribute(LLVMValueRef, LLVMAttribute);
addr LLVMGetAttribute(LLVMValueRef);    ; result LLVMAttribute
void LLVMSetParamAlignment(LLVMValueRef, uint);

addr LLVMBasicBlockAsValue(LLVMBasicBlockRef);    ; result LLVMValueRef
uint LLVMValueIsBasicBlock(LLVMValueRef);    ; result LLVMBool
addr LLVMValueAsBasicBlock(LLVMValueRef);    ; result LLVMBasicBlockRef
addr LLVMGetBasicBlockParent(LLVMBasicBlockRef);    ; result LLVMValueRef
uint LLVMCountBasicBlocks(LLVMValueRef);
void LLVMGetBasicBlocks(LLVMValueRef, LLVMBasicBlockRef*);
addr LLVMGetFirstBasicBlock(LLVMValueRef);    ; result LLVMBasicBlockRef
addr LLVMGetLastBasicBlock(LLVMValueRef);    ; result LLVMBasicBlockRef
addr LLVMGetNextBasicBlock(LLVMBasicBlockRef);    ; result LLVMBasicBlockRef
addr LLVMGetPreviousBasicBlock(LLVMBasicBlockRef);    ; result LLVMBasicBlockRef
addr LLVMGetEntryBasicBlock(LLVMValueRef);    ; result LLVMBasicBlockRef

addr LLVMAppendBasicBlockInContext(LLVMContextRef, LLVMValueRef, string);    ; result LLVMBasicBlockRef
addr LLVMInsertBasicBlockInContext(LLVMContextRef, LLVMBasicBlockRef, string);    ; result LLVMBasicBlockRef

addr LLVMAppendBasicBlock(LLVMValueRef, string);    ; result LLVMBasicBlockRef
addr LLVMInsertBasicBlock(LLVMBasicBlockRef, string);    ; result LLVMBasicBlockRef
void LLVMDeleteBasicBlock(LLVMBasicBlockRef);

void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef, LLVMBasicBlockRef);
void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef, LLVMBasicBlockRef);

addr LLVMGetInstructionParent(LLVMValueRef);    ; result LLVMBasicBlockRef
addr LLVMGetFirstInstruction(LLVMBasicBlockRef);    ; result LLVMValueRef
addr LLVMGetLastInstruction(LLVMBasicBlockRef);    ; result LLVMValueRef
addr LLVMGetNextInstruction(LLVMValueRef);    ; result LLVMValueRef
addr LLVMGetPreviousInstruction(LLVMValueRef);    ; result LLVMValueRef

void LLVMSetInstructionCallConv(LLVMValueRef, LLVMCallConv);
uint LLVMGetInstructionCallConv(LLVMValueRef);
void LLVMAddInstrAttribute(LLVMValueRef, uint, LLVMAttribute);
void LLVMRemoveInstrAttribute(LLVMValueRef, uint, LLVMAttribute);
void LLVMSetInstrParamAlignment(LLVMValueRef, uint, uint);

uint LLVMIsTailCall(LLVMValueRef);    ; result LLVMBool
void LLVMSetTailCall(LLVMValueRef, LLVMBool);

void LLVMAddIncoming(LLVMValueRef, array(LLVMValueRef,arg4)*, array(LLVMBasicBlockRef,arg4)*, uint);
uint LLVMCountIncoming(LLVMValueRef);
addr LLVMGetIncomingValue(LLVMValueRef, uint);    ; result LLVMValueRef
addr LLVMGetIncomingBlock(LLVMValueRef, uint);    ; result LLVMBasicBlockRef


addr LLVMCreateBuilderInContext(LLVMContextRef);    ; result LLVMBuilderRef
addr LLVMCreateBuilder(void);    ; result LLVMBuilderRef
void LLVMPositionBuilder(LLVMBuilderRef, LLVMBasicBlockRef, LLVMValueRef);
void LLVMPositionBuilderBefore(LLVMBuilderRef, LLVMValueRef);
void LLVMPositionBuilderAtEnd(LLVMBuilderRef, LLVMBasicBlockRef);
addr LLVMGetInsertBlock(LLVMBuilderRef);    ; result LLVMBasicBlockRef
void LLVMClearInsertionPosition(LLVMBuilderRef);
void LLVMInsertIntoBuilder(LLVMBuilderRef, LLVMValueRef);
void LLVMInsertIntoBuilderWithName(LLVMBuilderRef, LLVMValueRef, string);
void LLVMDisposeBuilder(LLVMBuilderRef);

void LLVMSetCurrentDebugLocation(LLVMBuilderRef, LLVMValueRef);
addr LLVMGetCurrentDebugLocation(LLVMBuilderRef);    ; result LLVMValueRef
void LLVMSetInstDebugLocation(LLVMBuilderRef, LLVMValueRef);

addr LLVMBuildRetVoid(LLVMBuilderRef);    ; result LLVMValueRef
addr LLVMBuildRet(LLVMBuilderRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMBuildAggregateRet(LLVMBuilderRef, array(LLVMValueRef,arg3)*, uint);    ; result LLVMValueRef
addr LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef);    ; result LLVMValueRef
addr LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef, LLVMBasicBlockRef, LLVMBasicBlockRef);    ; result LLVMValueRef
addr LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef, LLVMBasicBlockRef, uint);    ; result LLVMValueRef
addr LLVMBuildIndirectBr(LLVMBuilderRef, LLVMValueRef, uint);    ; result LLVMValueRef
addr LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef, array(LLVMValueRef,arg4)*, uint, LLVMBasicBlockRef, LLVMBasicBlockRef, string);    ; result LLVMValueRef
addr LLVMBuildUnwind(LLVMBuilderRef);    ; result LLVMValueRef
addr LLVMBuildUnreachable(LLVMBuilderRef);    ; result LLVMValueRef

void LLVMAddCase(LLVMValueRef, LLVMValueRef, LLVMBasicBlockRef);

void LLVMAddDestination(LLVMValueRef, LLVMBasicBlockRef);

addr LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildSub(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildURem(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildShl(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildOr(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildXor(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildBinOp(LLVMBuilderRef, LLVMOpcode, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNSWNeg(LLVMBuilderRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNUWNeg(LLVMBuilderRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildNot(LLVMBuilderRef, LLVMValueRef, string);    ; result LLVMValueRef

addr LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildFree(LLVMBuilderRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildStore(LLVMBuilderRef, LLVMValueRef, LLVMValueRef);    ; result LLVMValueRef
addr LLVMBuildGEP(LLVMBuilderRef, LLVMValueRef, array(LLVMValueRef,arg4)*, uint, string);    ; result LLVMValueRef
addr LLVMBuildInBoundsGEP(LLVMBuilderRef, LLVMValueRef, array(LLVMValueRef,arg4)*, uint, string);    ; result LLVMValueRef
addr LLVMBuildStructGEP(LLVMBuilderRef, LLVMValueRef, uint, string);    ; result LLVMValueRef
addr LLVMBuildGlobalString(LLVMBuilderRef, string, string);    ; result LLVMValueRef
addr LLVMBuildGlobalStringPtr(LLVMBuilderRef, string, string);    ; result LLVMValueRef

addr LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildCast(LLVMBuilderRef, LLVMOpcode, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef

addr LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef

addr LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildCall(LLVMBuilderRef, LLVMValueRef, array(LLVMValueRef,arg4)*, uint, string);    ; result LLVMValueRef
addr LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef, LLVMTypeRef, string);    ; result LLVMValueRef
addr LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef, uint, string);    ; result LLVMValueRef
addr LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, uint, string);    ; result LLVMValueRef

addr LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef, string);    ; result LLVMValueRef
addr LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef, LLVMValueRef, string);    ; result LLVMValueRef



; ExecutionEngine.h

addr LLVMCreateGenericValueOfInt(LLVMTypeRef, ulong, LLVMBool);    ; result LLVMGenericValueRef
addr LLVMCreateGenericValueOfPointer(addr);    ; result LLVMGenericValueRef
addr LLVMCreateGenericValueOfFloat(LLVMTypeRef, double);   ; result LLVMGenericValueRef
uint LLVMGenericValueIntWidth(LLVMGenericValueRef);
ulong LLVMGenericValueToInt(LLVMGenericValueRef, LLVMBool);

addr LLVMGenericValueToPointer(LLVMGenericValueRef);
double LLVMGenericValueToFloat(LLVMTypeRef, LLVMGenericValueRef);

void LLVMDisposeGenericValue(LLVMGenericValueRef);


int LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef*, LLVMModuleRef, string*);    ; result LLVMBool
int LLVMCreateInterpreterForModule(LLVMExecutionEngineRef*, LLVMModuleRef, string*);    ; result LLVMBool
int LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef*, LLVMModuleRef, uint, string*);    ; result LLVMBool

void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef);
void LLVMRunStaticConstructors(LLVMExecutionEngineRef);
void LLVMRunStaticDestructors(LLVMExecutionEngineRef);

int LLVMRunFunctionAsMain(LLVMExecutionEngineRef, LLVMValueRef, uint, array(string,arg3)*, string*);
addr LLVMRunFunction(LLVMExecutionEngineRef, LLVMValueRef, uint, array(LLVMGenericValueRef,arg3)*);   ; result LLVMGenericValueRef

void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef, LLVMValueRef);

void LLVMAddModule(LLVMExecutionEngineRef, LLVMModuleRef);
int LLVMRemoveModule(LLVMExecutionEngineRef, LLVMModuleRef, LLVMModuleRef*, string*);    ; result LLVMBool

int LLVMFindFunction(LLVMExecutionEngineRef, string, LLVMValueRef*);   ; result LLVMBool

addr LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef, LLVMValueRef);

addr LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef);   ; result LLVMTargetDataRef
addr LLVMGetExecutionEngineTargetMachine(LLVMExecutionEngineRef);   ; result LLVMTargetMachineRef

void LLVMAddGlobalMapping(LLVMExecutionEngineRef, LLVMValueRef, addr);
addr LLVMGetPointerToGlobal(LLVMExecutionEngineRef, LLVMValueRef);

addr LLVMCreateModuleProviderForExistingModule(LLVMModuleRef);    ; result LLVMModuleProviderRef

void LLVMDisposeModuleProvider(LLVMModuleProviderRef);


uint LLVMCreateMemoryBufferWithContentsOfFile(string, LLVMMemoryBufferRef*, string*);    ; result LLVMBool
uint LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef*, string*);    ; result LLVMBool
void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef);


addr LLVMCreatePassManager(void);    ; result LLVMPassManagerRef
addr LLVMCreateFunctionPassManagerForModule(LLVMModuleRef);    ; result LLVMPassManagerRef
uint LLVMRunPassManager(LLVMPassManagerRef, LLVMModuleRef);    ; result LLVMBool
uint LLVMInitializeFunctionPassManager(LLVMPassManagerRef);    ; result LLVMBool
uint LLVMRunFunctionPassManager(LLVMPassManagerRef, LLVMValueRef);    ; result LLVMBool
uint LLVMFinalizeFunctionPassManager(LLVMPassManagerRef);    ; result LLVMBool
void LLVMDisposePassManager(LLVMPassManagerRef);


; PassManagerBuilder.h

typedef LLVMPassManagerBuilderRef = addr

addr LLVMPassManagerBuilderCreate();   ; result LLVMPassManagerBuilderRef
void LLVMPassManagerBuilderDispose(LLVMPassManagerBuilderRef);

void LLVMPassManagerBuilderSetOptLevel(LLVMPassManagerBuilderRef, uint);
void LLVMPassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef, uint);
void LLVMPassManagerBuilderSetDisableUnitAtATime(LLVMPassManagerBuilderRef, LLVMBool);
void LLVMPassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef, LLVMBool);
void LLVMPassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef, LLVMBool);
void LLVMPassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef, uint);
void LLVMPassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef, LLVMPassManagerRef);

void LLVMPassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef, LLVMPassManagerRef);
void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef, LLVMPassManagerRef, LLVMBool, LLVMBool);