Add built-ins to vectorisation monad
[ghc-hetmet.git] / compiler / vectorise / VectMonad.hs
index 45e34dc..22b776e 100644 (file)
@@ -3,6 +3,7 @@ module VectMonad (
   VM,
 
   noV, tryV, maybeV, traceMaybeV, orElseV, fixV, localV, closedV, initV,
+  liftDs,
   cloneName, cloneId,
   newExportedVar, newLocalVar, newDummyVar, newTyVar,
   
@@ -66,6 +67,14 @@ data Builtins = Builtins {
                   parrayTyCon      :: TyCon
                 , paTyCon          :: TyCon
                 , paDataCon        :: DataCon
+                , preprTyCon       :: TyCon
+                , embedTyCon       :: TyCon
+                , embedDataCon     :: DataCon
+                , crossTyCon       :: TyCon
+                , crossDataCon     :: DataCon
+                , plusTyCon        :: TyCon
+                , leftDataCon      :: DataCon
+                , rightDataCon     :: DataCon
                 , closureTyCon     :: TyCon
                 , mkClosureVar     :: Var
                 , applyClosureVar  :: Var
@@ -85,7 +94,14 @@ initBuiltins
   = do
       parrayTyCon  <- dsLookupTyCon parrayTyConName
       paTyCon      <- dsLookupTyCon paTyConName
-      let paDataCon = case tyConDataCons paTyCon of [dc] -> dc
+      let [paDataCon] = tyConDataCons paTyCon
+      preprTyCon   <- dsLookupTyCon preprTyConName
+      embedTyCon   <- dsLookupTyCon embedTyConName
+      let [embedDataCon] = tyConDataCons embedTyCon
+      crossTyCon   <- dsLookupTyCon crossTyConName
+      let [crossDataCon] = tyConDataCons crossTyCon
+      plusTyCon    <- dsLookupTyCon plusTyConName
+      let [leftDataCon, rightDataCon] = tyConDataCons plusTyCon
       closureTyCon <- dsLookupTyCon closureTyConName
 
       mkClosureVar     <- dsLookupGlobalId mkClosureName
@@ -106,6 +122,14 @@ initBuiltins
                  parrayTyCon      = parrayTyCon
                , paTyCon          = paTyCon
                , paDataCon        = paDataCon
+               , preprTyCon       = preprTyCon
+               , embedTyCon       = embedTyCon
+               , embedDataCon     = embedDataCon
+               , crossTyCon       = crossTyCon
+               , crossDataCon     = crossDataCon
+               , plusTyCon        = plusTyCon
+               , leftDataCon      = leftDataCon
+               , rightDataCon     = rightDataCon
                , closureTyCon     = closureTyCon
                , mkClosureVar     = mkClosureVar
                , applyClosureVar  = applyClosureVar