X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=e340cd1cf7d105ef53e79df511c85b7638c4f7b8;hb=ee79af08084c320762b6b684e2ce8198395cf089;hp=0b8c04747e4776f0de2da575c6e5c589df1821d9;hpb=255f46e120cc18f51703c79d009d76016140abcb;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index 0b8c047..e340cd1 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -1,6 +1,8 @@ module VectBuiltIn ( Builtins(..), sumTyCon, prodTyCon, - initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs + initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs, + + primMethod, primPArray ) where #include "HsVersions.h" @@ -13,11 +15,13 @@ import DataCon ( DataCon ) import TyCon ( TyCon, tyConName, tyConDataCons ) import Var ( Var ) import Id ( mkSysLocal ) -import Name ( Name ) -import OccName ( mkVarOccFS, mkOccNameFS, tcName ) +import Name ( Name, getOccString ) +import NameEnv +import OccName import TypeRep ( funTyCon ) -import TysPrim ( intPrimTy ) +import Type ( Type ) +import TysPrim import TysWiredIn ( unitTyCon, tupleTyCon, intTyConName ) import PrelNames import BasicTypes ( Boxity(..) ) @@ -41,6 +45,7 @@ data Builtins = Builtins { , preprTyCon :: TyCon , prTyCon :: TyCon , prDataCon :: DataCon + , parrayIntPrimTyCon :: TyCon , sumTyCons :: Array Int TyCon , closureTyCon :: TyCon , mkPRVar :: Var @@ -48,12 +53,13 @@ data Builtins = Builtins { , applyClosureVar :: Var , mkClosurePVar :: Var , applyClosurePVar :: Var + , replicatePAIntPrimVar :: Var + , upToPAIntPrimVar :: Var , lengthPAVar :: Var , replicatePAVar :: Var , emptyPAVar :: Var -- , packPAVar :: Var -- , combinePAVar :: Var - , intEqPAVar :: Var , liftingContext :: Var } @@ -67,7 +73,6 @@ prodTyCon n bi | n >= 2 && n <= mAX_NDP_PROD = tupleTyCon Boxed n | otherwise = pprPanic "prodTyCon" (ppr n) - initBuiltins :: DsM Builtins initBuiltins = do @@ -77,6 +82,7 @@ initBuiltins preprTyCon <- dsLookupTyCon preprTyConName prTyCon <- dsLookupTyCon prTyConName let [prDataCon] = tyConDataCons prTyCon + parrayIntPrimTyCon <- dsLookupTyCon parrayIntPrimTyConName closureTyCon <- dsLookupTyCon closureTyConName sum_tcs <- mapM (lookupExternalTyCon nDP_REPR) @@ -89,12 +95,13 @@ initBuiltins applyClosureVar <- dsLookupGlobalId applyClosureName mkClosurePVar <- dsLookupGlobalId mkClosurePName applyClosurePVar <- dsLookupGlobalId applyClosurePName + replicatePAIntPrimVar <- dsLookupGlobalId replicatePAIntPrimName + upToPAIntPrimVar <- dsLookupGlobalId upToPAIntPrimName lengthPAVar <- dsLookupGlobalId lengthPAName replicatePAVar <- dsLookupGlobalId replicatePAName emptyPAVar <- dsLookupGlobalId emptyPAName -- packPAVar <- dsLookupGlobalId packPAName -- combinePAVar <- dsLookupGlobalId combinePAName - intEqPAVar <- dsLookupGlobalId intEqPAName liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy) newUnique @@ -106,6 +113,7 @@ initBuiltins , preprTyCon = preprTyCon , prTyCon = prTyCon , prDataCon = prDataCon + , parrayIntPrimTyCon = parrayIntPrimTyCon , sumTyCons = sumTyCons , closureTyCon = closureTyCon , mkPRVar = mkPRVar @@ -113,12 +121,13 @@ initBuiltins , applyClosureVar = applyClosureVar , mkClosurePVar = mkClosurePVar , applyClosurePVar = applyClosurePVar + , replicatePAIntPrimVar = replicatePAIntPrimVar + , upToPAIntPrimVar = upToPAIntPrimVar , lengthPAVar = lengthPAVar , replicatePAVar = replicatePAVar , emptyPAVar = emptyPAVar -- , packPAVar = packPAVar -- , combinePAVar = combinePAVar - , intEqPAVar = intEqPAVar , liftingContext = liftingContext } @@ -192,3 +201,23 @@ lookupExternalTyCon mod fs unitTyConName = tyConName unitTyCon + +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) + + | otherwise = return Nothing + +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) + + | otherwise = return Nothing + +prim_ty_cons = mkNameEnv [mk_prim intPrimTyCon] + where + mk_prim tycon = (tyConName tycon, '_' : getOccString tycon)