X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=971fa3e8c1441e2d8b2b1a3d0f5bf2d89010afbd;hb=fd399de26f49a14431a07ed4a1351f41781b80ec;hp=2338d875b9b154fe17a9c2f50773c1231224dbbb;hpb=49dca6ac4a383c6dd699263f96c2f65959782128;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index 2338d87..971fa3e 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -1,3 +1,10 @@ +{-# 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, initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs, @@ -23,7 +30,7 @@ import TypeRep ( funTyCon ) import Type ( Type ) import TysPrim import TysWiredIn ( unitTyCon, tupleTyCon, intTyConName ) -import PrelNames +import Module import BasicTypes ( Boxity(..) ) import FastString @@ -38,6 +45,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,17 +62,25 @@ data Builtins = Builtins { , prTyCon :: TyCon , prDataCon :: DataCon , parrayIntPrimTyCon :: TyCon + , parrayBoolPrimTyCon :: 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 + , selectPAIntPrimVar :: Var + , truesPABoolPrimVar :: Var , lengthPAVar :: Var , replicatePAVar :: Var , emptyPAVar :: Var - -- , packPAVar :: Var + , packPAVar :: Var -- , combinePAVar :: Var , liftingContext :: Var } @@ -68,35 +92,44 @@ 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#") + parrayBoolPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Bool#") + 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 - -- packPAVar <- dsLookupGlobalId packPAName + 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#") + 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") + emptyPAVar <- externalVar nDP_PARRAY FSLIT("emptyPA") + packPAVar <- externalVar nDP_PARRAY FSLIT("packPA") -- combinePAVar <- dsLookupGlobalId combinePAName liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy) @@ -110,50 +143,52 @@ initBuiltins , prTyCon = prTyCon , prDataCon = prDataCon , parrayIntPrimTyCon = parrayIntPrimTyCon + , parrayBoolPrimTyCon = parrayBoolPrimTyCon + , voidTyCon = voidTyCon + , wrapTyCon = wrapTyCon , sumTyCons = sumTyCons , closureTyCon = closureTyCon + , voidVar = voidVar , mkPRVar = mkPRVar , mkClosureVar = mkClosureVar , applyClosureVar = applyClosureVar , mkClosurePVar = mkClosurePVar , applyClosurePVar = applyClosurePVar + , replicatePAIntPrimVar = replicatePAIntPrimVar + , upToPAIntPrimVar = upToPAIntPrimVar + , selectPAIntPrimVar = selectPAIntPrimVar + , truesPABoolPrimVar = truesPABoolPrimVar , lengthPAVar = lengthPAVar , replicatePAVar = replicatePAVar , emptyPAVar = emptyPAVar - -- , packPAVar = packPAVar + , packPAVar = packPAVar -- , combinePAVar = combinePAVar , 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 +202,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 +222,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