X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=c2610fbe6d60435ccc2586db8ff71537ac892059;hb=727fae32ea0b6ca6ebdf1b3137649813e4d7ac3d;hp=204f2dfca30c957c54b7424e86f1b75e531438e0;hpb=26028c7efcd8d0ca7484b6ae2852ef777e9bf315;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index 204f2df..c2610fb 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -6,7 +6,8 @@ -- for details module VectBuiltIn ( - Builtins(..), sumTyCon, prodTyCon, combinePAVar, + Builtins(..), sumTyCon, prodTyCon, uarrTy, intPrimArrayTy, + combinePAVar, initBuiltins, initBuiltinVars, initBuiltinTyCons, initBuiltinDataCons, initBuiltinPAs, initBuiltinPRs, initBuiltinBoxedTyCons, @@ -29,11 +30,11 @@ import NameEnv import OccName import TypeRep ( funTyCon ) -import Type ( Type ) +import Type ( Type, mkTyConApp ) import TysPrim import TysWiredIn ( unitTyCon, unitDataCon, tupleTyCon, - intTyCon, intTyConName, + intTyCon, intTyConName, intTy, doubleTyCon, doubleTyConName, boolTyCon, boolTyConName, trueDataCon, falseDataCon, parrTyCon, parrTyConName ) @@ -60,10 +61,11 @@ mAX_NDP_COMBINE = 2 mkNDPModule :: FastString -> Module mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m) +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") nDP_CLOSURE = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Closure") -nDP_PRIM = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Prim") +nDP_UNBOXED = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Unboxed") nDP_INSTANCES = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Instances") nDP_COMBINATORS = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Combinators") @@ -78,8 +80,7 @@ data Builtins = Builtins { , preprTyCon :: TyCon , prTyCon :: TyCon , prDataCon :: DataCon - , parrayIntPrimTyCon :: TyCon - , parrayBoolPrimTyCon :: TyCon + , uarrTyCon :: TyCon , voidTyCon :: TyCon , wrapTyCon :: TyCon , enumerationTyCon :: TyCon @@ -103,6 +104,12 @@ data Builtins = Builtins { , liftingContext :: Var } +uarrTy :: Type -> Builtins -> Type +uarrTy ty bi = mkTyConApp (uarrTyCon bi) [ty] + +intPrimArrayTy :: Builtins -> Type +intPrimArrayTy = uarrTy intTy + sumTyCon :: Int -> Builtins -> TyCon sumTyCon n bi | n >= 2 && n <= mAX_NDP_SUM = sumTyCons bi ! n @@ -128,8 +135,7 @@ initBuiltins preprTyCon <- externalTyCon nDP_PARRAY FSLIT("PRepr") prTyCon <- externalTyCon nDP_PARRAY FSLIT("PR") let [prDataCon] = tyConDataCons prTyCon - parrayIntPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Int#") - parrayBoolPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Bool#") + uarrTyCon <- externalTyCon nDP_UARR FSLIT("UArr") closureTyCon <- externalTyCon nDP_CLOSURE FSLIT(":->") voidTyCon <- externalTyCon nDP_REPR FSLIT("Void") @@ -146,10 +152,10 @@ initBuiltins applyClosureVar <- externalVar nDP_CLOSURE FSLIT("$:") mkClosurePVar <- externalVar nDP_CLOSURE FSLIT("mkClosureP") applyClosurePVar <- externalVar nDP_CLOSURE FSLIT("$:^") - replicatePAIntPrimVar <- externalVar nDP_PRIM FSLIT("replicatePA_Int#") - upToPAIntPrimVar <- externalVar nDP_PRIM FSLIT("upToPA_Int#") - selectPAIntPrimVar <- externalVar nDP_PRIM FSLIT("selectPA_Int#") - truesPABoolPrimVar <- externalVar nDP_PRIM FSLIT("truesPA_Bool#") + replicatePAIntPrimVar <- externalVar nDP_UNBOXED FSLIT("replicatePA_Int#") + upToPAIntPrimVar <- externalVar nDP_UNBOXED FSLIT("upToPA_Int#") + selectPAIntPrimVar <- externalVar nDP_UNBOXED FSLIT("selectPA_Int#") + truesPABoolPrimVar <- externalVar nDP_UNBOXED FSLIT("truesPA_Bool#") lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA#") replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA#") emptyPAVar <- externalVar nDP_PARRAY FSLIT("emptyPA") @@ -170,8 +176,7 @@ initBuiltins , preprTyCon = preprTyCon , prTyCon = prTyCon , prDataCon = prDataCon - , parrayIntPrimTyCon = parrayIntPrimTyCon - , parrayBoolPrimTyCon = parrayBoolPrimTyCon + , uarrTyCon = uarrTyCon , voidTyCon = voidTyCon , wrapTyCon = wrapTyCon , enumerationTyCon = enumerationTyCon @@ -221,6 +226,7 @@ preludeVars , mk gHC_PARR FSLIT("crossMapP") nDP_COMBINATORS FSLIT("crossMapPA") , mk gHC_PARR FSLIT("singletonP") nDP_COMBINATORS FSLIT("singletonPA") , mk gHC_PARR FSLIT("concatP") nDP_COMBINATORS FSLIT("concatPA") + , mk gHC_PARR FSLIT("+:+") nDP_COMBINATORS FSLIT("appPA") , mk nDP_PRELUDE_INT FSLIT("plus") nDP_PRELUDE_INT FSLIT("plusV") , mk nDP_PRELUDE_INT FSLIT("minus") nDP_PRELUDE_INT FSLIT("minusV") @@ -228,10 +234,21 @@ preludeVars , 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_INT FSLIT("eq") nDP_PRELUDE_INT FSLIT("eqV") + , mk nDP_PRELUDE_INT FSLIT("neq") nDP_PRELUDE_INT FSLIT("neqV") + , mk nDP_PRELUDE_INT FSLIT("le") nDP_PRELUDE_INT FSLIT("leV") + , mk nDP_PRELUDE_INT FSLIT("lt") nDP_PRELUDE_INT FSLIT("ltV") + , mk nDP_PRELUDE_INT FSLIT("ge") nDP_PRELUDE_INT FSLIT("geV") + , mk nDP_PRELUDE_INT FSLIT("gt") nDP_PRELUDE_INT FSLIT("gtV") + , 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") + , mk nDP_PRELUDE_DOUBLE FSLIT("minIndexP") + nDP_PRELUDE_DOUBLE FSLIT("minIndexPA") + , mk nDP_PRELUDE_DOUBLE FSLIT("maxIndexP") + nDP_PRELUDE_DOUBLE FSLIT("maxIndexPA") , mk nDP_PRELUDE_DOUBLE FSLIT("eq") nDP_PRELUDE_DOUBLE FSLIT("eqV") , mk nDP_PRELUDE_DOUBLE FSLIT("neq") nDP_PRELUDE_DOUBLE FSLIT("neqV") @@ -349,7 +366,7 @@ primMethod :: TyCon -> String -> DsM (Maybe Var) primMethod tycon method | Just suffix <- lookupNameEnv prim_ty_cons (tyConName tycon) = liftM Just - $ dsLookupGlobalId =<< lookupOrig nDP_PRIM (mkVarOcc $ method ++ suffix) + $ dsLookupGlobalId =<< lookupOrig nDP_UNBOXED (mkVarOcc $ method ++ suffix) | otherwise = return Nothing @@ -357,10 +374,11 @@ primPArray :: TyCon -> DsM (Maybe TyCon) primPArray tycon | Just suffix <- lookupNameEnv prim_ty_cons (tyConName tycon) = liftM Just - $ dsLookupTyCon =<< lookupOrig nDP_PRIM (mkOccName tcName $ "PArray" ++ suffix) + $ dsLookupTyCon =<< lookupOrig nDP_UNBOXED (mkOccName tcName $ "PArray" ++ suffix) | otherwise = return Nothing prim_ty_cons = mkNameEnv [mk_prim intPrimTyCon] where mk_prim tycon = (tyConName tycon, '_' : getOccString tycon) +