llvm-extra-0.3: Utility functions for the llvm interface

LLVM.Extra.Memory

Synopsis

Documentation

class (Phi llvmValue, Undefined llvmValue, IsType llvmStruct) => C llvmValue llvmStruct | llvmValue -> llvmStruct whereSource

An implementation of both MakeValueTuple and Memory.C must ensure that haskellValue is compatible with llvmStruct. That is, writing and reading llvmStruct by LLVM must be the same as accessing haskellValue by Storable methods. ToDo: In future we may also require Storable constraint for llvmStruct.

We use a functional dependency in order to let type inference work nicely.

Methods

load :: Value (Ptr llvmStruct) -> CodeGenFunction r llvmValueSource

store :: llvmValue -> Value (Ptr llvmStruct) -> CodeGenFunction r ()Source

decompose :: Value llvmStruct -> CodeGenFunction r llvmValueSource

compose :: llvmValue -> CodeGenFunction r (Value llvmStruct)Source

Instances

C () (Struct ()) 
FirstClass a am => C (Value a) am 
(C al as, C bl bs, IsSized as sas, IsSized bs sbs) => C (al, bl) (Struct (as, (bs, ()))) 
(C al as, C bl bs, C cl cs, IsSized as sas, IsSized bs sbs, IsSized cs scs) => C (al, bl, cl) (Struct (as, (bs, (cs, ())))) 

modify :: C llvmValue llvmStruct => (llvmValue -> CodeGenFunction r llvmValue) -> Value (Ptr llvmStruct) -> CodeGenFunction r ()Source

castStorablePtr :: (MakeValueTuple haskellValue llvmValue, C llvmValue llvmStruct) => Ptr haskellValue -> Ptr llvmStructSource

type Record r o v = Element r o v vSource

data Element r o v x Source

Instances

Functor (Element r o v) 
Applicative (Element r o v) 

element :: (C x llvmStruct, GetValue o n llvmStruct, GetElementPtr o (n, ()) llvmStruct) => (v -> x) -> n -> Element r o v xSource

loadRecord :: Record r o llvmValue -> Value (Ptr o) -> CodeGenFunction r llvmValueSource

storeRecord :: Record r o llvmValue -> llvmValue -> Value (Ptr o) -> CodeGenFunction r ()Source

decomposeRecord :: Record r o llvmValue -> Value o -> CodeGenFunction r llvmValueSource

composeRecord :: IsType o => Record r o llvmValue -> llvmValue -> CodeGenFunction r (Value o)Source

loadNewtype :: C a o => (a -> llvmValue) -> Value (Ptr o) -> CodeGenFunction r llvmValueSource

storeNewtype :: C a o => (llvmValue -> a) -> llvmValue -> Value (Ptr o) -> CodeGenFunction r ()Source

decomposeNewtype :: C a o => (a -> llvmValue) -> Value o -> CodeGenFunction r llvmValueSource

composeNewtype :: C a o => (llvmValue -> a) -> llvmValue -> CodeGenFunction r (Value o)Source

class (IsFirstClass llvmType, IsType llvmStruct) => FirstClass llvmType llvmStruct | llvmType -> llvmStructSource