X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=92bd1b52c09ba0c9824c9462913b3dd8e690aa57;hb=ad7f0a6770d87600130fe4230d4546b340980eb7;hp=6b3790fef72a2f6714f97d649b243f9f94c0e9f8;hpb=17b297d97d327620ed6bfab942f8992b2446f1bf;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index 6b3790f..92bd1b5 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -1,12 +1,12 @@ -{-# OPTIONS_GHC -w #-} +{-# 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/WorkingConventions#Warnings +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings -- for details module VectBuiltIn ( - Builtins(..), sumTyCon, prodTyCon, + Builtins(..), sumTyCon, prodTyCon, combinePAVar, initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs, primMethod, primPArray @@ -30,8 +30,7 @@ import TypeRep ( funTyCon ) import Type ( Type ) import TysPrim import TysWiredIn ( unitTyCon, tupleTyCon, intTyConName ) -import Module ( Module, mkModule, mkModuleNameFS ) -import PackageConfig ( ndpPackageId ) +import Module import BasicTypes ( Boxity(..) ) import FastString @@ -46,6 +45,9 @@ mAX_NDP_PROD = 3 mAX_NDP_SUM :: Int mAX_NDP_SUM = 3 +mAX_NDP_COMBINE :: Int +mAX_NDP_COMBINE = 2 + mkNDPModule :: FastString -> Module mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m) @@ -63,6 +65,7 @@ data Builtins = Builtins { , prTyCon :: TyCon , prDataCon :: DataCon , parrayIntPrimTyCon :: TyCon + , parrayBoolPrimTyCon :: TyCon , voidTyCon :: TyCon , wrapTyCon :: TyCon , sumTyCons :: Array Int TyCon @@ -75,11 +78,13 @@ data Builtins = Builtins { , applyClosurePVar :: Var , replicatePAIntPrimVar :: Var , upToPAIntPrimVar :: Var + , selectPAIntPrimVar :: Var + , truesPABoolPrimVar :: Var , lengthPAVar :: Var , replicatePAVar :: Var , emptyPAVar :: Var - -- , packPAVar :: Var - -- , combinePAVar :: Var + , packPAVar :: Var + , combinePAVars :: Array Int Var , liftingContext :: Var } @@ -94,6 +99,11 @@ prodTyCon n bi | n >= 0 && n <= mAX_NDP_PROD = tupleTyCon Boxed n | otherwise = pprPanic "prodTyCon" (ppr n) +combinePAVar :: Int -> Builtins -> Var +combinePAVar n bi + | n >= 2 && n <= mAX_NDP_COMBINE = combinePAVars bi ! n + | otherwise = pprPanic "combinePAVar" (ppr n) + initBuiltins :: DsM Builtins initBuiltins = do @@ -104,6 +114,7 @@ initBuiltins prTyCon <- externalTyCon nDP_PARRAY FSLIT("PR") let [prDataCon] = tyConDataCons prTyCon parrayIntPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Int#") + parrayBoolPrimTyCon <- externalTyCon nDP_PRIM FSLIT("PArray_Bool#") closureTyCon <- externalTyCon nDP_CLOSURE FSLIT(":->") voidTyCon <- externalTyCon nDP_REPR FSLIT("Void") @@ -121,11 +132,17 @@ initBuiltins 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 <- dsLookupGlobalId packPAName - -- combinePAVar <- dsLookupGlobalId combinePAName + packPAVar <- externalVar nDP_PARRAY FSLIT("packPA") + + combines <- mapM (externalVar nDP_PARRAY) + [mkFastString ("combine" ++ show i ++ "PA") + | i <- [2..mAX_NDP_COMBINE]] + let combinePAVars = listArray (2, mAX_NDP_COMBINE) combines liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy) newUnique @@ -138,6 +155,7 @@ initBuiltins , prTyCon = prTyCon , prDataCon = prDataCon , parrayIntPrimTyCon = parrayIntPrimTyCon + , parrayBoolPrimTyCon = parrayBoolPrimTyCon , voidTyCon = voidTyCon , wrapTyCon = wrapTyCon , sumTyCons = sumTyCons @@ -150,11 +168,13 @@ initBuiltins , applyClosurePVar = applyClosurePVar , replicatePAIntPrimVar = replicatePAIntPrimVar , upToPAIntPrimVar = upToPAIntPrimVar + , selectPAIntPrimVar = selectPAIntPrimVar + , truesPABoolPrimVar = truesPABoolPrimVar , lengthPAVar = lengthPAVar , replicatePAVar = replicatePAVar , emptyPAVar = emptyPAVar - -- , packPAVar = packPAVar - -- , combinePAVar = combinePAVar + , packPAVar = packPAVar + , combinePAVars = combinePAVars , liftingContext = liftingContext }