{-# LINE 1 "src/13/LLVM/Raw/Core.hsc" #-}
{-# LANGUAGE Safe #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE DeriveDataTypeable #-}
module LLVM.Raw.Core where

import qualified LLVM.FFI.Base as LLVM

import qualified Foreign.C.Types as C
import Foreign.C.String (CString)
import Foreign.Ptr (Ptr, FunPtr)

import Data.Typeable (Typeable)

import Data.Word (Word8, Word32, Word64)


type CDouble  = C.CDouble
type CInt     = C.CInt
type CUInt    = C.CUInt
type CLLong   = C.CLLong
type CULLong  = C.CULLong
type CSize    = C.CSize






data Module
    deriving (Typeable)
type ModuleRef = Ptr Module

data ModuleProvider
    deriving (Typeable)
type ModuleProviderRef = Ptr ModuleProvider

data Type
    deriving (Typeable)
type TypeRef = Ptr Type

data BasicBlock
    deriving (Typeable)
type BasicBlockRef = Ptr BasicBlock

data Value
    deriving (Typeable)
type ValueRef = Ptr Value

data OpaqueUse
    deriving (Typeable)
type UseRef = Ptr OpaqueUse

data Builder
    deriving (Typeable)
type BuilderRef = Ptr Builder

data MemoryBuffer
    deriving (Typeable)
type MemoryBufferRef = Ptr MemoryBuffer

data PassManager
    deriving (Typeable)
type PassManagerRef = Ptr PassManager

data PassRegistry
    deriving (Typeable)
type PassRegistryRef = Ptr PassRegistry

data Context
    deriving (Typeable)
type ContextRef = Ptr Context

{-
data Attribute
    deriving (Typeable)
-}
-- until 3.9
newtype Attribute = Attribute Word32
type AttributeRef = Ptr Attribute

newtype AttributeIndex = AttributeIndex Word32
{-# LINE 83 "src/13/LLVM/Raw/Core.hsc" #-}

attributeReturnIndex, attributeFunctionIndex :: AttributeIndex
attributeReturnIndex   = AttributeIndex (0)
{-# LINE 86 "src/13/LLVM/Raw/Core.hsc" #-}
attributeFunctionIndex = AttributeIndex (-1)
{-# LINE 87 "src/13/LLVM/Raw/Core.hsc" #-}


data Metadata
    deriving (Typeable)
type MetadataRef = Ptr Metadata

data DiagnosticInfo
    deriving (Typeable)
type DiagnosticInfoRef = Ptr DiagnosticInfo

data NamedMDNode
    deriving (Typeable)
type NamedMDNodeRef = Ptr NamedMDNode


data ModuleFlagEntry
    deriving (Typeable)
data ValueMetadataEntry
    deriving (Typeable)

type DiagnosticHandler = FunPtr (DiagnosticInfoRef -> Ptr () -> IO ())
type YieldCallback = FunPtr (ContextRef -> Ptr () -> IO ())

newtype CallingConvention = CallingConvention {unCallingConvention :: CUInt}

newtype AtomicOrdering = AtomicOrdering Word32
{-# LINE 113 "src/13/LLVM/Raw/Core.hsc" #-}
newtype AtomicRMWBinOp = AtomicRMWBinOp Word32
{-# LINE 114 "src/13/LLVM/Raw/Core.hsc" #-}
newtype DiagnosticSeverity = DiagnosticSeverity Word32
{-# LINE 115 "src/13/LLVM/Raw/Core.hsc" #-}
newtype DLLStorageClass = DLLStorageClass Word32
{-# LINE 116 "src/13/LLVM/Raw/Core.hsc" #-}
-- newtype InlineAsmDialect = InlineAsmDialect #{type LLVMInlineAsmDialect}
newtype InlineAsmDialect = InlineAsmDialect Word32
newtype IntPredicate = IntPredicate Word32
{-# LINE 119 "src/13/LLVM/Raw/Core.hsc" #-}
newtype Linkage = Linkage Word32
{-# LINE 120 "src/13/LLVM/Raw/Core.hsc" #-}
-- newtype ModuleFlagBehavior = ModuleFlagBehavior #{type LLVMModuleFlagBehavior}
newtype ModuleFlagBehavior = ModuleFlagBehavior Word32
newtype Opcode = Opcode Word32
{-# LINE 123 "src/13/LLVM/Raw/Core.hsc" #-}
newtype RealPredicate = RealPredicate Word32
{-# LINE 124 "src/13/LLVM/Raw/Core.hsc" #-}
newtype ThreadLocalMode = ThreadLocalMode Word32
{-# LINE 125 "src/13/LLVM/Raw/Core.hsc" #-}
newtype TypeKind = TypeKind {unTypeKind :: Word32}
{-# LINE 126 "src/13/LLVM/Raw/Core.hsc" #-}
-- newtype UnnamedAddr = UnnamedAddr #{type LLVMUnnamedAddr}
newtype UnnamedAddr = UnnamedAddr Word32
newtype ValueKind = ValueKind Word32
{-# LINE 129 "src/13/LLVM/Raw/Core.hsc" #-}
newtype Visibility = Visibility Word32
{-# LINE 130 "src/13/LLVM/Raw/Core.hsc" #-}


foreign import ccall unsafe "LLVMInitializeCore" initializeCore
    :: PassRegistryRef -> IO ()

foreign import ccall unsafe "LLVMShutdown" shutdown
    :: IO ()

foreign import ccall unsafe "LLVMCreateMessage" createMessage
    :: CString -> IO CString

foreign import ccall unsafe "LLVMDisposeMessage" disposeMessage
    :: CString -> IO ()

foreign import ccall unsafe "LLVMContextCreate" contextCreate
    :: IO ContextRef

foreign import ccall unsafe "LLVMGetGlobalContext" getGlobalContext
    :: IO ContextRef

foreign import ccall unsafe "LLVMContextSetDiagnosticHandler" contextSetDiagnosticHandler
    :: ContextRef -> DiagnosticHandler -> (Ptr ()) -> IO ()

foreign import ccall unsafe "LLVMContextGetDiagnosticHandler" contextGetDiagnosticHandler
    :: ContextRef -> IO DiagnosticHandler

foreign import ccall unsafe "LLVMContextGetDiagnosticContext" contextGetDiagnosticContext
    :: ContextRef -> IO (Ptr ())

foreign import ccall unsafe "LLVMContextSetYieldCallback" contextSetYieldCallback
    :: ContextRef -> YieldCallback -> (Ptr ()) -> IO ()

foreign import ccall unsafe "LLVMContextShouldDiscardValueNames" contextShouldDiscardValueNames
    :: ContextRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMContextSetDiscardValueNames" contextSetDiscardValueNames
    :: ContextRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMContextDispose" contextDispose
    :: ContextRef -> IO ()

foreign import ccall unsafe "LLVMGetDiagInfoDescription" getDiagInfoDescription
    :: DiagnosticInfoRef -> IO CString

foreign import ccall unsafe "LLVMGetDiagInfoSeverity" getDiagInfoSeverity
    :: DiagnosticInfoRef -> IO DiagnosticSeverity

foreign import ccall unsafe "LLVMGetMDKindIDInContext" getMDKindIDInContext
    :: ContextRef -> CString -> CUInt -> IO CUInt

foreign import ccall unsafe "LLVMGetMDKindID" getMDKindID
    :: CString -> CUInt -> IO CUInt

foreign import ccall unsafe "LLVMGetEnumAttributeKindForName" getEnumAttributeKindForName
    :: CString -> CSize -> IO CUInt

foreign import ccall unsafe "LLVMGetLastEnumAttributeKind" getLastEnumAttributeKind
    :: IO CUInt

foreign import ccall unsafe "LLVMCreateEnumAttribute" createEnumAttribute
    :: ContextRef -> CUInt -> Word64 -> IO AttributeRef

foreign import ccall unsafe "LLVMGetEnumAttributeKind" getEnumAttributeKind
    :: AttributeRef -> IO CUInt

foreign import ccall unsafe "LLVMGetEnumAttributeValue" getEnumAttributeValue
    :: AttributeRef -> IO Word64

foreign import ccall unsafe "LLVMCreateTypeAttribute" createTypeAttribute
    :: ContextRef -> CUInt -> TypeRef -> IO AttributeRef

foreign import ccall unsafe "LLVMGetTypeAttributeValue" getTypeAttributeValue
    :: AttributeRef -> IO TypeRef

foreign import ccall unsafe "LLVMCreateStringAttribute" createStringAttribute
    :: ContextRef -> CString -> CUInt -> CString -> CUInt -> IO AttributeRef

foreign import ccall unsafe "LLVMGetStringAttributeKind" getStringAttributeKind
    :: AttributeRef -> (Ptr CUInt) -> IO CString

foreign import ccall unsafe "LLVMGetStringAttributeValue" getStringAttributeValue
    :: AttributeRef -> (Ptr CUInt) -> IO CString

foreign import ccall unsafe "LLVMIsEnumAttribute" isEnumAttribute
    :: AttributeRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMIsStringAttribute" isStringAttribute
    :: AttributeRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMIsTypeAttribute" isTypeAttribute
    :: AttributeRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetTypeByName2" getTypeByName2
    :: ContextRef -> CString -> IO TypeRef

foreign import ccall unsafe "LLVMModuleCreateWithName" moduleCreateWithName
    :: CString -> IO ModuleRef

foreign import ccall unsafe "LLVMModuleCreateWithNameInContext" moduleCreateWithNameInContext
    :: CString -> ContextRef -> IO ModuleRef

foreign import ccall unsafe "LLVMCloneModule" cloneModule
    :: ModuleRef -> IO ModuleRef

foreign import ccall unsafe "LLVMDisposeModule" disposeModule
    :: ModuleRef -> IO ()

foreign import ccall unsafe "LLVMGetModuleIdentifier" getModuleIdentifier
    :: ModuleRef -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMSetModuleIdentifier" setModuleIdentifier
    :: ModuleRef -> CString -> CSize -> IO ()

foreign import ccall unsafe "LLVMGetSourceFileName" getSourceFileName
    :: ModuleRef -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMSetSourceFileName" setSourceFileName
    :: ModuleRef -> CString -> CSize -> IO ()

foreign import ccall unsafe "LLVMGetDataLayoutStr" getDataLayoutStr
    :: ModuleRef -> IO CString

foreign import ccall unsafe "LLVMGetDataLayout" getDataLayout
    :: ModuleRef -> IO CString

foreign import ccall unsafe "LLVMSetDataLayout" setDataLayout
    :: ModuleRef -> CString -> IO ()

foreign import ccall unsafe "LLVMGetTarget" getTarget
    :: ModuleRef -> IO CString

foreign import ccall unsafe "LLVMSetTarget" setTarget
    :: ModuleRef -> CString -> IO ()

foreign import ccall unsafe "LLVMCopyModuleFlagsMetadata" copyModuleFlagsMetadata
    :: ModuleRef -> (Ptr CSize) -> IO (Ptr ModuleFlagEntry)

foreign import ccall unsafe "LLVMDisposeModuleFlagsMetadata" disposeModuleFlagsMetadata
    :: (Ptr ModuleFlagEntry) -> IO ()

foreign import ccall unsafe "LLVMModuleFlagEntriesGetFlagBehavior" moduleFlagEntriesGetFlagBehavior
    :: (Ptr ModuleFlagEntry) -> CUInt -> IO ModuleFlagBehavior

foreign import ccall unsafe "LLVMModuleFlagEntriesGetKey" moduleFlagEntriesGetKey
    :: (Ptr ModuleFlagEntry) -> CUInt -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMModuleFlagEntriesGetMetadata" moduleFlagEntriesGetMetadata
    :: (Ptr ModuleFlagEntry) -> CUInt -> IO MetadataRef

foreign import ccall unsafe "LLVMGetModuleFlag" getModuleFlag
    :: ModuleRef -> CString -> CSize -> IO MetadataRef

foreign import ccall unsafe "LLVMAddModuleFlag" addModuleFlag
    :: ModuleRef -> ModuleFlagBehavior -> CString -> CSize -> MetadataRef -> IO ()

foreign import ccall unsafe "LLVMDumpModule" dumpModule
    :: ModuleRef -> IO ()

foreign import ccall unsafe "LLVMPrintModuleToFile" printModuleToFile
    :: ModuleRef -> CString -> (Ptr CString) -> IO LLVM.Bool

foreign import ccall unsafe "LLVMPrintModuleToString" printModuleToString
    :: ModuleRef -> IO CString

foreign import ccall unsafe "LLVMGetModuleInlineAsm" getModuleInlineAsm
    :: ModuleRef -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMSetModuleInlineAsm2" setModuleInlineAsm2
    :: ModuleRef -> CString -> CSize -> IO ()

foreign import ccall unsafe "LLVMAppendModuleInlineAsm" appendModuleInlineAsm
    :: ModuleRef -> CString -> CSize -> IO ()

foreign import ccall unsafe "LLVMGetInlineAsm" getInlineAsm
    :: TypeRef -> CString -> CSize -> CString -> CSize -> LLVM.Bool -> LLVM.Bool -> InlineAsmDialect -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMGetModuleContext" getModuleContext
    :: ModuleRef -> IO ContextRef

foreign import ccall unsafe "LLVMGetTypeByName" getTypeByName
    :: ModuleRef -> CString -> IO TypeRef

foreign import ccall unsafe "LLVMGetFirstNamedMetadata" getFirstNamedMetadata
    :: ModuleRef -> IO NamedMDNodeRef

foreign import ccall unsafe "LLVMGetLastNamedMetadata" getLastNamedMetadata
    :: ModuleRef -> IO NamedMDNodeRef

foreign import ccall unsafe "LLVMGetNextNamedMetadata" getNextNamedMetadata
    :: NamedMDNodeRef -> IO NamedMDNodeRef

foreign import ccall unsafe "LLVMGetPreviousNamedMetadata" getPreviousNamedMetadata
    :: NamedMDNodeRef -> IO NamedMDNodeRef

foreign import ccall unsafe "LLVMGetNamedMetadata" getNamedMetadata
    :: ModuleRef -> CString -> CSize -> IO NamedMDNodeRef

foreign import ccall unsafe "LLVMGetOrInsertNamedMetadata" getOrInsertNamedMetadata
    :: ModuleRef -> CString -> CSize -> IO NamedMDNodeRef

foreign import ccall unsafe "LLVMGetNamedMetadataName" getNamedMetadataName
    :: NamedMDNodeRef -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMGetNamedMetadataNumOperands" getNamedMetadataNumOperands
    :: ModuleRef -> CString -> IO CUInt

foreign import ccall unsafe "LLVMGetNamedMetadataOperands" getNamedMetadataOperands
    :: ModuleRef -> CString -> (Ptr ValueRef) -> IO ()

foreign import ccall unsafe "LLVMAddNamedMetadataOperand" addNamedMetadataOperand
    :: ModuleRef -> CString -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMGetDebugLocDirectory" getDebugLocDirectory
    :: ValueRef -> (Ptr CUInt) -> IO CString

foreign import ccall unsafe "LLVMGetDebugLocFilename" getDebugLocFilename
    :: ValueRef -> (Ptr CUInt) -> IO CString

foreign import ccall unsafe "LLVMGetDebugLocLine" getDebugLocLine
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetDebugLocColumn" getDebugLocColumn
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMAddFunction" addFunction
    :: ModuleRef -> CString -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetNamedFunction" getNamedFunction
    :: ModuleRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMGetFirstFunction" getFirstFunction
    :: ModuleRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetLastFunction" getLastFunction
    :: ModuleRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetNextFunction" getNextFunction
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetPreviousFunction" getPreviousFunction
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMSetModuleInlineAsm" setModuleInlineAsm
    :: ModuleRef -> CString -> IO ()

foreign import ccall unsafe "LLVMGetTypeKind" getTypeKind
    :: TypeRef -> IO TypeKind

foreign import ccall unsafe "LLVMTypeIsSized" typeIsSized
    :: TypeRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetTypeContext" getTypeContext
    :: TypeRef -> IO ContextRef

foreign import ccall unsafe "LLVMPrintTypeToString" printTypeToString
    :: TypeRef -> IO CString

foreign import ccall unsafe "LLVMInt1TypeInContext" int1TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMInt8TypeInContext" int8TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMInt16TypeInContext" int16TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMInt32TypeInContext" int32TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMInt64TypeInContext" int64TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMInt128TypeInContext" int128TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMIntTypeInContext" intTypeInContext
    :: ContextRef -> CUInt -> IO TypeRef

foreign import ccall unsafe "LLVMInt1Type" int1Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMInt8Type" int8Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMInt16Type" int16Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMInt32Type" int32Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMInt64Type" int64Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMInt128Type" int128Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMIntType" intType
    :: CUInt -> IO TypeRef

foreign import ccall unsafe "LLVMGetIntTypeWidth" getIntTypeWidth
    :: TypeRef -> IO CUInt

foreign import ccall unsafe "LLVMHalfTypeInContext" halfTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMBFloatTypeInContext" bFloatTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMFloatTypeInContext" floatTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMDoubleTypeInContext" doubleTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMX86FP80TypeInContext" x86FP80TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMFP128TypeInContext" fP128TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMPPCFP128TypeInContext" pPCFP128TypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMHalfType" halfType
    :: IO TypeRef

foreign import ccall unsafe "LLVMBFloatType" bFloatType
    :: IO TypeRef

foreign import ccall unsafe "LLVMFloatType" floatType
    :: IO TypeRef

foreign import ccall unsafe "LLVMDoubleType" doubleType
    :: IO TypeRef

foreign import ccall unsafe "LLVMX86FP80Type" x86FP80Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMFP128Type" fP128Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMPPCFP128Type" pPCFP128Type
    :: IO TypeRef

foreign import ccall unsafe "LLVMFunctionType" functionType
    :: TypeRef -> (Ptr TypeRef) -> CUInt -> LLVM.Bool -> IO TypeRef

foreign import ccall unsafe "LLVMIsFunctionVarArg" isFunctionVarArg
    :: TypeRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetReturnType" getReturnType
    :: TypeRef -> IO TypeRef

foreign import ccall unsafe "LLVMCountParamTypes" countParamTypes
    :: TypeRef -> IO CUInt

foreign import ccall unsafe "LLVMGetParamTypes" getParamTypes
    :: TypeRef -> (Ptr TypeRef) -> IO ()

foreign import ccall unsafe "LLVMStructTypeInContext" structTypeInContext
    :: ContextRef -> (Ptr TypeRef) -> CUInt -> LLVM.Bool -> IO TypeRef

foreign import ccall unsafe "LLVMStructType" structType
    :: (Ptr TypeRef) -> CUInt -> LLVM.Bool -> IO TypeRef

foreign import ccall unsafe "LLVMStructCreateNamed" structCreateNamed
    :: ContextRef -> CString -> IO TypeRef

foreign import ccall unsafe "LLVMGetStructName" getStructName
    :: TypeRef -> IO CString

foreign import ccall unsafe "LLVMStructSetBody" structSetBody
    :: TypeRef -> (Ptr TypeRef) -> CUInt -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMCountStructElementTypes" countStructElementTypes
    :: TypeRef -> IO CUInt

foreign import ccall unsafe "LLVMGetStructElementTypes" getStructElementTypes
    :: TypeRef -> (Ptr TypeRef) -> IO ()

foreign import ccall unsafe "LLVMStructGetTypeAtIndex" structGetTypeAtIndex
    :: TypeRef -> CUInt -> IO TypeRef

foreign import ccall unsafe "LLVMIsPackedStruct" isPackedStruct
    :: TypeRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMIsOpaqueStruct" isOpaqueStruct
    :: TypeRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMIsLiteralStruct" isLiteralStruct
    :: TypeRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetElementType" getElementType
    :: TypeRef -> IO TypeRef

foreign import ccall unsafe "LLVMGetSubtypes" getSubtypes
    :: TypeRef -> (Ptr TypeRef) -> IO ()

foreign import ccall unsafe "LLVMGetNumContainedTypes" getNumContainedTypes
    :: TypeRef -> IO CUInt

foreign import ccall unsafe "LLVMArrayType" arrayType
    :: TypeRef -> CUInt -> IO TypeRef

foreign import ccall unsafe "LLVMGetArrayLength" getArrayLength
    :: TypeRef -> IO CUInt

foreign import ccall unsafe "LLVMPointerType" pointerType
    :: TypeRef -> CUInt -> IO TypeRef

foreign import ccall unsafe "LLVMGetPointerAddressSpace" getPointerAddressSpace
    :: TypeRef -> IO CUInt

foreign import ccall unsafe "LLVMVectorType" vectorType
    :: TypeRef -> CUInt -> IO TypeRef

foreign import ccall unsafe "LLVMScalableVectorType" scalableVectorType
    :: TypeRef -> CUInt -> IO TypeRef

foreign import ccall unsafe "LLVMGetVectorSize" getVectorSize
    :: TypeRef -> IO CUInt

foreign import ccall unsafe "LLVMVoidTypeInContext" voidTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMLabelTypeInContext" labelTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMX86MMXTypeInContext" x86MMXTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMX86AMXTypeInContext" x86AMXTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMTokenTypeInContext" tokenTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMMetadataTypeInContext" metadataTypeInContext
    :: ContextRef -> IO TypeRef

foreign import ccall unsafe "LLVMVoidType" voidType
    :: IO TypeRef

foreign import ccall unsafe "LLVMLabelType" labelType
    :: IO TypeRef

foreign import ccall unsafe "LLVMX86MMXType" x86MMXType
    :: IO TypeRef

foreign import ccall unsafe "LLVMX86AMXType" x86AMXType
    :: IO TypeRef

foreign import ccall unsafe "LLVMTypeOf" typeOf
    :: ValueRef -> IO TypeRef

foreign import ccall unsafe "LLVMGetValueKind" getValueKind
    :: ValueRef -> IO ValueKind

foreign import ccall unsafe "LLVMGetValueName2" getValueName2
    :: ValueRef -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMSetValueName2" setValueName2
    :: ValueRef -> CString -> CSize -> IO ()

foreign import ccall unsafe "LLVMDumpValue" dumpValue
    :: ValueRef -> IO ()

foreign import ccall unsafe "LLVMPrintValueToString" printValueToString
    :: ValueRef -> IO CString

foreign import ccall unsafe "LLVMReplaceAllUsesWith" replaceAllUsesWith
    :: ValueRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMIsConstant" isConstant
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMIsUndef" isUndef
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMIsPoison" isPoison
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMIsAMDNode" isAMDNode
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMIsAMDString" isAMDString
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetValueName" getValueName
    :: ValueRef -> IO CString

foreign import ccall unsafe "LLVMSetValueName" setValueName
    :: ValueRef -> CString -> IO ()

foreign import ccall unsafe "LLVMGetFirstUse" getFirstUse
    :: ValueRef -> IO UseRef

foreign import ccall unsafe "LLVMGetNextUse" getNextUse
    :: UseRef -> IO UseRef

foreign import ccall unsafe "LLVMGetUser" getUser
    :: UseRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetUsedValue" getUsedValue
    :: UseRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetOperand" getOperand
    :: ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMGetOperandUse" getOperandUse
    :: ValueRef -> CUInt -> IO UseRef

foreign import ccall unsafe "LLVMSetOperand" setOperand
    :: ValueRef -> CUInt -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMGetNumOperands" getNumOperands
    :: ValueRef -> IO CInt

foreign import ccall unsafe "LLVMConstNull" constNull
    :: TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstAllOnes" constAllOnes
    :: TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetUndef" getUndef
    :: TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetPoison" getPoison
    :: TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMIsNull" isNull
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMConstPointerNull" constPointerNull
    :: TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstInt" constInt
    :: TypeRef -> CULLong -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMConstIntOfArbitraryPrecision" constIntOfArbitraryPrecision
    :: TypeRef -> CUInt -> Ptr Word64 -> IO ValueRef

foreign import ccall unsafe "LLVMConstIntOfString" constIntOfString
    :: TypeRef -> CString -> Word8 -> IO ValueRef

foreign import ccall unsafe "LLVMConstIntOfStringAndSize" constIntOfStringAndSize
    :: TypeRef -> CString -> CUInt -> Word8 -> IO ValueRef

foreign import ccall unsafe "LLVMConstReal" constReal
    :: TypeRef -> CDouble -> IO ValueRef

foreign import ccall unsafe "LLVMConstRealOfString" constRealOfString
    :: TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMConstRealOfStringAndSize" constRealOfStringAndSize
    :: TypeRef -> CString -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMConstIntGetZExtValue" constIntGetZExtValue
    :: ValueRef -> IO CULLong

foreign import ccall unsafe "LLVMConstIntGetSExtValue" constIntGetSExtValue
    :: ValueRef -> IO CLLong

foreign import ccall unsafe "LLVMConstRealGetDouble" constRealGetDouble
    :: ValueRef -> (Ptr LLVM.Bool) -> IO CDouble

foreign import ccall unsafe "LLVMConstStringInContext" constStringInContext
    :: ContextRef -> CString -> CUInt -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMConstString" constString
    :: CString -> CUInt -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMIsConstantString" isConstantString
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetAsString" getAsString
    :: ValueRef -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMConstStructInContext" constStructInContext
    :: ContextRef -> (Ptr ValueRef) -> CUInt -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMConstStruct" constStruct
    :: (Ptr ValueRef) -> CUInt -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMConstArray" constArray
    :: TypeRef -> (Ptr ValueRef) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMConstNamedStruct" constNamedStruct
    :: TypeRef -> (Ptr ValueRef) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMGetElementAsConstant" getElementAsConstant
    :: ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMConstVector" constVector
    :: (Ptr ValueRef) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMGetConstOpcode" getConstOpcode
    :: ValueRef -> IO Opcode

foreign import ccall unsafe "LLVMAlignOf" alignOf
    :: TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMSizeOf" sizeOf
    :: TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNeg" constNeg
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNSWNeg" constNSWNeg
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNUWNeg" constNUWNeg
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFNeg" constFNeg
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNot" constNot
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstAdd" constAdd
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNSWAdd" constNSWAdd
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNUWAdd" constNUWAdd
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFAdd" constFAdd
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstSub" constSub
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNSWSub" constNSWSub
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNUWSub" constNUWSub
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFSub" constFSub
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstMul" constMul
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNSWMul" constNSWMul
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstNUWMul" constNUWMul
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFMul" constFMul
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstUDiv" constUDiv
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstExactUDiv" constExactUDiv
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstSDiv" constSDiv
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstExactSDiv" constExactSDiv
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFDiv" constFDiv
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstURem" constURem
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstSRem" constSRem
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFRem" constFRem
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstAnd" constAnd
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstOr" constOr
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstXor" constXor
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstICmp" constICmp
    :: IntPredicate -> ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFCmp" constFCmp
    :: RealPredicate -> ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstShl" constShl
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstLShr" constLShr
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstAShr" constAShr
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstGEP" constGEP
    :: ValueRef -> (Ptr ValueRef) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMConstInBoundsGEP" constInBoundsGEP
    :: ValueRef -> (Ptr ValueRef) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMConstTrunc" constTrunc
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstSExt" constSExt
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstZExt" constZExt
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFPTrunc" constFPTrunc
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFPExt" constFPExt
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstUIToFP" constUIToFP
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstSIToFP" constSIToFP
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFPToUI" constFPToUI
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstFPToSI" constFPToSI
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstPtrToInt" constPtrToInt
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstIntToPtr" constIntToPtr
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstBitCast" constBitCast
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstAddrSpaceCast" constAddrSpaceCast
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstZExtOrBitCast" constZExtOrBitCast
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstSExtOrBitCast" constSExtOrBitCast
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstTruncOrBitCast" constTruncOrBitCast
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstPointerCast" constPointerCast
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstIntCast" constIntCast
    :: ValueRef -> TypeRef -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMConstFPCast" constFPCast
    :: ValueRef -> TypeRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstSelect" constSelect
    :: ValueRef -> ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstExtractElement" constExtractElement
    :: ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstInsertElement" constInsertElement
    :: ValueRef -> ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstShuffleVector" constShuffleVector
    :: ValueRef -> ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstExtractValue" constExtractValue
    :: ValueRef -> (Ptr CUInt) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMConstInsertValue" constInsertValue
    :: ValueRef -> ValueRef -> (Ptr CUInt) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMBlockAddress" blockAddress
    :: ValueRef -> BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMConstInlineAsm" constInlineAsm
    :: TypeRef -> CString -> CString -> LLVM.Bool -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMGetGlobalParent" getGlobalParent
    :: ValueRef -> IO ModuleRef

foreign import ccall unsafe "LLVMIsDeclaration" isDeclaration
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetLinkage" getLinkage
    :: ValueRef -> IO Linkage

foreign import ccall unsafe "LLVMSetLinkage" setLinkage
    :: ValueRef -> Linkage -> IO ()

foreign import ccall unsafe "LLVMGetSection" getSection
    :: ValueRef -> IO CString

foreign import ccall unsafe "LLVMSetSection" setSection
    :: ValueRef -> CString -> IO ()

foreign import ccall unsafe "LLVMGetVisibility" getVisibility
    :: ValueRef -> IO Visibility

foreign import ccall unsafe "LLVMSetVisibility" setVisibility
    :: ValueRef -> Visibility -> IO ()

foreign import ccall unsafe "LLVMGetDLLStorageClass" getDLLStorageClass
    :: ValueRef -> IO DLLStorageClass

foreign import ccall unsafe "LLVMSetDLLStorageClass" setDLLStorageClass
    :: ValueRef -> DLLStorageClass -> IO ()

foreign import ccall unsafe "LLVMGetUnnamedAddress" getUnnamedAddress
    :: ValueRef -> IO UnnamedAddr

foreign import ccall unsafe "LLVMSetUnnamedAddress" setUnnamedAddress
    :: ValueRef -> UnnamedAddr -> IO ()

foreign import ccall unsafe "LLVMGlobalGetValueType" globalGetValueType
    :: ValueRef -> IO TypeRef

foreign import ccall unsafe "LLVMHasUnnamedAddr" hasUnnamedAddr
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetUnnamedAddr" setUnnamedAddr
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMGetAlignment" getAlignment
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMSetAlignment" setAlignment
    :: ValueRef -> CUInt -> IO ()

foreign import ccall unsafe "LLVMGlobalSetMetadata" globalSetMetadata
    :: ValueRef -> CUInt -> MetadataRef -> IO ()

foreign import ccall unsafe "LLVMGlobalEraseMetadata" globalEraseMetadata
    :: ValueRef -> CUInt -> IO ()

foreign import ccall unsafe "LLVMGlobalClearMetadata" globalClearMetadata
    :: ValueRef -> IO ()

foreign import ccall unsafe "LLVMGlobalCopyAllMetadata" globalCopyAllMetadata
    :: ValueRef -> (Ptr CSize) -> IO (Ptr ValueMetadataEntry)

foreign import ccall unsafe "LLVMDisposeValueMetadataEntries" disposeValueMetadataEntries
    :: (Ptr ValueMetadataEntry) -> IO ()

foreign import ccall unsafe "LLVMValueMetadataEntriesGetKind" valueMetadataEntriesGetKind
    :: (Ptr ValueMetadataEntry) -> CUInt -> IO CUInt

foreign import ccall unsafe "LLVMValueMetadataEntriesGetMetadata" valueMetadataEntriesGetMetadata
    :: (Ptr ValueMetadataEntry) -> CUInt -> IO MetadataRef

foreign import ccall unsafe "LLVMAddGlobal" addGlobal
    :: ModuleRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMAddGlobalInAddressSpace" addGlobalInAddressSpace
    :: ModuleRef -> TypeRef -> CString -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMGetNamedGlobal" getNamedGlobal
    :: ModuleRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMGetFirstGlobal" getFirstGlobal
    :: ModuleRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetLastGlobal" getLastGlobal
    :: ModuleRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetNextGlobal" getNextGlobal
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetPreviousGlobal" getPreviousGlobal
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMDeleteGlobal" deleteGlobal
    :: ValueRef -> IO ()

foreign import ccall unsafe "LLVMGetInitializer" getInitializer
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMSetInitializer" setInitializer
    :: ValueRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMIsThreadLocal" isThreadLocal
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetThreadLocal" setThreadLocal
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMIsGlobalConstant" isGlobalConstant
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetGlobalConstant" setGlobalConstant
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMGetThreadLocalMode" getThreadLocalMode
    :: ValueRef -> IO ThreadLocalMode

foreign import ccall unsafe "LLVMSetThreadLocalMode" setThreadLocalMode
    :: ValueRef -> ThreadLocalMode -> IO ()

foreign import ccall unsafe "LLVMIsExternallyInitialized" isExternallyInitialized
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetExternallyInitialized" setExternallyInitialized
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMAddAlias" addAlias
    :: ModuleRef -> TypeRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMGetNamedGlobalAlias" getNamedGlobalAlias
    :: ModuleRef -> CString -> CSize -> IO ValueRef

foreign import ccall unsafe "LLVMGetFirstGlobalAlias" getFirstGlobalAlias
    :: ModuleRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetLastGlobalAlias" getLastGlobalAlias
    :: ModuleRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetNextGlobalAlias" getNextGlobalAlias
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetPreviousGlobalAlias" getPreviousGlobalAlias
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMAliasGetAliasee" aliasGetAliasee
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMAliasSetAliasee" aliasSetAliasee
    :: ValueRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMDeleteFunction" deleteFunction
    :: ValueRef -> IO ()

foreign import ccall unsafe "LLVMHasPersonalityFn" hasPersonalityFn
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetPersonalityFn" getPersonalityFn
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMSetPersonalityFn" setPersonalityFn
    :: ValueRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMLookupIntrinsicID" lookupIntrinsicID
    :: CString -> CSize -> IO CUInt

foreign import ccall unsafe "LLVMGetIntrinsicID" getIntrinsicID
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetIntrinsicDeclaration" getIntrinsicDeclaration
    :: ModuleRef -> CUInt -> (Ptr TypeRef) -> CSize -> IO ValueRef

foreign import ccall unsafe "LLVMIntrinsicGetType" intrinsicGetType
    :: ContextRef -> CUInt -> (Ptr TypeRef) -> CSize -> IO TypeRef

foreign import ccall unsafe "LLVMIntrinsicGetName" intrinsicGetName
    :: CUInt -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMIntrinsicCopyOverloadedName" intrinsicCopyOverloadedName
    :: CUInt -> (Ptr TypeRef) -> CSize -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMIntrinsicCopyOverloadedName2" intrinsicCopyOverloadedName2
    :: ModuleRef -> CUInt -> (Ptr TypeRef) -> CSize -> (Ptr CSize) -> IO CString

foreign import ccall unsafe "LLVMIntrinsicIsOverloaded" intrinsicIsOverloaded
    :: CUInt -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetFunctionCallConv" getFunctionCallConv
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMSetFunctionCallConv" setFunctionCallConv
    :: ValueRef -> CUInt -> IO ()

foreign import ccall unsafe "LLVMGetGC" getGC
    :: ValueRef -> IO CString

foreign import ccall unsafe "LLVMSetGC" setGC
    :: ValueRef -> CString -> IO ()

foreign import ccall unsafe "LLVMAddAttributeAtIndex" addAttributeAtIndex
    :: ValueRef -> AttributeIndex -> AttributeRef -> IO ()

foreign import ccall unsafe "LLVMGetAttributeCountAtIndex" getAttributeCountAtIndex
    :: ValueRef -> AttributeIndex -> IO CUInt

foreign import ccall unsafe "LLVMGetAttributesAtIndex" getAttributesAtIndex
    :: ValueRef -> AttributeIndex -> (Ptr AttributeRef) -> IO ()

foreign import ccall unsafe "LLVMGetEnumAttributeAtIndex" getEnumAttributeAtIndex
    :: ValueRef -> AttributeIndex -> CUInt -> IO AttributeRef

foreign import ccall unsafe "LLVMGetStringAttributeAtIndex" getStringAttributeAtIndex
    :: ValueRef -> AttributeIndex -> CString -> CUInt -> IO AttributeRef

foreign import ccall unsafe "LLVMRemoveEnumAttributeAtIndex" removeEnumAttributeAtIndex
    :: ValueRef -> AttributeIndex -> CUInt -> IO ()

foreign import ccall unsafe "LLVMRemoveStringAttributeAtIndex" removeStringAttributeAtIndex
    :: ValueRef -> AttributeIndex -> CString -> CUInt -> IO ()

foreign import ccall unsafe "LLVMAddTargetDependentFunctionAttr" addTargetDependentFunctionAttr
    :: ValueRef -> CString -> CString -> IO ()

foreign import ccall unsafe "LLVMCountParams" countParams
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetParams" getParams
    :: ValueRef -> (Ptr ValueRef) -> IO ()

foreign import ccall unsafe "LLVMGetParam" getParam
    :: ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMGetParamParent" getParamParent
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetFirstParam" getFirstParam
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetLastParam" getLastParam
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetNextParam" getNextParam
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetPreviousParam" getPreviousParam
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMSetParamAlignment" setParamAlignment
    :: ValueRef -> CUInt -> IO ()

foreign import ccall unsafe "LLVMAddGlobalIFunc" addGlobalIFunc
    :: ModuleRef -> CString -> CSize -> TypeRef -> CUInt -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetNamedGlobalIFunc" getNamedGlobalIFunc
    :: ModuleRef -> CString -> CSize -> IO ValueRef

foreign import ccall unsafe "LLVMGetFirstGlobalIFunc" getFirstGlobalIFunc
    :: ModuleRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetLastGlobalIFunc" getLastGlobalIFunc
    :: ModuleRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetNextGlobalIFunc" getNextGlobalIFunc
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetPreviousGlobalIFunc" getPreviousGlobalIFunc
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetGlobalIFuncResolver" getGlobalIFuncResolver
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMSetGlobalIFuncResolver" setGlobalIFuncResolver
    :: ValueRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMEraseGlobalIFunc" eraseGlobalIFunc
    :: ValueRef -> IO ()

foreign import ccall unsafe "LLVMRemoveGlobalIFunc" removeGlobalIFunc
    :: ValueRef -> IO ()

foreign import ccall unsafe "LLVMMDStringInContext2" mDStringInContext2
    :: ContextRef -> CString -> CSize -> IO MetadataRef

foreign import ccall unsafe "LLVMMDNodeInContext2" mDNodeInContext2
    :: ContextRef -> (Ptr MetadataRef) -> CSize -> IO MetadataRef

foreign import ccall unsafe "LLVMMetadataAsValue" metadataAsValue
    :: ContextRef -> MetadataRef -> IO ValueRef

foreign import ccall unsafe "LLVMValueAsMetadata" valueAsMetadata
    :: ValueRef -> IO MetadataRef

foreign import ccall unsafe "LLVMGetMDString" getMDString
    :: ValueRef -> (Ptr CUInt) -> IO CString

foreign import ccall unsafe "LLVMGetMDNodeNumOperands" getMDNodeNumOperands
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetMDNodeOperands" getMDNodeOperands
    :: ValueRef -> (Ptr ValueRef) -> IO ()

foreign import ccall unsafe "LLVMMDStringInContext" mDStringInContext
    :: ContextRef -> CString -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMMDString" mDString
    :: CString -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMMDNodeInContext" mDNodeInContext
    :: ContextRef -> (Ptr ValueRef) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMMDNode" mDNode
    :: (Ptr ValueRef) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMBasicBlockAsValue" basicBlockAsValue
    :: BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMValueIsBasicBlock" valueIsBasicBlock
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMValueAsBasicBlock" valueAsBasicBlock
    :: ValueRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetBasicBlockName" getBasicBlockName
    :: BasicBlockRef -> IO CString

foreign import ccall unsafe "LLVMGetBasicBlockParent" getBasicBlockParent
    :: BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetBasicBlockTerminator" getBasicBlockTerminator
    :: BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMCountBasicBlocks" countBasicBlocks
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetBasicBlocks" getBasicBlocks
    :: ValueRef -> (Ptr BasicBlockRef) -> IO ()

foreign import ccall unsafe "LLVMGetFirstBasicBlock" getFirstBasicBlock
    :: ValueRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetLastBasicBlock" getLastBasicBlock
    :: ValueRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetNextBasicBlock" getNextBasicBlock
    :: BasicBlockRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetPreviousBasicBlock" getPreviousBasicBlock
    :: BasicBlockRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetEntryBasicBlock" getEntryBasicBlock
    :: ValueRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMInsertExistingBasicBlockAfterInsertBlock" insertExistingBasicBlockAfterInsertBlock
    :: BuilderRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMAppendExistingBasicBlock" appendExistingBasicBlock
    :: ValueRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMCreateBasicBlockInContext" createBasicBlockInContext
    :: ContextRef -> CString -> IO BasicBlockRef

foreign import ccall unsafe "LLVMAppendBasicBlockInContext" appendBasicBlockInContext
    :: ContextRef -> ValueRef -> CString -> IO BasicBlockRef

foreign import ccall unsafe "LLVMAppendBasicBlock" appendBasicBlock
    :: ValueRef -> CString -> IO BasicBlockRef

foreign import ccall unsafe "LLVMInsertBasicBlockInContext" insertBasicBlockInContext
    :: ContextRef -> BasicBlockRef -> CString -> IO BasicBlockRef

foreign import ccall unsafe "LLVMInsertBasicBlock" insertBasicBlock
    :: BasicBlockRef -> CString -> IO BasicBlockRef

foreign import ccall unsafe "LLVMDeleteBasicBlock" deleteBasicBlock
    :: BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMRemoveBasicBlockFromParent" removeBasicBlockFromParent
    :: BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMMoveBasicBlockBefore" moveBasicBlockBefore
    :: BasicBlockRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMMoveBasicBlockAfter" moveBasicBlockAfter
    :: BasicBlockRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMGetFirstInstruction" getFirstInstruction
    :: BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetLastInstruction" getLastInstruction
    :: BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMHasMetadata" hasMetadata
    :: ValueRef -> IO CInt

foreign import ccall unsafe "LLVMGetMetadata" getMetadata
    :: ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMSetMetadata" setMetadata
    :: ValueRef -> CUInt -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMInstructionGetAllMetadataOtherThanDebugLoc" instructionGetAllMetadataOtherThanDebugLoc
    :: ValueRef -> (Ptr CSize) -> IO (Ptr ValueMetadataEntry)

foreign import ccall unsafe "LLVMGetInstructionParent" getInstructionParent
    :: ValueRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetNextInstruction" getNextInstruction
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetPreviousInstruction" getPreviousInstruction
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMInstructionRemoveFromParent" instructionRemoveFromParent
    :: ValueRef -> IO ()

foreign import ccall unsafe "LLVMInstructionEraseFromParent" instructionEraseFromParent
    :: ValueRef -> IO ()

foreign import ccall unsafe "LLVMGetInstructionOpcode" getInstructionOpcode
    :: ValueRef -> IO Opcode

foreign import ccall unsafe "LLVMGetICmpPredicate" getICmpPredicate
    :: ValueRef -> IO IntPredicate

foreign import ccall unsafe "LLVMGetFCmpPredicate" getFCmpPredicate
    :: ValueRef -> IO RealPredicate

foreign import ccall unsafe "LLVMInstructionClone" instructionClone
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMIsATerminatorInst" isATerminatorInst
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMGetNumArgOperands" getNumArgOperands
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMSetInstructionCallConv" setInstructionCallConv
    :: ValueRef -> CUInt -> IO ()

foreign import ccall unsafe "LLVMGetInstructionCallConv" getInstructionCallConv
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMSetInstrParamAlignment" setInstrParamAlignment
    :: ValueRef -> CUInt -> CUInt -> IO ()

foreign import ccall unsafe "LLVMAddCallSiteAttribute" addCallSiteAttribute
    :: ValueRef -> AttributeIndex -> AttributeRef -> IO ()

foreign import ccall unsafe "LLVMGetCallSiteAttributeCount" getCallSiteAttributeCount
    :: ValueRef -> AttributeIndex -> IO CUInt

foreign import ccall unsafe "LLVMGetCallSiteAttributes" getCallSiteAttributes
    :: ValueRef -> AttributeIndex -> (Ptr AttributeRef) -> IO ()

foreign import ccall unsafe "LLVMGetCallSiteEnumAttribute" getCallSiteEnumAttribute
    :: ValueRef -> AttributeIndex -> CUInt -> IO AttributeRef

foreign import ccall unsafe "LLVMGetCallSiteStringAttribute" getCallSiteStringAttribute
    :: ValueRef -> AttributeIndex -> CString -> CUInt -> IO AttributeRef

foreign import ccall unsafe "LLVMRemoveCallSiteEnumAttribute" removeCallSiteEnumAttribute
    :: ValueRef -> AttributeIndex -> CUInt -> IO ()

foreign import ccall unsafe "LLVMRemoveCallSiteStringAttribute" removeCallSiteStringAttribute
    :: ValueRef -> AttributeIndex -> CString -> CUInt -> IO ()

foreign import ccall unsafe "LLVMGetCalledFunctionType" getCalledFunctionType
    :: ValueRef -> IO TypeRef

foreign import ccall unsafe "LLVMGetCalledValue" getCalledValue
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMIsTailCall" isTailCall
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetTailCall" setTailCall
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMGetNormalDest" getNormalDest
    :: ValueRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetUnwindDest" getUnwindDest
    :: ValueRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMSetNormalDest" setNormalDest
    :: ValueRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMSetUnwindDest" setUnwindDest
    :: ValueRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMGetNumSuccessors" getNumSuccessors
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetSuccessor" getSuccessor
    :: ValueRef -> CUInt -> IO BasicBlockRef

foreign import ccall unsafe "LLVMSetSuccessor" setSuccessor
    :: ValueRef -> CUInt -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMIsConditional" isConditional
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMGetCondition" getCondition
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMSetCondition" setCondition
    :: ValueRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMGetSwitchDefaultDest" getSwitchDefaultDest
    :: ValueRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetAllocatedType" getAllocatedType
    :: ValueRef -> IO TypeRef

foreign import ccall unsafe "LLVMIsInBounds" isInBounds
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetIsInBounds" setIsInBounds
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMAddIncoming" addIncoming
    :: ValueRef -> (Ptr ValueRef) -> (Ptr BasicBlockRef) -> CUInt -> IO ()

foreign import ccall unsafe "LLVMCountIncoming" countIncoming
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetIncomingValue" getIncomingValue
    :: ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMGetIncomingBlock" getIncomingBlock
    :: ValueRef -> CUInt -> IO BasicBlockRef

foreign import ccall unsafe "LLVMGetNumIndices" getNumIndices
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetIndices" getIndices
    :: ValueRef -> IO (Ptr CUInt)

foreign import ccall unsafe "LLVMCreateBuilderInContext" createBuilderInContext
    :: ContextRef -> IO BuilderRef

foreign import ccall unsafe "LLVMCreateBuilder" createBuilder
    :: IO BuilderRef

foreign import ccall unsafe "LLVMPositionBuilder" positionBuilder
    :: BuilderRef -> BasicBlockRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMPositionBuilderBefore" positionBuilderBefore
    :: BuilderRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMPositionBuilderAtEnd" positionBuilderAtEnd
    :: BuilderRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMGetInsertBlock" getInsertBlock
    :: BuilderRef -> IO BasicBlockRef

foreign import ccall unsafe "LLVMClearInsertionPosition" clearInsertionPosition
    :: BuilderRef -> IO ()

foreign import ccall unsafe "LLVMInsertIntoBuilder" insertIntoBuilder
    :: BuilderRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMInsertIntoBuilderWithName" insertIntoBuilderWithName
    :: BuilderRef -> ValueRef -> CString -> IO ()

foreign import ccall unsafe "LLVMDisposeBuilder" disposeBuilder
    :: BuilderRef -> IO ()

foreign import ccall unsafe "LLVMGetCurrentDebugLocation2" getCurrentDebugLocation2
    :: BuilderRef -> IO MetadataRef

foreign import ccall unsafe "LLVMSetCurrentDebugLocation2" setCurrentDebugLocation2
    :: BuilderRef -> MetadataRef -> IO ()

foreign import ccall unsafe "LLVMSetInstDebugLocation" setInstDebugLocation
    :: BuilderRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMBuilderGetDefaultFPMathTag" builderGetDefaultFPMathTag
    :: BuilderRef -> IO MetadataRef

foreign import ccall unsafe "LLVMBuilderSetDefaultFPMathTag" builderSetDefaultFPMathTag
    :: BuilderRef -> MetadataRef -> IO ()

foreign import ccall unsafe "LLVMSetCurrentDebugLocation" setCurrentDebugLocation
    :: BuilderRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMGetCurrentDebugLocation" getCurrentDebugLocation
    :: BuilderRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildRetVoid" buildRetVoid
    :: BuilderRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildRet" buildRet
    :: BuilderRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildAggregateRet" buildAggregateRet
    :: BuilderRef -> (Ptr ValueRef) -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMBuildBr" buildBr
    :: BuilderRef -> BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCondBr" buildCondBr
    :: BuilderRef -> ValueRef -> BasicBlockRef -> BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildSwitch" buildSwitch
    :: BuilderRef -> ValueRef -> BasicBlockRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMBuildIndirectBr" buildIndirectBr
    :: BuilderRef -> ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMBuildInvoke" buildInvoke
    :: BuilderRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> BasicBlockRef -> BasicBlockRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildInvoke2" buildInvoke2
    :: BuilderRef -> TypeRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> BasicBlockRef -> BasicBlockRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildUnreachable" buildUnreachable
    :: BuilderRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildResume" buildResume
    :: BuilderRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildLandingPad" buildLandingPad
    :: BuilderRef -> TypeRef -> ValueRef -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCleanupRet" buildCleanupRet
    :: BuilderRef -> ValueRef -> BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCatchRet" buildCatchRet
    :: BuilderRef -> ValueRef -> BasicBlockRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCatchPad" buildCatchPad
    :: BuilderRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCleanupPad" buildCleanupPad
    :: BuilderRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCatchSwitch" buildCatchSwitch
    :: BuilderRef -> ValueRef -> BasicBlockRef -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMAddCase" addCase
    :: ValueRef -> ValueRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMAddDestination" addDestination
    :: ValueRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMGetNumClauses" getNumClauses
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetClause" getClause
    :: ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMAddClause" addClause
    :: ValueRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMIsCleanup" isCleanup
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetCleanup" setCleanup
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMAddHandler" addHandler
    :: ValueRef -> BasicBlockRef -> IO ()

foreign import ccall unsafe "LLVMGetNumHandlers" getNumHandlers
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetHandlers" getHandlers
    :: ValueRef -> (Ptr BasicBlockRef) -> IO ()

foreign import ccall unsafe "LLVMGetArgOperand" getArgOperand
    :: ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMSetArgOperand" setArgOperand
    :: ValueRef -> CUInt -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMGetParentCatchSwitch" getParentCatchSwitch
    :: ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMSetParentCatchSwitch" setParentCatchSwitch
    :: ValueRef -> ValueRef -> IO ()

foreign import ccall unsafe "LLVMBuildAdd" buildAdd
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNSWAdd" buildNSWAdd
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNUWAdd" buildNUWAdd
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFAdd" buildFAdd
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildSub" buildSub
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNSWSub" buildNSWSub
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNUWSub" buildNUWSub
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFSub" buildFSub
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildMul" buildMul
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNSWMul" buildNSWMul
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNUWMul" buildNUWMul
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFMul" buildFMul
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildUDiv" buildUDiv
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildExactUDiv" buildExactUDiv
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildSDiv" buildSDiv
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildExactSDiv" buildExactSDiv
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFDiv" buildFDiv
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildURem" buildURem
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildSRem" buildSRem
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFRem" buildFRem
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildShl" buildShl
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildLShr" buildLShr
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildAShr" buildAShr
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildAnd" buildAnd
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildOr" buildOr
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildXor" buildXor
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildBinOp" buildBinOp
    :: BuilderRef -> Opcode -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNeg" buildNeg
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNSWNeg" buildNSWNeg
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNUWNeg" buildNUWNeg
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFNeg" buildFNeg
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildNot" buildNot
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildMalloc" buildMalloc
    :: BuilderRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildArrayMalloc" buildArrayMalloc
    :: BuilderRef -> TypeRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildMemSet" buildMemSet
    :: BuilderRef -> ValueRef -> ValueRef -> ValueRef -> CUInt -> IO ValueRef

foreign import ccall unsafe "LLVMBuildMemCpy" buildMemCpy
    :: BuilderRef -> ValueRef -> CUInt -> ValueRef -> CUInt -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildMemMove" buildMemMove
    :: BuilderRef -> ValueRef -> CUInt -> ValueRef -> CUInt -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildAlloca" buildAlloca
    :: BuilderRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildArrayAlloca" buildArrayAlloca
    :: BuilderRef -> TypeRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFree" buildFree
    :: BuilderRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildLoad" buildLoad
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildLoad2" buildLoad2
    :: BuilderRef -> TypeRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildStore" buildStore
    :: BuilderRef -> ValueRef -> ValueRef -> IO ValueRef

foreign import ccall unsafe "LLVMBuildGEP" buildGEP
    :: BuilderRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildInBoundsGEP" buildInBoundsGEP
    :: BuilderRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildStructGEP" buildStructGEP
    :: BuilderRef -> ValueRef -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildGEP2" buildGEP2
    :: BuilderRef -> TypeRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildInBoundsGEP2" buildInBoundsGEP2
    :: BuilderRef -> TypeRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildStructGEP2" buildStructGEP2
    :: BuilderRef -> TypeRef -> ValueRef -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildGlobalString" buildGlobalString
    :: BuilderRef -> CString -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildGlobalStringPtr" buildGlobalStringPtr
    :: BuilderRef -> CString -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMGetVolatile" getVolatile
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetVolatile" setVolatile
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMGetWeak" getWeak
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetWeak" setWeak
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMGetOrdering" getOrdering
    :: ValueRef -> IO AtomicOrdering

foreign import ccall unsafe "LLVMSetOrdering" setOrdering
    :: ValueRef -> AtomicOrdering -> IO ()

foreign import ccall unsafe "LLVMGetAtomicRMWBinOp" getAtomicRMWBinOp
    :: ValueRef -> IO AtomicRMWBinOp

foreign import ccall unsafe "LLVMSetAtomicRMWBinOp" setAtomicRMWBinOp
    :: ValueRef -> AtomicRMWBinOp -> IO ()

foreign import ccall unsafe "LLVMBuildTrunc" buildTrunc
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildZExt" buildZExt
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildSExt" buildSExt
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFPToUI" buildFPToUI
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFPToSI" buildFPToSI
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildUIToFP" buildUIToFP
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildSIToFP" buildSIToFP
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFPTrunc" buildFPTrunc
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFPExt" buildFPExt
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildPtrToInt" buildPtrToInt
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildIntToPtr" buildIntToPtr
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildBitCast" buildBitCast
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildAddrSpaceCast" buildAddrSpaceCast
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildZExtOrBitCast" buildZExtOrBitCast
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildSExtOrBitCast" buildSExtOrBitCast
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildTruncOrBitCast" buildTruncOrBitCast
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCast" buildCast
    :: BuilderRef -> Opcode -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildPointerCast" buildPointerCast
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildIntCast2" buildIntCast2
    :: BuilderRef -> ValueRef -> TypeRef -> LLVM.Bool -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFPCast" buildFPCast
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildICmp" buildICmp
    :: BuilderRef -> IntPredicate -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFCmp" buildFCmp
    :: BuilderRef -> RealPredicate -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildPhi" buildPhi
    :: BuilderRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCall" buildCall
    :: BuilderRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildCall2" buildCall2
    :: BuilderRef -> TypeRef -> ValueRef -> (Ptr ValueRef) -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildSelect" buildSelect
    :: BuilderRef -> ValueRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildVAArg" buildVAArg
    :: BuilderRef -> ValueRef -> TypeRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildExtractElement" buildExtractElement
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildInsertElement" buildInsertElement
    :: BuilderRef -> ValueRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildShuffleVector" buildShuffleVector
    :: BuilderRef -> ValueRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildExtractValue" buildExtractValue
    :: BuilderRef -> ValueRef -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildInsertValue" buildInsertValue
    :: BuilderRef -> ValueRef -> ValueRef -> CUInt -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFreeze" buildFreeze
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildIsNull" buildIsNull
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildIsNotNull" buildIsNotNull
    :: BuilderRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildPtrDiff" buildPtrDiff
    :: BuilderRef -> ValueRef -> ValueRef -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildFence" buildFence
    :: BuilderRef -> AtomicOrdering -> LLVM.Bool -> CString -> IO ValueRef

foreign import ccall unsafe "LLVMBuildAtomicRMW" buildAtomicRMW
    :: BuilderRef -> AtomicRMWBinOp -> ValueRef -> ValueRef -> AtomicOrdering -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMBuildAtomicCmpXchg" buildAtomicCmpXchg
    :: BuilderRef -> ValueRef -> ValueRef -> ValueRef -> AtomicOrdering -> AtomicOrdering -> LLVM.Bool -> IO ValueRef

foreign import ccall unsafe "LLVMGetNumMaskElements" getNumMaskElements
    :: ValueRef -> IO CUInt

foreign import ccall unsafe "LLVMGetUndefMaskElem" getUndefMaskElem
    :: IO CInt

foreign import ccall unsafe "LLVMGetMaskValue" getMaskValue
    :: ValueRef -> CUInt -> IO CInt

foreign import ccall unsafe "LLVMIsAtomicSingleThread" isAtomicSingleThread
    :: ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMSetAtomicSingleThread" setAtomicSingleThread
    :: ValueRef -> LLVM.Bool -> IO ()

foreign import ccall unsafe "LLVMGetCmpXchgSuccessOrdering" getCmpXchgSuccessOrdering
    :: ValueRef -> IO AtomicOrdering

foreign import ccall unsafe "LLVMSetCmpXchgSuccessOrdering" setCmpXchgSuccessOrdering
    :: ValueRef -> AtomicOrdering -> IO ()

foreign import ccall unsafe "LLVMGetCmpXchgFailureOrdering" getCmpXchgFailureOrdering
    :: ValueRef -> IO AtomicOrdering

foreign import ccall unsafe "LLVMSetCmpXchgFailureOrdering" setCmpXchgFailureOrdering
    :: ValueRef -> AtomicOrdering -> IO ()

foreign import ccall unsafe "LLVMCreateModuleProviderForExistingModule" createModuleProviderForExistingModule
    :: ModuleRef -> IO ModuleProviderRef

foreign import ccall unsafe "LLVMDisposeModuleProvider" disposeModuleProvider
    :: ModuleProviderRef -> IO ()

foreign import ccall unsafe "LLVMCreateMemoryBufferWithContentsOfFile" createMemoryBufferWithContentsOfFile
    :: CString -> (Ptr MemoryBufferRef) -> (Ptr CString) -> IO LLVM.Bool

foreign import ccall unsafe "LLVMCreateMemoryBufferWithSTDIN" createMemoryBufferWithSTDIN
    :: (Ptr MemoryBufferRef) -> (Ptr CString) -> IO LLVM.Bool

foreign import ccall unsafe "LLVMCreateMemoryBufferWithMemoryRange" createMemoryBufferWithMemoryRange
    :: CString -> CSize -> CString -> LLVM.Bool -> IO MemoryBufferRef

foreign import ccall unsafe "LLVMCreateMemoryBufferWithMemoryRangeCopy" createMemoryBufferWithMemoryRangeCopy
    :: CString -> CSize -> CString -> IO MemoryBufferRef

foreign import ccall unsafe "LLVMGetBufferStart" getBufferStart
    :: MemoryBufferRef -> IO CString

foreign import ccall unsafe "LLVMGetBufferSize" getBufferSize
    :: MemoryBufferRef -> IO CSize

foreign import ccall unsafe "LLVMDisposeMemoryBuffer" disposeMemoryBuffer
    :: MemoryBufferRef -> IO ()

foreign import ccall unsafe "LLVMGetGlobalPassRegistry" getGlobalPassRegistry
    :: IO PassRegistryRef

foreign import ccall unsafe "LLVMCreatePassManager" createPassManager
    :: IO PassManagerRef

foreign import ccall unsafe "LLVMCreateFunctionPassManagerForModule" createFunctionPassManagerForModule
    :: ModuleRef -> IO PassManagerRef

foreign import ccall unsafe "LLVMCreateFunctionPassManager" createFunctionPassManager
    :: ModuleProviderRef -> IO PassManagerRef

foreign import ccall unsafe "LLVMRunPassManager" runPassManager
    :: PassManagerRef -> ModuleRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMInitializeFunctionPassManager" initializeFunctionPassManager
    :: PassManagerRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMRunFunctionPassManager" runFunctionPassManager
    :: PassManagerRef -> ValueRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMFinalizeFunctionPassManager" finalizeFunctionPassManager
    :: PassManagerRef -> IO LLVM.Bool

foreign import ccall unsafe "LLVMDisposePassManager" disposePassManager
    :: PassManagerRef -> IO ()

foreign import ccall unsafe "LLVMStartMultithreaded" startMultithreaded
    :: IO LLVM.Bool

foreign import ccall unsafe "LLVMStopMultithreaded" stopMultithreaded
    :: IO ()

foreign import ccall unsafe "LLVMIsMultithreaded" isMultithreaded
    :: IO LLVM.Bool