summaryrefslogtreecommitdiff
path: root/compiler/vectorise/Vectorise/Vect.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/vectorise/Vectorise/Vect.hs')
-rw-r--r--compiler/vectorise/Vectorise/Vect.hs128
1 files changed, 0 insertions, 128 deletions
diff --git a/compiler/vectorise/Vectorise/Vect.hs b/compiler/vectorise/Vectorise/Vect.hs
deleted file mode 100644
index 1b0e57167c..0000000000
--- a/compiler/vectorise/Vectorise/Vect.hs
+++ /dev/null
@@ -1,128 +0,0 @@
--- |Simple vectorised constructors and projections.
---
-module Vectorise.Vect
- ( Vect, VVar, VExpr, VBind
-
- , vectorised
- , lifted
- , mapVect
-
- , vVarType
- , vNonRec
- , vRec
- , vVar
- , vType
- , vTick
- , vLet
- , vLams
- , vVarApps
- , vCaseDEFAULT
- )
-where
-
-import GhcPrelude
-
-import CoreSyn
-import Type ( Type )
-import Var
-
--- |Contains the vectorised and lifted versions of some thing.
---
-type Vect a = (a,a)
-type VVar = Vect Var
-type VExpr = Vect CoreExpr
-type VBind = Vect CoreBind
-
--- |Get the vectorised version of a thing.
---
-vectorised :: Vect a -> a
-vectorised = fst
-
--- |Get the lifted version of a thing.
---
-lifted :: Vect a -> a
-lifted = snd
-
--- |Apply some function to both the vectorised and lifted versions of a thing.
---
-mapVect :: (a -> b) -> Vect a -> Vect b
-mapVect f (x, y) = (f x, f y)
-
--- |Combine vectorised and lifted versions of two things componentwise.
---
-zipWithVect :: (a -> b -> c) -> Vect a -> Vect b -> Vect c
-zipWithVect f (x1, y1) (x2, y2) = (f x1 x2, f y1 y2)
-
--- |Get the type of a vectorised variable.
---
-vVarType :: VVar -> Type
-vVarType = varType . vectorised
-
--- |Wrap a vectorised variable as a vectorised expression.
---
-vVar :: VVar -> VExpr
-vVar = mapVect Var
-
--- |Wrap a vectorised type as a vectorised expression.
---
-vType :: Type -> VExpr
-vType ty = (Type ty, Type ty)
-
--- |Make a vectorised note.
---
-vTick :: Tickish Id -> VExpr -> VExpr
-vTick = mapVect . Tick
-
--- |Make a vectorised non-recursive binding.
---
-vNonRec :: VVar -> VExpr -> VBind
-vNonRec = zipWithVect NonRec
-
--- |Make a vectorised recursive binding.
---
-vRec :: [VVar] -> [VExpr] -> VBind
-vRec vs es = (Rec (zip vvs ves), Rec (zip lvs les))
- where
- (vvs, lvs) = unzip vs
- (ves, les) = unzip es
-
--- |Make a vectorised let expression.
---
-vLet :: VBind -> VExpr -> VExpr
-vLet = zipWithVect Let
-
--- |Make a vectorised lambda abstraction.
---
--- The lifted version also binds the lifting context 'lc'.
---
-vLams :: Var -- ^ Var bound to the lifting context.
- -> [VVar] -- ^ Parameter vars for the abstraction.
- -> VExpr -- ^ Body of the abstraction.
- -> VExpr
-vLams lc vs (ve, le)
- = (mkLams vvs ve, mkLams (lc:lvs) le)
- where
- (vvs, lvs) = unzip vs
-
--- |Apply an expression to a set of argument variables.
---
--- The lifted version is also applied to the variable of the lifting context.
---
-vVarApps :: Var -> VExpr -> [VVar] -> VExpr
-vVarApps lc (ve, le) vvs
- = (ve `mkVarApps` vs, le `mkVarApps` (lc : ls))
- where
- (vs, ls) = unzip vvs
-
-
-vCaseDEFAULT :: VExpr -- scrutinee
- -> VVar -- bnder
- -> Type -- type of vectorised version
- -> Type -- type of lifted version
- -> VExpr -- body of alternative.
- -> VExpr
-vCaseDEFAULT (vscrut, lscrut) (vbndr, lbndr) vty lty (vbody, lbody)
- = (Case vscrut vbndr vty (mkDEFAULT vbody),
- Case lscrut lbndr lty (mkDEFAULT lbody))
- where
- mkDEFAULT e = [(DEFAULT, [], e)]