{-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module LLVM.Extra.Multi.Vector.Instance where import qualified LLVM.Extra.Multi.Vector as Vector import qualified LLVM.Extra.Multi.Value.Private as MultiValue import LLVM.Extra.Multi.Value.Private (Repr, ) import qualified LLVM.Core as LLVM import qualified Type.Data.Num.Decimal as TypeNum import Data.Functor ((<$>), ) import Prelude2010 import Prelude () type MVVector n a = MultiValue.T (LLVM.Vector n a) toMultiValue :: Vector.T n a -> MVVector n a toMultiValue :: forall n a. T n a -> MVVector n a toMultiValue (Vector.Cons Repr n a x) = Repr (Vector n a) -> T (Vector n a) forall a. Repr a -> T a MultiValue.Cons Repr (Vector n a) Repr n a x fromMultiValue :: MVVector n a -> Vector.T n a fromMultiValue :: forall n a. MVVector n a -> T n a fromMultiValue (MultiValue.Cons Repr (Vector n a) x) = Repr n a -> T n a forall n a. Repr n a -> T n a Vector.Cons Repr (Vector n a) Repr n a x liftMultiValueM :: (Functor f) => (Vector.T n a -> f (Vector.T m b)) -> (MVVector n a -> f (MVVector m b)) liftMultiValueM :: forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> MVVector n a -> f (MVVector m b) liftMultiValueM T n a -> f (T m b) f MVVector n a a = T m b -> MVVector m b forall n a. T n a -> MVVector n a toMultiValue (T m b -> MVVector m b) -> f (T m b) -> f (MVVector m b) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> T n a -> f (T m b) f (MVVector n a -> T n a forall n a. MVVector n a -> T n a fromMultiValue MVVector n a a) liftMultiValueM2 :: (Functor f) => (Vector.T n a -> Vector.T m b -> f (Vector.T k c)) -> (MVVector n a -> MVVector m b -> f (MVVector k c)) liftMultiValueM2 :: forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T m b -> f (T k c) f MVVector n a a MVVector m b b = T k c -> MVVector k c forall n a. T n a -> MVVector n a toMultiValue (T k c -> MVVector k c) -> f (T k c) -> f (MVVector k c) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> T n a -> T m b -> f (T k c) f (MVVector n a -> T n a forall n a. MVVector n a -> T n a fromMultiValue MVVector n a a) (MVVector m b -> T m b forall n a. MVVector n a -> T n a fromMultiValue MVVector m b b) liftMultiValueM3 :: (Functor f) => (Vector.T n a -> Vector.T m b -> Vector.T m c -> f (Vector.T k d)) -> (MVVector n a -> MVVector m b -> MVVector m c -> f (MVVector k d)) liftMultiValueM3 :: forall (f :: * -> *) n a m b c k d. Functor f => (T n a -> T m b -> T m c -> f (T k d)) -> MVVector n a -> MVVector m b -> MVVector m c -> f (MVVector k d) liftMultiValueM3 T n a -> T m b -> T m c -> f (T k d) f MVVector n a a MVVector m b b MVVector m c c = T k d -> MVVector k d forall n a. T n a -> MVVector n a toMultiValue (T k d -> MVVector k d) -> f (T k d) -> f (MVVector k d) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> T n a -> T m b -> T m c -> f (T k d) f (MVVector n a -> T n a forall n a. MVVector n a -> T n a fromMultiValue MVVector n a a) (MVVector m b -> T m b forall n a. MVVector n a -> T n a fromMultiValue MVVector m b b) (MVVector m c -> T m c forall n a. MVVector n a -> T n a fromMultiValue MVVector m c c) instance (TypeNum.Positive n, Vector.C a) => MultiValue.C (LLVM.Vector n a) where type Repr (LLVM.Vector n a) = Vector.Repr n a cons :: Vector n a -> T (Vector n a) cons = T n a -> T (Vector n a) forall n a. T n a -> MVVector n a toMultiValue (T n a -> T (Vector n a)) -> (Vector n a -> T n a) -> Vector n a -> T (Vector n a) forall b c a. (b -> c) -> (a -> b) -> a -> c . Vector n a -> T n a forall n. Positive n => Vector n a -> T n a forall a n. (C a, Positive n) => Vector n a -> T n a Vector.cons undef :: T (Vector n a) undef = T n a -> T (Vector n a) forall n a. T n a -> MVVector n a toMultiValue T n a forall n. Positive n => T n a forall a n. (C a, Positive n) => T n a Vector.undef zero :: T (Vector n a) zero = T n a -> T (Vector n a) forall n a. T n a -> MVVector n a toMultiValue T n a forall n. Positive n => T n a forall a n. (C a, Positive n) => T n a Vector.zero phi :: forall r. BasicBlock -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) phi = (T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> MVVector n a -> f (MVVector m b) liftMultiValueM ((T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a))) -> (BasicBlock -> T n a -> CodeGenFunction r (T n a)) -> BasicBlock -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall b c a. (b -> c) -> (a -> b) -> a -> c . BasicBlock -> T n a -> CodeGenFunction r (T n a) forall a n r. (C a, Positive n) => BasicBlock -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => BasicBlock -> T n a -> CodeGenFunction r (T n a) Vector.phi addPhi :: forall r. BasicBlock -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r () addPhi BasicBlock bb T (Vector n a) x T (Vector n a) y = BasicBlock -> T n a -> T n a -> CodeGenFunction r () forall a n r. (C a, Positive n) => BasicBlock -> T n a -> T n a -> CodeGenFunction r () forall n r. Positive n => BasicBlock -> T n a -> T n a -> CodeGenFunction r () Vector.addPhi BasicBlock bb (T (Vector n a) -> T n a forall n a. MVVector n a -> T n a fromMultiValue T (Vector n a) x) (T (Vector n a) -> T n a forall n a. MVVector n a -> T n a fromMultiValue T (Vector n a) y) instance (TypeNum.Positive n, Vector.IntegerConstant a) => MultiValue.IntegerConstant (LLVM.Vector n a) where fromInteger' :: Integer -> T (Vector n a) fromInteger' = T n a -> T (Vector n a) forall n a. T n a -> MVVector n a toMultiValue (T n a -> T (Vector n a)) -> (Integer -> T n a) -> Integer -> T (Vector n a) forall b c a. (b -> c) -> (a -> b) -> a -> c . Integer -> T n a forall n. Positive n => Integer -> T n a forall a n. (IntegerConstant a, Positive n) => Integer -> T n a Vector.fromInteger' instance (TypeNum.Positive n, Vector.RationalConstant a) => MultiValue.RationalConstant (LLVM.Vector n a) where fromRational' :: Rational -> T (Vector n a) fromRational' = T n a -> T (Vector n a) forall n a. T n a -> MVVector n a toMultiValue (T n a -> T (Vector n a)) -> (Rational -> T n a) -> Rational -> T (Vector n a) forall b c a. (b -> c) -> (a -> b) -> a -> c . Rational -> T n a forall n. Positive n => Rational -> T n a forall a n. (RationalConstant a, Positive n) => Rational -> T n a Vector.fromRational' instance (TypeNum.Positive n, Vector.Additive a) => MultiValue.Additive (LLVM.Vector n a) where add :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) add = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (Additive a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.add sub :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) sub = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (Additive a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.sub neg :: forall r. T (Vector n a) -> CodeGenFunction r (T (Vector n a)) neg = (T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> MVVector n a -> f (MVVector m b) liftMultiValueM T n a -> CodeGenFunction r (T n a) forall a n r. (Additive a, Positive n) => T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> CodeGenFunction r (T n a) Vector.neg instance (TypeNum.Positive n, Vector.PseudoRing a) => MultiValue.PseudoRing (LLVM.Vector n a) where mul :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) mul = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (PseudoRing a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.mul instance (TypeNum.Positive n, Vector.Real a) => MultiValue.Real (LLVM.Vector n a) where min :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) min = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (Real a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.min max :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) max = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (Real a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.max abs :: forall r. T (Vector n a) -> CodeGenFunction r (T (Vector n a)) abs = (T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> MVVector n a -> f (MVVector m b) liftMultiValueM T n a -> CodeGenFunction r (T n a) forall a n r. (Real a, Positive n) => T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> CodeGenFunction r (T n a) Vector.abs signum :: forall r. T (Vector n a) -> CodeGenFunction r (T (Vector n a)) signum = (T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> MVVector n a -> f (MVVector m b) liftMultiValueM T n a -> CodeGenFunction r (T n a) forall a n r. (Real a, Positive n) => T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> CodeGenFunction r (T n a) Vector.signum instance (TypeNum.Positive n, Vector.Fraction a) => MultiValue.Fraction (LLVM.Vector n a) where truncate :: forall r. T (Vector n a) -> CodeGenFunction r (T (Vector n a)) truncate = (T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> MVVector n a -> f (MVVector m b) liftMultiValueM T n a -> CodeGenFunction r (T n a) forall a n r. (Fraction a, Positive n) => T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> CodeGenFunction r (T n a) Vector.truncate fraction :: forall r. T (Vector n a) -> CodeGenFunction r (T (Vector n a)) fraction = (T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> MVVector n a -> f (MVVector m b) liftMultiValueM T n a -> CodeGenFunction r (T n a) forall a n r. (Fraction a, Positive n) => T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> CodeGenFunction r (T n a) Vector.fraction instance (TypeNum.Positive n, Vector.Logic a) => MultiValue.Logic (LLVM.Vector n a) where and :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) and = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (Logic a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.and or :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) or = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (Logic a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.or xor :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) xor = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (Logic a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.xor inv :: forall r. T (Vector n a) -> CodeGenFunction r (T (Vector n a)) inv = (T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> MVVector n a -> f (MVVector m b) liftMultiValueM T n a -> CodeGenFunction r (T n a) forall a n r. (Logic a, Positive n) => T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> CodeGenFunction r (T n a) Vector.inv instance (TypeNum.Positive n, Vector.BitShift a) => MultiValue.BitShift (LLVM.Vector n a) where shl :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) shl = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (BitShift a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.shl shr :: forall r. T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) shr = (T n a -> T n a -> CodeGenFunction r (T n a)) -> T (Vector n a) -> T (Vector n a) -> CodeGenFunction r (T (Vector n a)) forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> MVVector n a -> MVVector m b -> f (MVVector k c) liftMultiValueM2 T n a -> T n a -> CodeGenFunction r (T n a) forall a n r. (BitShift a, Positive n) => T n a -> T n a -> CodeGenFunction r (T n a) forall n r. Positive n => T n a -> T n a -> CodeGenFunction r (T n a) Vector.shr