LLVM.Extra.Memory
- class (Phi llvmValue, Undefined llvmValue, IsType llvmStruct) => C llvmValue llvmStruct | llvmValue -> llvmStruct where
- load :: Value (Ptr llvmStruct) -> CodeGenFunction r llvmValue
- store :: llvmValue -> Value (Ptr llvmStruct) -> CodeGenFunction r ()
- decompose :: Value llvmStruct -> CodeGenFunction r llvmValue
- compose :: llvmValue -> CodeGenFunction r (Value llvmStruct)
- modify :: C llvmValue llvmStruct => (llvmValue -> CodeGenFunction r llvmValue) -> Value (Ptr llvmStruct) -> CodeGenFunction r ()
- castStorablePtr :: (MakeValueTuple haskellValue llvmValue, C llvmValue llvmStruct) => Ptr haskellValue -> Ptr llvmStruct
- type Record r o v = Element r o v v
- data Element r o v x
- element :: (C x llvmStruct, GetValue o n llvmStruct, GetElementPtr o (n, ()) llvmStruct) => (v -> x) -> n -> Element r o v x
- loadRecord :: Record r o llvmValue -> Value (Ptr o) -> CodeGenFunction r llvmValue
- storeRecord :: Record r o llvmValue -> llvmValue -> Value (Ptr o) -> CodeGenFunction r ()
- decomposeRecord :: Record r o llvmValue -> Value o -> CodeGenFunction r llvmValue
- composeRecord :: IsType o => Record r o llvmValue -> llvmValue -> CodeGenFunction r (Value o)
- loadNewtype :: C a o => (a -> llvmValue) -> Value (Ptr o) -> CodeGenFunction r llvmValue
- storeNewtype :: C a o => (llvmValue -> a) -> llvmValue -> Value (Ptr o) -> CodeGenFunction r ()
- decomposeNewtype :: C a o => (a -> llvmValue) -> Value o -> CodeGenFunction r llvmValue
- composeNewtype :: C a o => (llvmValue -> a) -> llvmValue -> CodeGenFunction r (Value o)
- class (IsFirstClass llvmType, IsType llvmStruct) => FirstClass llvmType llvmStruct | llvmType -> llvmStruct
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
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
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
Instances
| FirstClass Bool Word32 | |
| FirstClass Double Double | |
| FirstClass Float Float | |
| FirstClass Int8 Int8 | |
| FirstClass Int16 Int16 | |
| FirstClass Int32 Int32 | |
| FirstClass Int64 Int64 | |
| FirstClass Word8 Word8 | |
| FirstClass Word16 Word16 | |
| FirstClass Word32 Word32 | |
| FirstClass Word64 Word64 | |
| FirstClass (StablePtr a) (StablePtr a) | |
| IsType a => FirstClass (Ptr a) (Ptr a) | |
| (IsFirstClass (Struct s), IsType (Struct sm), ConvertStruct s sm D0 s sm) => FirstClass (Struct s) (Struct sm) | |
| (Nat n, IsFirstClass am, FirstClass a am, IsSized a asize, IsSized am amsize) => FirstClass (Array n a) (Array n am) | |
| (Pos n, IsPrimitive a, IsPrimitive am, FirstClass a am) => FirstClass (Vector n a) (Vector n am) |