X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=05b1289ee83703677dae1f45a1afd55d9a3eefc6;hb=f64384c40b3db4fddb8fad5463da39464e52ab13;hp=2338d875b9b154fe17a9c2f50773c1231224dbbb;hpb=49dca6ac4a383c6dd699263f96c2f65959782128;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index 2338d87..05b1289 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -23,7 +23,8 @@ import TypeRep ( funTyCon ) import Type ( Type ) import TysPrim import TysWiredIn ( unitTyCon, tupleTyCon, intTyConName ) -import PrelNames +import Module ( Module, mkModule, mkModuleNameFS ) +import PackageConfig ( ndpPackageId ) import BasicTypes ( Boxity(..) ) import FastString @@ -38,6 +39,15 @@ mAX_NDP_PROD = 3 mAX_NDP_SUM :: Int mAX_NDP_SUM = 3 +mkNDPModule :: FastString -> Module +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_INSTANCES = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Instances") + data Builtins = Builtins { parrayTyCon :: TyCon , paTyCon :: TyCon @@ -46,13 +56,18 @@ data Builtins = Builtins { , prTyCon :: TyCon , prDataCon :: DataCon , parrayIntPrimTyCon :: TyCon + , voidTyCon :: TyCon + , wrapTyCon :: TyCon , sumTyCons :: Array Int TyCon , closureTyCon :: TyCon + , voidVar :: Var , mkPRVar :: Var , mkClosureVar :: Var , applyClosureVar :: Var , mkClosurePVar :: Var , applyClosurePVar :: Var + , replicatePAIntPrimVar :: Var + , upToPAIntPrimVar :: Var , lengthPAVar :: Var , replicatePAVar :: Var , emptyPAVar :: Var @@ -68,34 +83,40 @@ sumTyCon n bi prodTyCon :: Int -> Builtins -> TyCon prodTyCon n bi - | n >= 2 && n <= mAX_NDP_PROD = tupleTyCon Boxed n + | n == 1 = wrapTyCon bi + | n >= 0 && n <= mAX_NDP_PROD = tupleTyCon Boxed n | otherwise = pprPanic "prodTyCon" (ppr n) initBuiltins :: DsM Builtins initBuiltins = do - parrayTyCon <- dsLookupTyCon parrayTyConName - paTyCon <- dsLookupTyCon paTyConName + parrayTyCon <- externalTyCon nDP_PARRAY FSLIT("PArray") + paTyCon <- externalTyCon nDP_PARRAY FSLIT("PA") let [paDataCon] = tyConDataCons paTyCon - preprTyCon <- dsLookupTyCon preprTyConName - prTyCon <- dsLookupTyCon prTyConName + preprTyCon <- externalTyCon nDP_PARRAY FSLIT("PRepr") + prTyCon <- externalTyCon nDP_PARRAY FSLIT("PR") let [prDataCon] = tyConDataCons prTyCon - parrayIntPrimTyCon <- dsLookupTyCon parrayIntPrimTyConName - closureTyCon <- dsLookupTyCon closureTyConName + parrayIntPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Int#") + closureTyCon <- externalTyCon nDP_CLOSURE FSLIT(":->") - sum_tcs <- mapM (lookupExternalTyCon nDP_REPR) + voidTyCon <- externalTyCon nDP_REPR FSLIT("Void") + wrapTyCon <- externalTyCon nDP_REPR FSLIT("Wrap") + sum_tcs <- mapM (externalTyCon nDP_REPR) [mkFastString ("Sum" ++ show i) | i <- [2..mAX_NDP_SUM]] let sumTyCons = listArray (2, mAX_NDP_SUM) sum_tcs - mkPRVar <- dsLookupGlobalId mkPRName - mkClosureVar <- dsLookupGlobalId mkClosureName - applyClosureVar <- dsLookupGlobalId applyClosureName - mkClosurePVar <- dsLookupGlobalId mkClosurePName - applyClosurePVar <- dsLookupGlobalId applyClosurePName - lengthPAVar <- dsLookupGlobalId lengthPAName - replicatePAVar <- dsLookupGlobalId replicatePAName - emptyPAVar <- dsLookupGlobalId emptyPAName + voidVar <- externalVar nDP_REPR FSLIT("void") + mkPRVar <- externalVar nDP_PARRAY FSLIT("mkPR") + mkClosureVar <- externalVar nDP_CLOSURE FSLIT("mkClosure") + 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#") + lengthPAVar <- externalVar nDP_PARRAY FSLIT("lengthPA") + replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA") + emptyPAVar <- externalVar nDP_PARRAY FSLIT("emptyPA") -- packPAVar <- dsLookupGlobalId packPAName -- combinePAVar <- dsLookupGlobalId combinePAName @@ -110,13 +131,18 @@ initBuiltins , prTyCon = prTyCon , prDataCon = prDataCon , parrayIntPrimTyCon = parrayIntPrimTyCon + , voidTyCon = voidTyCon + , wrapTyCon = wrapTyCon , sumTyCons = sumTyCons , closureTyCon = closureTyCon + , voidVar = voidVar , mkPRVar = mkPRVar , mkClosureVar = mkClosureVar , applyClosureVar = applyClosureVar , mkClosurePVar = mkClosurePVar , applyClosurePVar = applyClosurePVar + , replicatePAIntPrimVar = replicatePAIntPrimVar + , upToPAIntPrimVar = upToPAIntPrimVar , lengthPAVar = lengthPAVar , replicatePAVar = replicatePAVar , emptyPAVar = emptyPAVar @@ -125,35 +151,29 @@ initBuiltins , liftingContext = liftingContext } -initBuiltinTyCons :: DsM [(Name, TyCon)] -initBuiltinTyCons - = do - vects <- sequence vs - return (zip origs vects) - where - (origs, vs) = unzip builtinTyCons - -builtinTyCons :: [(Name, DsM TyCon)] -builtinTyCons = [(tyConName funTyCon, dsLookupTyCon closureTyConName)] +initBuiltinTyCons :: Builtins -> [(Name, TyCon)] +initBuiltinTyCons bi = [(tyConName funTyCon, closureTyCon bi)] initBuiltinDicts :: [(Name, Module, FastString)] -> DsM [(Name, Var)] initBuiltinDicts ps = do - dicts <- zipWithM lookupExternalVar mods fss + dicts <- zipWithM externalVar mods fss return $ zip tcs dicts where (tcs, mods, fss) = unzip3 ps -initBuiltinPAs = initBuiltinDicts builtinPAs +initBuiltinPAs = initBuiltinDicts . builtinPAs -builtinPAs :: [(Name, Module, FastString)] -builtinPAs = [ - mk closureTyConName nDP_CLOSURE FSLIT("dPA_Clo") - , mk unitTyConName nDP_INSTANCES FSLIT("dPA_Unit") +builtinPAs :: Builtins -> [(Name, Module, FastString)] +builtinPAs bi + = [ + mk (tyConName $ closureTyCon bi) nDP_CLOSURE FSLIT("dPA_Clo") + , mk (tyConName $ voidTyCon bi) nDP_REPR FSLIT("dPA_Void") + , mk unitTyConName nDP_INSTANCES FSLIT("dPA_Unit") - , mk intTyConName nDP_INSTANCES FSLIT("dPA_Int") - ] - ++ tups + , mk intTyConName nDP_INSTANCES FSLIT("dPA_Int") + ] + ++ tups where mk name mod fs = (name, mod, fs) @@ -167,8 +187,10 @@ initBuiltinPRs = initBuiltinDicts . builtinPRs builtinPRs :: Builtins -> [(Name, Module, FastString)] builtinPRs bi = [ - mk (tyConName unitTyCon) nDP_REPR FSLIT("dPR_Unit") - , mk closureTyConName nDP_CLOSURE FSLIT("dPR_Clo") + 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 $ closureTyCon bi) nDP_CLOSURE FSLIT("dPR_Clo") -- temporary , mk intTyConName nDP_INSTANCES FSLIT("dPR_Int") @@ -185,12 +207,12 @@ builtinPRs bi = mk_prod n = (tyConName $ prodTyCon n bi, nDP_REPR, mkFastString ("dPR_" ++ show n)) -lookupExternalVar :: Module -> FastString -> DsM Var -lookupExternalVar mod fs +externalVar :: Module -> FastString -> DsM Var +externalVar mod fs = dsLookupGlobalId =<< lookupOrig mod (mkVarOccFS fs) -lookupExternalTyCon :: Module -> FastString -> DsM TyCon -lookupExternalTyCon mod fs +externalTyCon :: Module -> FastString -> DsM TyCon +externalTyCon mod fs = dsLookupTyCon =<< lookupOrig mod (mkOccNameFS tcName fs) unitTyConName = tyConName unitTyCon