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

Safe HaskellNone
LanguageHaskell98

LLVM.Extra.Storable

Contents

Description

Transfer values between Haskell and JIT generated code in a Haskell-compatible format as dictated by the Storable class. E.g. instance Bool may use more than a byte (e.g. Word32). For tuples, you may use the Tuple wrapper from the storable-record package. The Storable instance for Vectors is compatible with arrays, i.e. indices always count upwards irrespective of machine endianess and tuple elements are interleaved.

Synopsis

Basic class

class (Storable a, Value a, Phi (ValueOf a), Undefined (ValueOf a)) => C a where Source #

Methods

load :: Value (Ptr a) -> CodeGenFunction r (ValueOf a) Source #

store :: ValueOf a -> Value (Ptr a) -> CodeGenFunction r () Source #

Instances
C Bool Source #

Not very efficient implementation because we want to adapt to sizeOf Bool dynamically. Unfortunately, LLVM-9's optimizer does not recognize the instruction pattern. Better use Bool8 for booleans.

Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Bool) -> CodeGenFunction r (ValueOf Bool) Source #

store :: ValueOf Bool -> Value (Ptr Bool) -> CodeGenFunction r () Source #

C Double Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Double) -> CodeGenFunction r (ValueOf Double) Source #

store :: ValueOf Double -> Value (Ptr Double) -> CodeGenFunction r () Source #

C Float Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Float) -> CodeGenFunction r (ValueOf Float) Source #

store :: ValueOf Float -> Value (Ptr Float) -> CodeGenFunction r () Source #

C Int Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Int) -> CodeGenFunction r (ValueOf Int) Source #

store :: ValueOf Int -> Value (Ptr Int) -> CodeGenFunction r () Source #

C Int8 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Int8) -> CodeGenFunction r (ValueOf Int8) Source #

store :: ValueOf Int8 -> Value (Ptr Int8) -> CodeGenFunction r () Source #

C Int16 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Int16) -> CodeGenFunction r (ValueOf Int16) Source #

store :: ValueOf Int16 -> Value (Ptr Int16) -> CodeGenFunction r () Source #

C Int32 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Int32) -> CodeGenFunction r (ValueOf Int32) Source #

store :: ValueOf Int32 -> Value (Ptr Int32) -> CodeGenFunction r () Source #

C Int64 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Int64) -> CodeGenFunction r (ValueOf Int64) Source #

store :: ValueOf Int64 -> Value (Ptr Int64) -> CodeGenFunction r () Source #

C Word Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Word) -> CodeGenFunction r (ValueOf Word) Source #

store :: ValueOf Word -> Value (Ptr Word) -> CodeGenFunction r () Source #

C Word8 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Word8) -> CodeGenFunction r (ValueOf Word8) Source #

store :: ValueOf Word8 -> Value (Ptr Word8) -> CodeGenFunction r () Source #

C Word16 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Word16) -> CodeGenFunction r (ValueOf Word16) Source #

store :: ValueOf Word16 -> Value (Ptr Word16) -> CodeGenFunction r () Source #

C Word32 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Word32) -> CodeGenFunction r (ValueOf Word32) Source #

store :: ValueOf Word32 -> Value (Ptr Word32) -> CodeGenFunction r () Source #

C Word64 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Word64) -> CodeGenFunction r (ValueOf Word64) Source #

store :: ValueOf Word64 -> Value (Ptr Word64) -> CodeGenFunction r () Source #

C () Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr ()) -> CodeGenFunction r (ValueOf ()) Source #

store :: ValueOf () -> Value (Ptr ()) -> CodeGenFunction r () Source #

C Bool8 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr Bool8) -> CodeGenFunction r (ValueOf Bool8) Source #

store :: ValueOf Bool8 -> Value (Ptr Bool8) -> CodeGenFunction r () Source #

C a => C (Complex a) Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr (Complex a)) -> CodeGenFunction r (ValueOf (Complex a)) Source #

store :: ValueOf (Complex a) -> Value (Ptr (Complex a)) -> CodeGenFunction r () Source #

Tuple tuple => C (Tuple tuple) Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr (Tuple tuple)) -> CodeGenFunction r (ValueOf (Tuple tuple)) Source #

store :: ValueOf (Tuple tuple) -> Value (Ptr (Tuple tuple)) -> CodeGenFunction r () Source #

(Positive n, Vector a, VectorValue n a, Phi (VectorValueOf n a)) => C (Vector n a) Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

load :: Value (Ptr (Vector n a)) -> CodeGenFunction r (ValueOf (Vector n a)) Source #

store :: ValueOf (Vector n a) -> Value (Ptr (Vector n a)) -> CodeGenFunction r () Source #

storeNext :: (C a, ValueOf a ~ al, Value (Ptr a) ~ ptr) => al -> ptr -> CodeGenFunction r ptr Source #

modify :: (C a, ValueOf a ~ al) => (al -> CodeGenFunction r al) -> Value (Ptr a) -> CodeGenFunction r () Source #

