{-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module LLVM.Extra.Nice.Vector.Instance where import qualified LLVM.Extra.Nice.Vector as Vector import qualified LLVM.Extra.Nice.Value.Private as NiceValue import LLVM.Extra.Nice.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 NVVector n a = NiceValue.T (LLVM.Vector n a) toNiceValue :: Vector.T n a -> NVVector n a toNiceValue :: forall n a. T n a -> NVVector n a toNiceValue (Vector.Cons Repr n a x) = Repr (Vector n a) -> T (Vector n a) forall a. Repr a -> T a NiceValue.Cons Repr (Vector n a) Repr n a x fromNiceValue :: NVVector n a -> Vector.T n a fromNiceValue :: forall n a. NVVector n a -> T n a fromNiceValue (NiceValue.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 liftNiceValueM :: (Functor f) => (Vector.T n a -> f (Vector.T m b)) -> (NVVector n a -> f (NVVector m b)) liftNiceValueM :: forall (f :: * -> *) n a m b. Functor f => (T n a -> f (T m b)) -> NVVector n a -> f (NVVector m b) liftNiceValueM T n a -> f (T m b) f NVVector n a a = T m b -> NVVector m b forall n a. T n a -> NVVector n a toNiceValue (T m b -> NVVector m b) -> f (T m b) -> f (NVVector m b) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> T n a -> f (T m b) f (NVVector n a -> T n a forall n a. NVVector n a -> T n a fromNiceValue NVVector n a a) liftNiceValueM2 :: (Functor f) => (Vector.T n a -> Vector.T m b -> f (Vector.T k c)) -> (NVVector n a -> NVVector m b -> f (NVVector k c)) liftNiceValueM2 :: forall (f :: * -> *) n a m b k c. Functor f => (T n a -> T m b -> f (T k c)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 T n a -> T m b -> f (T k c) f NVVector n a a NVVector m b b = T k c -> NVVector k c forall n a. T n a -> NVVector n a toNiceValue (T k c -> NVVector k c) -> f (T k c) -> f (NVVector 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 (NVVector n a -> T n a forall n a. NVVector n a -> T n a fromNiceValue NVVector n a a) (NVVector m b -> T m b forall n a. NVVector n a -> T n a fromNiceValue NVVector m b b) liftNiceValueM3 :: (Functor f) => (Vector.T n a -> Vector.T m b -> Vector.T m c -> f (Vector.T k d)) -> (NVVector n a -> NVVector m b -> NVVector m c -> f (NVVector k d)) liftNiceValueM3 :: forall (f :: * -> *) n a m b c k d. Functor f => (T n a -> T m b -> T m c -> f (T k d)) -> NVVector n a -> NVVector m b -> NVVector m c -> f (NVVector k d) liftNiceValueM3 T n a -> T m b -> T m c -> f (T k d) f NVVector n a a NVVector m b b NVVector m c c = T k d -> NVVector k d forall n a. T n a -> NVVector n a toNiceValue (T k d -> NVVector k d) -> f (T k d) -> f (NVVector 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 (NVVector n a -> T n a forall n a. NVVector n a -> T n a fromNiceValue NVVector n a a) (NVVector m b -> T m b forall n a. NVVector n a -> T n a fromNiceValue NVVector m b b) (NVVector m c -> T m c forall n a. NVVector n a -> T n a fromNiceValue NVVector m c c) instance (TypeNum.Positive n, Vector.C a) => NiceValue.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 -> NVVector n a toNiceValue (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 -> NVVector n a toNiceValue 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 -> NVVector n a toNiceValue 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)) -> NVVector n a -> f (NVVector m b) liftNiceValueM ((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. NVVector n a -> T n a fromNiceValue T (Vector n a) x) (T (Vector n a) -> T n a forall n a. NVVector n a -> T n a fromNiceValue T (Vector n a) y) instance (TypeNum.Positive n, Vector.IntegerConstant a) => NiceValue.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 -> NVVector n a toNiceValue (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) => NiceValue.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 -> NVVector n a toNiceValue (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) => NiceValue.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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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)) -> NVVector n a -> f (NVVector m b) liftNiceValueM 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) => NiceValue.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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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) => NiceValue.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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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)) -> NVVector n a -> f (NVVector m b) liftNiceValueM 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)) -> NVVector n a -> f (NVVector m b) liftNiceValueM 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) => NiceValue.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)) -> NVVector n a -> f (NVVector m b) liftNiceValueM 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)) -> NVVector n a -> f (NVVector m b) liftNiceValueM 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) => NiceValue.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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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)) -> NVVector n a -> f (NVVector m b) liftNiceValueM 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) => NiceValue.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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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)) -> NVVector n a -> NVVector m b -> f (NVVector k c) liftNiceValueM2 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