X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=e432faf78e55858cc2c66c7e055f7c7fa9c8e824;hb=d8b2f9e9f169442e20c7ae22006767f948a27b41;hp=ffb0490db3552fd18726d3d00c577ccd1c97c990;hpb=6dddb99f31483f347dbec50d70f2f096e11f135f;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index ffb0490..e432faf 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -31,8 +31,10 @@ import OccName import TypeRep ( funTyCon ) import Type ( Type ) import TysPrim -import TysWiredIn ( unitTyCon, tupleTyCon, +import TysWiredIn ( unitTyCon, unitDataCon, + tupleTyCon, intTyCon, intTyConName, + doubleTyCon, doubleTyConName, boolTyCon, boolTyConName, trueDataCon, falseDataCon, parrTyCon, parrTyConName ) import PrelNames ( gHC_PARR ) @@ -61,13 +63,13 @@ mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m) 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") -nDP_PRELUDE_PARR = gHC_PARR -- mkNDPModule FSLIT("Data.Array.Parallel.Prelude.PArr") -nDP_PRELUDE_INT = mkNDPModule FSLIT("Data.Array.Parallel.Prelude.Int") -nDP_PRELUDE = mkNDPModule FSLIT("Data.Array.Parallel.Prelude") +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 @@ -77,7 +79,6 @@ data Builtins = Builtins { , prTyCon :: TyCon , prDataCon :: DataCon , parrayIntPrimTyCon :: TyCon - , parrayBoolPrimTyCon :: TyCon , voidTyCon :: TyCon , wrapTyCon :: TyCon , enumerationTyCon :: TyCon @@ -126,8 +127,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#") + parrayIntPrimTyCon <- externalTyCon nDP_UNBOXED FSLIT("PArray_Int#") closureTyCon <- externalTyCon nDP_CLOSURE FSLIT(":->") voidTyCon <- externalTyCon nDP_REPR FSLIT("Void") @@ -144,17 +144,17 @@ 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#") - lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA") - replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA") + 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") - 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 @@ -169,7 +169,6 @@ initBuiltins , prTyCon = prTyCon , prDataCon = prDataCon , parrayIntPrimTyCon = parrayIntPrimTyCon - , parrayBoolPrimTyCon = parrayBoolPrimTyCon , voidTyCon = voidTyCon , wrapTyCon = wrapTyCon , enumerationTyCon = enumerationTyCon @@ -204,20 +203,56 @@ initBuiltinVars bi (umods, ufs, vmods, vfs) = unzip4 preludeVars defaultDataConWorkers :: [DataCon] -defaultDataConWorkers = [trueDataCon, falseDataCon] +defaultDataConWorkers = [trueDataCon, falseDataCon, unitDataCon] preludeVars :: [(Module, FastString, Module, FastString)] preludeVars = [ - mk nDP_PRELUDE_PARR FSLIT("mapP") nDP_COMBINATORS FSLIT("mapPA") - , mk nDP_PRELUDE_PARR FSLIT("zipWithP") nDP_COMBINATORS FSLIT("zipWithPA") + 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("filterP") nDP_COMBINATORS FSLIT("filterPA") + , mk gHC_PARR FSLIT("lengthP") nDP_COMBINATORS FSLIT("lengthPA") + , mk gHC_PARR FSLIT("replicateP") nDP_COMBINATORS FSLIT("replicatePA") + , mk gHC_PARR FSLIT("!:") nDP_COMBINATORS FSLIT("indexPA") + , 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") + , 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_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") + , mk nDP_PRELUDE_DOUBLE FSLIT("le") nDP_PRELUDE_DOUBLE FSLIT("leV") + , mk nDP_PRELUDE_DOUBLE FSLIT("lt") nDP_PRELUDE_DOUBLE FSLIT("ltV") + , mk nDP_PRELUDE_DOUBLE FSLIT("ge") nDP_PRELUDE_DOUBLE FSLIT("geV") + , mk nDP_PRELUDE_DOUBLE FSLIT("gt") nDP_PRELUDE_DOUBLE FSLIT("gtV") + -- FIXME: temporary - , mk nDP_PRELUDE FSLIT("fromPArrayP") nDP_PRELUDE FSLIT("fromPArrayPA") + , mk nDP_PRELUDE_PARR FSLIT("fromPArrayP") nDP_PRELUDE_PARR FSLIT("fromPArrayPA") + , mk nDP_PRELUDE_PARR FSLIT("toPArrayP") nDP_PRELUDE_PARR FSLIT("toPArrayPA") + , mk nDP_PRELUDE_PARR FSLIT("fromNestedPArrayP") nDP_PRELUDE_PARR FSLIT("fromNestedPArrayPA") ] where mk = (,,,) @@ -235,13 +270,13 @@ initBuiltinTyCons 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] defaultDataCons :: [DataCon] -defaultDataCons = [trueDataCon, falseDataCon] +defaultDataCons = [trueDataCon, falseDataCon, unitDataCon] initBuiltinDicts :: [(Name, Module, FastString)] -> DsM [(Name, Var)] initBuiltinDicts ps @@ -262,6 +297,7 @@ builtinPAs bi , 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 @@ -286,6 +322,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] @@ -321,7 +358,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 @@ -329,7 +366,7 @@ 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