, liftedApplyVar :: Var
, replicatePDVar :: Var
, emptyPDVar :: Var
- , packPDVar :: Var
, packByTagPDVar :: Var
, combinePDVars :: Array Int Var
, scalarClass :: Class
liftedApplyVar <- externalVar dph_Closure (fsLit "liftedApply")
replicatePDVar <- externalVar dph_PArray (fsLit "replicatePD")
emptyPDVar <- externalVar dph_PArray (fsLit "emptyPD")
- packPDVar <- externalVar dph_PArray (fsLit "packPD")
packByTagPDVar <- externalVar dph_PArray (fsLit "packByTagPD")
combines <- mapM (externalVar dph_PArray)
| i <- [2..mAX_DPH_COMBINE]]
let combinePDVars = listArray (2, mAX_DPH_COMBINE) combines
- scalarClass <- externalClass dph_Scalar (fsLit "Scalar")
+ scalarClass <- externalClass dph_PArray (fsLit "Scalar")
scalar_map <- externalVar dph_Scalar (fsLit "scalar_map")
scalar_zip2 <- externalVar dph_Scalar (fsLit "scalar_zipWith")
scalar_zips <- mapM (externalVar dph_Scalar)
, liftedApplyVar = liftedApplyVar
, replicatePDVar = replicatePDVar
, emptyPDVar = emptyPDVar
- , packPDVar = packPDVar
, packByTagPDVar = packByTagPDVar
, combinePDVars = combinePDVars
, scalarClass = scalarClass
where
mk_tup n mod name = (tupleCon Boxed n, mod, name)
+
+-- | Mapping of prelude functions to vectorised versions.
+-- Functions like filterP currently have a working but naive version in GHC.PArr
+-- During vectorisation we replace these by calls to filterPA, which are
+-- defined in dph-common Data.Array.Parallel.Lifted.Combinators
+--
+-- As renamer only sees the GHC.PArr functions, if you want to add a new function
+-- to the vectoriser there has to be a definition for it in GHC.PArr, even though
+-- it will never be used at runtime.
+--
preludeVars :: Modules -> [(Module, FastString, Module, FastString)]
preludeVars (Modules { dph_Combinators = dph_Combinators
, dph_PArray = dph_PArray
, mk gHC_PARR (fsLit "lengthP") dph_Combinators (fsLit "lengthPA")
, mk gHC_PARR (fsLit "replicateP") dph_Combinators (fsLit "replicatePA")
, mk gHC_PARR (fsLit "!:") dph_Combinators (fsLit "indexPA")
+ , mk gHC_PARR (fsLit "sliceP") dph_Combinators (fsLit "slicePA")
, mk gHC_PARR (fsLit "crossMapP") dph_Combinators (fsLit "crossMapPA")
, mk gHC_PARR (fsLit "singletonP") dph_Combinators (fsLit "singletonPA")
, mk gHC_PARR (fsLit "concatP") dph_Combinators (fsLit "concatPA")