llvm-0.6.8.0: Bindings to the LLVM compiler toolkit.Source codeContentsIndex
LLVM.ExecutionEngine
Contents
Execution engine
Translation
Unsafe type conversion
Simplified interface.
Target information
Description
An ExecutionEngine is JIT compiler that is used to generate code for an LLVM module.
Synopsis
data EngineAccess a
runEngineAccess :: EngineAccess a -> IO a
addModuleProvider :: ModuleProvider -> EngineAccess ()
addModule :: Module -> EngineAccess ()
getPointerToFunction :: Function f -> EngineAccess (FunPtr f)
getFreePointers :: Function f -> EngineAccess FreePointers
type FreePointers = (Ptr ExecutionEngine, ModuleProviderRef, ValueRef)
class Translatable f
class Generic a
generateFunction :: Translatable f => Value (Ptr f) -> EngineAccess f
class Unsafe a b | a -> b where
unsafePurify :: a -> b
simpleFunction :: Translatable f => CodeGenModule (Function f) -> IO f
unsafeGenerateFunction :: (Unsafe t a, Translatable t) => CodeGenModule (Function t) -> a
data TargetData = TargetData {
aBIAlignmentOfType :: Type -> Int
aBISizeOfType :: Type -> Int
littleEndian :: Bool
callFrameAlignmentOfType :: Type -> Int
intPtrType :: Type
pointerSize :: Int
preferredAlignmentOfType :: Type -> Int
sizeOfTypeInBits :: Type -> Int
storeSizeOfType :: Type -> Int
}
getTargetData :: IO TargetData
targetDataFromString :: String -> TargetData
withIntPtrType :: (forall n. Nat n => WordN n -> a) -> a
Execution engine
data EngineAccess a Source
show/hide Instances
runEngineAccess :: EngineAccess a -> IO aSource
The LLVM execution engine is encapsulated so it cannot be accessed directly. The reason is that (currently) there must only ever be one engine, so access to it is wrapped in a monad.
addModuleProvider :: ModuleProvider -> EngineAccess ()Source
addModule :: Module -> EngineAccess ()Source
getPointerToFunction :: Function f -> EngineAccess (FunPtr f)Source
getFreePointers :: Function f -> EngineAccess FreePointersSource
type FreePointers = (Ptr ExecutionEngine, ModuleProviderRef, ValueRef)Source
Get all the information needed to free a function. Freeing code might have to be done from a (C) finalizer, so it has to done from C. The function c_freeFunctionObject take these pointers as arguments and frees the function.
Translation
class Translatable f Source
Class of LLVM function types that can be translated to the corresponding Haskell type.
show/hide Instances
class Generic a Source
show/hide Instances
generateFunction :: Translatable f => Value (Ptr f) -> EngineAccess fSource
Generate a Haskell function from an LLVM function.
Unsafe type conversion
class Unsafe a b | a -> b whereSource
Methods
unsafePurifySource
:: a
-> bRemove the IO from a function return type. This is unsafe in general.
show/hide Instances
Unsafe (IO a) a
Unsafe b b' => Unsafe (a -> b) (a -> b')
Simplified interface.
simpleFunction :: Translatable f => CodeGenModule (Function f) -> IO fSource
Translate a function to Haskell code. This is a simplified interface to the execution engine and module mechanism.
unsafeGenerateFunction :: (Unsafe t a, Translatable t) => CodeGenModule (Function t) -> aSource
Combine simpleFunction and unsafePurify.
Target information
data TargetData Source
Constructors
TargetData
aBIAlignmentOfType :: Type -> Int
aBISizeOfType :: Type -> Int
littleEndian :: Bool
callFrameAlignmentOfType :: Type -> Int
intPtrType :: Type
pointerSize :: Int
preferredAlignmentOfType :: Type -> Int
sizeOfTypeInBits :: Type -> Int
storeSizeOfType :: Type -> Int
show/hide Instances
getTargetData :: IO TargetDataSource
targetDataFromString :: String -> TargetDataSource
withIntPtrType :: (forall n. Nat n => WordN n -> a) -> aSource
Produced by Haddock version 2.4.2