X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=2fc9bbeac6b40b5fc0bfc06a583ee9d35eb52938;hb=f7b0bddc293f35c0a1d86b1e399b418221c9020c;hp=19df7ccc19cb36148ae521b95269c9397e59901c;hpb=7a5442f3bd91cc24c54c828529d8fee76aeec388;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index 19df7cc..2fc9bbe 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -7,7 +7,9 @@ module VectBuiltIn ( Builtins(..), sumTyCon, prodTyCon, combinePAVar, - initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs, + initBuiltins, initBuiltinVars, initBuiltinTyCons, initBuiltinDataCons, + initBuiltinPAs, initBuiltinPRs, + initBuiltinBoxedTyCons, primMethod, primPArray ) where @@ -18,7 +20,7 @@ import DsMonad import IfaceEnv ( lookupOrig ) import Module ( Module ) -import DataCon ( DataCon ) +import DataCon ( DataCon, dataConName, dataConWorkId ) import TyCon ( TyCon, tyConName, tyConDataCons ) import Var ( Var ) import Id ( mkSysLocal ) @@ -29,7 +31,11 @@ import OccName import TypeRep ( funTyCon ) import Type ( Type ) import TysPrim -import TysWiredIn ( unitTyCon, tupleTyCon, intTyConName ) +import TysWiredIn ( unitTyCon, tupleTyCon, + intTyCon, intTyConName, + boolTyCon, boolTyConName, trueDataCon, falseDataCon, + parrTyCon, parrTyConName ) +import PrelNames ( gHC_PARR ) import Module import BasicTypes ( Boxity(..) ) @@ -38,6 +44,7 @@ import Outputable import Data.Array import Control.Monad ( liftM, zipWithM ) +import Data.List ( unzip4 ) mAX_NDP_PROD :: Int mAX_NDP_PROD = 3 @@ -56,6 +63,10 @@ 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") data Builtins = Builtins { parrayTyCon :: TyCon @@ -68,6 +79,7 @@ data Builtins = Builtins { , parrayBoolPrimTyCon :: TyCon , voidTyCon :: TyCon , wrapTyCon :: TyCon + , enumerationTyCon :: TyCon , sumTyCons :: Array Int TyCon , closureTyCon :: TyCon , voidVar :: Var @@ -119,6 +131,7 @@ initBuiltins voidTyCon <- externalTyCon nDP_REPR FSLIT("Void") wrapTyCon <- externalTyCon nDP_REPR FSLIT("Wrap") + enumerationTyCon <- externalTyCon nDP_REPR FSLIT("Enumeration") sum_tcs <- mapM (externalTyCon nDP_REPR) [mkFastString ("Sum" ++ show i) | i <- [2..mAX_NDP_SUM]] @@ -158,6 +171,7 @@ initBuiltins , parrayBoolPrimTyCon = parrayBoolPrimTyCon , voidTyCon = voidTyCon , wrapTyCon = wrapTyCon + , enumerationTyCon = enumerationTyCon , sumTyCons = sumTyCons , closureTyCon = closureTyCon , voidVar = voidVar @@ -178,12 +192,55 @@ initBuiltins , liftingContext = liftingContext } -initBuiltinTyCons :: Builtins -> [(Name, TyCon)] -initBuiltinTyCons bi = (tyConName funTyCon, closureTyCon bi) - : [(tyConName tc, tc) | tc <- defaultTyCons] +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] + +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("sumP") nDP_PRELUDE_INT FSLIT("sumPA") + , mk nDP_PRELUDE_INT FSLIT("upToP") nDP_PRELUDE_INT FSLIT("upToPA") + + -- 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] +defaultTyCons = [intTyCon, boolTyCon] + +initBuiltinDataCons :: Builtins -> [(Name, DataCon)] +initBuiltinDataCons bi = [(dataConName dc, dc)| dc <- defaultDataCons] + +defaultDataCons :: [DataCon] +defaultDataCons = [trueDataCon, falseDataCon] initBuiltinDicts :: [(Name, Module, FastString)] -> DsM [(Name, Var)] initBuiltinDicts ps @@ -200,9 +257,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 boolTyConName nDP_INSTANCES FSLIT("dPA_Bool") ] ++ tups where @@ -221,6 +280,7 @@ builtinPRs bi = mk (tyConName unitTyCon) nDP_REPR FSLIT("dPR_Unit") , mk (tyConName $ voidTyCon bi) nDP_REPR FSLIT("dPR_Void") , mk (tyConName $ wrapTyCon bi) nDP_REPR FSLIT("dPR_Wrap") + , mk (tyConName $ enumerationTyCon bi) nDP_REPR FSLIT("dPR_Enumeration") , mk (tyConName $ closureTyCon bi) nDP_CLOSURE FSLIT("dPR_Clo") -- temporary @@ -238,6 +298,13 @@ builtinPRs bi = mk_prod n = (tyConName $ prodTyCon n bi, nDP_REPR, mkFastString ("dPR_" ++ show n)) +initBuiltinBoxedTyCons :: Builtins -> DsM [(Name, TyCon)] +initBuiltinBoxedTyCons = return . builtinBoxedTyCons + +builtinBoxedTyCons :: Builtins -> [(Name, TyCon)] +builtinBoxedTyCons bi = + [(tyConName intPrimTyCon, intTyCon)] + externalVar :: Module -> FastString -> DsM Var externalVar mod fs = dsLookupGlobalId =<< lookupOrig mod (mkVarOccFS fs)