X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=c61343bcdc6680a4ae952e07a57e4464477a55fc;hb=f53056962c6d5d465001560a5b2afd8edf67517b;hp=c2610fbe6d60435ccc2586db8ff71537ac892059;hpb=57bb5a4f78e5b9d158ca5b90fafeb296ea88dec6;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index c2610fb..c61343b 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -1,10 +1,3 @@ -{-# OPTIONS -w #-} --- The above warning supression flag is a temporary kludge. --- While working on this module you are encouraged to remove it and fix --- any warnings in the module. See --- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings --- for details - module VectBuiltIn ( Builtins(..), sumTyCon, prodTyCon, uarrTy, intPrimArrayTy, combinePAVar, @@ -20,7 +13,7 @@ module VectBuiltIn ( import DsMonad import IfaceEnv ( lookupOrig ) -import Module ( Module ) +import Module import DataCon ( DataCon, dataConName, dataConWorkId ) import TyCon ( TyCon, tyConName, tyConDataCons ) import Var ( Var ) @@ -33,13 +26,12 @@ import TypeRep ( funTyCon ) import Type ( Type, mkTyConApp ) import TysPrim import TysWiredIn ( unitTyCon, unitDataCon, - tupleTyCon, + tupleTyCon, tupleCon, intTyCon, intTyConName, intTy, doubleTyCon, doubleTyConName, boolTyCon, boolTyConName, trueDataCon, falseDataCon, - parrTyCon, parrTyConName ) + parrTyConName ) import PrelNames ( gHC_PARR ) -import Module import BasicTypes ( Boxity(..) ) import FastString @@ -50,7 +42,7 @@ import Control.Monad ( liftM, zipWithM ) import Data.List ( unzip4 ) mAX_NDP_PROD :: Int -mAX_NDP_PROD = 3 +mAX_NDP_PROD = 5 mAX_NDP_SUM :: Int mAX_NDP_SUM = 3 @@ -61,6 +53,18 @@ mAX_NDP_COMBINE = 2 mkNDPModule :: FastString -> Module mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m) +nDP_UARR, + nDP_PARRAY, + nDP_REPR, + nDP_CLOSURE, + nDP_UNBOXED, + nDP_INSTANCES, + nDP_COMBINATORS, + nDP_PRELUDE_PARR, + nDP_PRELUDE_INT, + nDP_PRELUDE_DOUBLE, + nDP_PRELUDE_TUPLE :: Module + nDP_UARR = mkNDPModule FSLIT("Data.Array.Parallel.Unlifted.Flat.UArr") nDP_PARRAY = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.PArray") nDP_REPR = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Repr") @@ -72,6 +76,7 @@ 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") +nDP_PRELUDE_TUPLE = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Base.Tuple") data Builtins = Builtins { parrayTyCon :: TyCon @@ -201,24 +206,35 @@ initBuiltins } initBuiltinVars :: Builtins -> DsM [(Var, Var)] -initBuiltinVars bi +initBuiltinVars _ = do uvars <- zipWithM externalVar umods ufs vvars <- zipWithM externalVar vmods vfs + cvars <- zipWithM externalVar cmods cfs return $ [(v,v) | v <- map dataConWorkId defaultDataConWorkers] + ++ zip (map dataConWorkId cons) cvars ++ zip uvars vvars where (umods, ufs, vmods, vfs) = unzip4 preludeVars + (cons, cmods, cfs) = unzip3 preludeDataCons + defaultDataConWorkers :: [DataCon] defaultDataConWorkers = [trueDataCon, falseDataCon, unitDataCon] +preludeDataCons :: [(DataCon, Module, FastString)] +preludeDataCons + = [mk_tup n nDP_PRELUDE_TUPLE (mkFastString $ "tup" ++ show n) | n <- [2..3]] + where + mk_tup n mod name = (tupleCon Boxed n, mod, name) + 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 gHC_PARR FSLIT("zipP") nDP_COMBINATORS FSLIT("zipPA") + , mk gHC_PARR FSLIT("unzipP") nDP_COMBINATORS FSLIT("unzipPA") , mk gHC_PARR FSLIT("filterP") nDP_COMBINATORS FSLIT("filterPA") , mk gHC_PARR FSLIT("lengthP") nDP_COMBINATORS FSLIT("lengthPA") , mk gHC_PARR FSLIT("replicateP") nDP_COMBINATORS FSLIT("replicatePA") @@ -231,6 +247,7 @@ preludeVars , 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("intDiv") nDP_PRELUDE_INT FSLIT("intDivV") , mk nDP_PRELUDE_INT FSLIT("sumP") nDP_PRELUDE_INT FSLIT("sumPA") , mk nDP_PRELUDE_INT FSLIT("upToP") nDP_PRELUDE_INT FSLIT("upToPA") @@ -244,6 +261,7 @@ preludeVars , 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("divide") nDP_PRELUDE_DOUBLE FSLIT("divideV") , mk nDP_PRELUDE_DOUBLE FSLIT("sumP") nDP_PRELUDE_DOUBLE FSLIT("sumPA") , mk nDP_PRELUDE_DOUBLE FSLIT("minIndexP") nDP_PRELUDE_DOUBLE FSLIT("minIndexPA") @@ -281,7 +299,7 @@ defaultTyCons :: [TyCon] defaultTyCons = [intTyCon, boolTyCon, doubleTyCon] initBuiltinDataCons :: Builtins -> [(Name, DataCon)] -initBuiltinDataCons bi = [(dataConName dc, dc)| dc <- defaultDataCons] +initBuiltinDataCons _ = [(dataConName dc, dc)| dc <- defaultDataCons] defaultDataCons :: [DataCon] defaultDataCons = [trueDataCon, falseDataCon, unitDataCon] @@ -294,6 +312,7 @@ initBuiltinDicts ps where (tcs, mods, fss) = unzip3 ps +initBuiltinPAs :: Builtins -> DsM [(Name, Var)] initBuiltinPAs = initBuiltinDicts . builtinPAs builtinPAs :: Builtins -> [(Name, Module, FastString)] @@ -312,11 +331,12 @@ builtinPAs bi where mk name mod fs = (name, mod, fs) - tups = map mk_tup [2..3] + tups = map mk_tup [2..mAX_NDP_PROD] mk_tup n = mk (tyConName $ tupleTyCon Boxed n) nDP_INSTANCES (mkFastString $ "dPA_" ++ show n) +initBuiltinPRs :: Builtins -> DsM [(Name, Var)] initBuiltinPRs = initBuiltinDicts . builtinPRs builtinPRs :: Builtins -> [(Name, Module, FastString)] @@ -348,7 +368,7 @@ initBuiltinBoxedTyCons :: Builtins -> DsM [(Name, TyCon)] initBuiltinBoxedTyCons = return . builtinBoxedTyCons builtinBoxedTyCons :: Builtins -> [(Name, TyCon)] -builtinBoxedTyCons bi = +builtinBoxedTyCons _ = [(tyConName intPrimTyCon, intTyCon)] externalVar :: Module -> FastString -> DsM Var @@ -359,6 +379,7 @@ externalTyCon :: Module -> FastString -> DsM TyCon externalTyCon mod fs = dsLookupTyCon =<< lookupOrig mod (mkOccNameFS tcName fs) +unitTyConName :: Name unitTyConName = tyConName unitTyCon @@ -378,6 +399,7 @@ primPArray tycon | otherwise = return Nothing +prim_ty_cons :: NameEnv String prim_ty_cons = mkNameEnv [mk_prim intPrimTyCon] where mk_prim tycon = (tyConName tycon, '_' : getOccString tycon)