X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=682d451c40b09de656e02f7ce956d51919d56746;hb=fdbd3fea6023d520398fa904ec41e84c00fcfa5e;hp=a9134672f9405c09743ba1bde067be9e223d6d60;hpb=a9192907a271905c4ec1a37b1737ce119ac48905;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index a913467..682d451 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -33,7 +33,10 @@ import Type ( Type ) import TysPrim import TysWiredIn ( unitTyCon, tupleTyCon, intTyCon, intTyConName, - boolTyCon, boolTyConName, trueDataCon, falseDataCon ) + doubleTyCon, doubleTyConName, + boolTyCon, boolTyConName, trueDataCon, falseDataCon, + parrTyCon, parrTyConName ) +import PrelNames ( gHC_PARR ) import Module import BasicTypes ( Boxity(..) ) @@ -42,6 +45,7 @@ import Outputable import Data.Array import Control.Monad ( liftM, zipWithM ) +import Data.List ( unzip4 ) mAX_NDP_PROD :: Int mAX_NDP_PROD = 3 @@ -60,6 +64,11 @@ nDP_REPR = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Repr") nDP_CLOSURE = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Closure") nDP_PRIM = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Prim") nDP_INSTANCES = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Instances") +nDP_COMBINATORS = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Combinators") + +nDP_PRELUDE_PARR = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.PArr") +nDP_PRELUDE_INT = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Int") +nDP_PRELUDE_DOUBLE = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Double") data Builtins = Builtins { parrayTyCon :: TyCon @@ -140,13 +149,13 @@ initBuiltins upToPAIntPrimVar <- externalVar nDP_PRIM FSLIT("upToPA_Int#") selectPAIntPrimVar <- externalVar nDP_PRIM FSLIT("selectPA_Int#") truesPABoolPrimVar <- externalVar nDP_PRIM FSLIT("truesPA_Bool#") - lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA") - replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA") + lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA#") + replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA#") emptyPAVar <- externalVar nDP_PARRAY FSLIT("emptyPA") - packPAVar <- externalVar nDP_PARRAY FSLIT("packPA") + packPAVar <- externalVar nDP_PARRAY FSLIT("packPA#") combines <- mapM (externalVar nDP_PARRAY) - [mkFastString ("combine" ++ show i ++ "PA") + [mkFastString ("combine" ++ show i ++ "PA#") | i <- [2..mAX_NDP_COMBINE]] let combinePAVars = listArray (2, mAX_NDP_COMBINE) combines @@ -185,18 +194,56 @@ initBuiltins , liftingContext = liftingContext } -initBuiltinVars :: Builtins -> [(Var, Var)] -initBuiltinVars bi = [(v,v) | v <- map dataConWorkId defaultDataConWorkers] +initBuiltinVars :: Builtins -> DsM [(Var, Var)] +initBuiltinVars bi + = do + uvars <- zipWithM externalVar umods ufs + vvars <- zipWithM externalVar vmods vfs + return $ [(v,v) | v <- map dataConWorkId defaultDataConWorkers] + ++ zip uvars vvars + where + (umods, ufs, vmods, vfs) = unzip4 preludeVars defaultDataConWorkers :: [DataCon] defaultDataConWorkers = [trueDataCon, falseDataCon] -initBuiltinTyCons :: Builtins -> [(Name, TyCon)] -initBuiltinTyCons bi = (tyConName funTyCon, closureTyCon bi) - : [(tyConName tc, tc) | tc <- defaultTyCons] +preludeVars :: [(Module, FastString, Module, FastString)] +preludeVars + = [ + mk gHC_PARR FSLIT("mapP") nDP_COMBINATORS FSLIT("mapPA") + , mk gHC_PARR FSLIT("zipWithP") nDP_COMBINATORS FSLIT("zipWithPA") + + , mk nDP_PRELUDE_INT FSLIT("plus") nDP_PRELUDE_INT FSLIT("plusV") + , mk nDP_PRELUDE_INT FSLIT("minus") nDP_PRELUDE_INT FSLIT("minusV") + , mk nDP_PRELUDE_INT FSLIT("mult") nDP_PRELUDE_INT FSLIT("multV") + , mk nDP_PRELUDE_INT FSLIT("sumP") nDP_PRELUDE_INT FSLIT("sumPA") + , mk nDP_PRELUDE_INT FSLIT("upToP") nDP_PRELUDE_INT FSLIT("upToPA") + + , mk nDP_PRELUDE_DOUBLE FSLIT("plus") nDP_PRELUDE_DOUBLE FSLIT("plusV") + , mk nDP_PRELUDE_DOUBLE FSLIT("minus") nDP_PRELUDE_DOUBLE FSLIT("minusV") + , mk nDP_PRELUDE_DOUBLE FSLIT("mult") nDP_PRELUDE_DOUBLE FSLIT("multV") + , mk nDP_PRELUDE_DOUBLE FSLIT("sumP") nDP_PRELUDE_DOUBLE FSLIT("sumPA") + + -- FIXME: temporary + , mk nDP_PRELUDE_PARR FSLIT("fromPArrayP") nDP_PRELUDE_PARR FSLIT("fromPArrayPA") + ] + where + mk = (,,,) + +initBuiltinTyCons :: Builtins -> DsM [(Name, TyCon)] +initBuiltinTyCons bi + = do + -- parr <- externalTyCon nDP_PRELUDE_PARR FSLIT("PArr") + return $ (tyConName funTyCon, closureTyCon bi) + : (parrTyConName, parrayTyCon bi) + + -- FIXME: temporary + : (tyConName $ parrayTyCon bi, parrayTyCon bi) + + : [(tyConName tc, tc) | tc <- defaultTyCons] defaultTyCons :: [TyCon] -defaultTyCons = [intTyCon, boolTyCon] +defaultTyCons = [intTyCon, boolTyCon, doubleTyCon] initBuiltinDataCons :: Builtins -> [(Name, DataCon)] initBuiltinDataCons bi = [(dataConName dc, dc)| dc <- defaultDataCons] @@ -219,9 +266,11 @@ builtinPAs bi = [ mk (tyConName $ closureTyCon bi) nDP_CLOSURE FSLIT("dPA_Clo") , mk (tyConName $ voidTyCon bi) nDP_REPR FSLIT("dPA_Void") + , mk (tyConName $ parrayTyCon bi) nDP_INSTANCES FSLIT("dPA_PArray") , mk unitTyConName nDP_INSTANCES FSLIT("dPA_Unit") , mk intTyConName nDP_INSTANCES FSLIT("dPA_Int") + , mk doubleTyConName nDP_INSTANCES FSLIT("dPA_Double") , mk boolTyConName nDP_INSTANCES FSLIT("dPA_Bool") ] ++ tups @@ -246,6 +295,7 @@ builtinPRs bi = -- temporary , mk intTyConName nDP_INSTANCES FSLIT("dPR_Int") + , mk doubleTyConName nDP_INSTANCES FSLIT("dPR_Double") ] ++ map mk_sum [2..mAX_NDP_SUM]