Classes for tuples and vectors

class (Storable tuple, Value tuple, Phi (ValueOf tuple), Undefined (ValueOf tuple)) => Tuple tuple where Source #

Methods

loadTuple :: Value (Ptr (Tuple tuple)) -> CodeGenFunction r (ValueOf tuple) Source #

storeTuple :: ValueOf tuple -> Value (Ptr (Tuple tuple)) -> CodeGenFunction r () Source #

Instances
(C a, C b) => Tuple (a, b) Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

loadTuple :: Value (Ptr (Tuple (a, b))) -> CodeGenFunction r (ValueOf (a, b)) Source #

storeTuple :: ValueOf (a, b) -> Value (Ptr (Tuple (a, b))) -> CodeGenFunction r () Source #

(C a, C b, C c) => Tuple (a, b, c) Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

loadTuple :: Value (Ptr (Tuple (a, b, c))) -> CodeGenFunction r (ValueOf (a, b, c)) Source #

storeTuple :: ValueOf (a, b, c) -> Value (Ptr (Tuple (a, b, c))) -> CodeGenFunction r () Source #

class C a => Vector a where Source #

Methods

assembleVector :: Positive n => Proxy a -> Vector n (ValueOf a) -> CodeGenFunction r (VectorValueOf n a) Source #

disassembleVector :: Positive n => Proxy a -> VectorValueOf n a -> CodeGenFunction r (Vector n (ValueOf a)) Source #

Instances
Vector Bool Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Bool -> Vector n (ValueOf Bool) -> CodeGenFunction r (VectorValueOf n Bool) Source #

disassembleVector :: Positive n => Proxy Bool -> VectorValueOf n Bool -> CodeGenFunction r (Vector n (ValueOf Bool)) Source #

Vector Double Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Double -> Vector n (ValueOf Double) -> CodeGenFunction r (VectorValueOf n Double) Source #

disassembleVector :: Positive n => Proxy Double -> VectorValueOf n Double -> CodeGenFunction r (Vector n (ValueOf Double)) Source #

Vector Float Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Float -> Vector n (ValueOf Float) -> CodeGenFunction r (VectorValueOf n Float) Source #

disassembleVector :: Positive n => Proxy Float -> VectorValueOf n Float -> CodeGenFunction r (Vector n (ValueOf Float)) Source #

Vector Int Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Int -> Vector n (ValueOf Int) -> CodeGenFunction r (VectorValueOf n Int) Source #

disassembleVector :: Positive n => Proxy Int -> VectorValueOf n Int -> CodeGenFunction r (Vector n (ValueOf Int)) Source #

Vector Int8 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Int8 -> Vector n (ValueOf Int8) -> CodeGenFunction r (VectorValueOf n Int8) Source #

disassembleVector :: Positive n => Proxy Int8 -> VectorValueOf n Int8 -> CodeGenFunction r (Vector n (ValueOf Int8)) Source #

Vector Int16 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Int16 -> Vector n (ValueOf Int16) -> CodeGenFunction r (VectorValueOf n Int16) Source #

disassembleVector :: Positive n => Proxy Int16 -> VectorValueOf n Int16 -> CodeGenFunction r (Vector n (ValueOf Int16)) Source #

Vector Int32 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Int32 -> Vector n (ValueOf Int32) -> CodeGenFunction r (VectorValueOf n Int32) Source #

disassembleVector :: Positive n => Proxy Int32 -> VectorValueOf n Int32 -> CodeGenFunction r (Vector n (ValueOf Int32)) Source #

Vector Int64 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Int64 -> Vector n (ValueOf Int64) -> CodeGenFunction r (VectorValueOf n Int64) Source #

disassembleVector :: Positive n => Proxy Int64 -> VectorValueOf n Int64 -> CodeGenFunction r (Vector n (ValueOf Int64)) Source #

Vector Word Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Word -> Vector n (ValueOf Word) -> CodeGenFunction r (VectorValueOf n Word) Source #

disassembleVector :: Positive n => Proxy Word -> VectorValueOf n Word -> CodeGenFunction r (Vector n (ValueOf Word)) Source #

Vector Word8 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Word8 -> Vector n (ValueOf Word8) -> CodeGenFunction r (VectorValueOf n Word8) Source #

disassembleVector :: Positive n => Proxy Word8 -> VectorValueOf n Word8 -> CodeGenFunction r (Vector n (ValueOf Word8)) Source #

Vector Word16 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Word16 -> Vector n (ValueOf Word16) -> CodeGenFunction r (VectorValueOf n Word16) Source #

disassembleVector :: Positive n => Proxy Word16 -> VectorValueOf n Word16 -> CodeGenFunction r (Vector n (ValueOf Word16)) Source #

Vector Word32 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Word32 -> Vector n (ValueOf Word32) -> CodeGenFunction r (VectorValueOf n Word32) Source #

disassembleVector :: Positive n => Proxy Word32 -> VectorValueOf n Word32 -> CodeGenFunction r (Vector n (ValueOf Word32)) Source #

Vector Word64 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Word64 -> Vector n (ValueOf Word64) -> CodeGenFunction r (VectorValueOf n Word64) Source #

disassembleVector :: Positive n => Proxy Word64 -> VectorValueOf n Word64 -> CodeGenFunction r (Vector n (ValueOf Word64)) Source #

Vector Bool8 Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy Bool8 -> Vector n (ValueOf Bool8) -> CodeGenFunction r (VectorValueOf n Bool8) Source #

disassembleVector :: Positive n => Proxy Bool8 -> VectorValueOf n Bool8 -> CodeGenFunction r (Vector n (ValueOf Bool8)) Source #

(Tuple tuple, TupleVector tuple) => Vector (Tuple tuple) Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

assembleVector :: Positive n => Proxy (Tuple tuple) -> Vector n (ValueOf (Tuple tuple)) -> CodeGenFunction r (VectorValueOf n (Tuple tuple)) Source #

disassembleVector :: Positive n => Proxy (Tuple tuple) -> VectorValueOf n (Tuple tuple) -> CodeGenFunction r (Vector n (ValueOf (Tuple tuple))) Source #

class TupleVector a where Source #

Methods

deinterleave :: Positive n => Proxy a -> Vector n (ValueOf a) -> CodeGenFunction r (VectorValueOf n a) Source #

interleave :: Positive n => Proxy a -> VectorValueOf n a -> CodeGenFunction r (Vector n (ValueOf a)) Source #

Instances
(Vector a, Vector b) => TupleVector (a, b) Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

deinterleave :: Positive n => Proxy (a, b) -> Vector n (ValueOf (a, b)) -> CodeGenFunction r (VectorValueOf n (a, b)) Source #

interleave :: Positive n => Proxy (a, b) -> VectorValueOf n (a, b) -> CodeGenFunction r (Vector n (ValueOf (a, b))) Source #

(Vector a, Vector b, Vector c) => TupleVector (a, b, c) Source # 
Instance details

Defined in LLVM.Extra.Storable.Private

Methods

deinterleave :: Positive n => Proxy (a, b, c) -> Vector n (ValueOf (a, b, c)) -> CodeGenFunction r (VectorValueOf n (a, b, c)) Source #

interleave :: Positive n => Proxy (a, b, c) -> VectorValueOf n (a, b, c) -> CodeGenFunction r (Vector n (ValueOf (a, b, c))) Source #

Standard method implementations

loadNewtype :: (C a, ValueOf a ~ al) => (a -> wrapped) -> (al -> wrappedl) -> Value (Ptr wrapped) -> CodeGenFunction r wrappedl Source #

storeNewtype :: (C a, ValueOf a ~ al) => (a -> wrapped) -> (wrappedl -> al) -> wrappedl -> Value (Ptr wrapped) -> CodeGenFunction r () Source #

loadTraversable :: (Repeat f, Traversable f, C a, ValueOf a ~ al) => Value (Ptr (f a)) -> CodeGenFunction r (f al) Source #

loadApplicative :: (Applicative f, Traversable f, C a, ValueOf a ~ al) => Value (Ptr (f a)) -> CodeGenFunction r (f al) Source #

storeFoldable :: (Foldable f, C a, ValueOf a ~ al) => f al -> Value (Ptr (f a)) -> CodeGenFunction r () Source #

Pointer handling

advancePtr :: (Storable a, Value (Ptr a) ~ ptr) => Value Int -> ptr -> CodeGenFunction r ptr Source #

incrementPtr :: (Storable a, Value (Ptr a) ~ ptr) => ptr -> CodeGenFunction r ptr Source #

decrementPtr :: (Storable a, Value (Ptr a) ~ ptr) => ptr -> CodeGenFunction r ptr Source #

Loops over Storable arrays

arrayLoop :: (Phi s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA) => Value i -> ptrA -> s -> (ptrA -> s -> CodeGenFunction r s) -> CodeGenFunction r s Source #

arrayLoop2 :: (Phi s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, Storable b, Value (Ptr b) ~ ptrB) => Value i -> ptrA -> ptrB -> s -> (ptrA -> ptrB -> s -> CodeGenFunction r s) -> CodeGenFunction r s Source #

arrayLoopMaybeCont :: (Phi s, Undefined s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, T (ptrA, s) ~ z) => Value i -> ptrA -> s -> (ptrA -> s -> T r z s) -> CodeGenFunction r (Value i, T s) Source #

arrayLoopMaybeCont2 :: (Phi s, Undefined s, Num i, IsConst i, IsInteger i, CmpRet i, IsPrimitive i, Storable a, Value (Ptr a) ~ ptrA, Storable b, Value (Ptr b) ~ ptrB, T (ptrA, (ptrB, s)) ~ z) => Value i -> ptrA -> ptrB -> s -> (ptrA -> ptrB -> s -> T r z s) -> CodeGenFunction r (Value i, T s) Source #