X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectBuiltIn.hs;h=d4178987760179c9a76d4d33dd7b6d2b00fc0ebd;hb=222415a5b658e737a0a1f2c980c6f80635289f75;hp=2f0b0d94a4baeaeecc0e4a97ab12ec4dae84f387;hpb=c5dbdf06b92472ef64b66a01f107ba30b65c3708;p=ghc-hetmet.git diff --git a/compiler/vectorise/VectBuiltIn.hs b/compiler/vectorise/VectBuiltIn.hs index 2f0b0d9..d417898 100644 --- a/compiler/vectorise/VectBuiltIn.hs +++ b/compiler/vectorise/VectBuiltIn.hs @@ -1,6 +1,6 @@ module VectBuiltIn ( Builtins(..), sumTyCon, prodTyCon, prodDataCon, - selTy, selReplicate, selPick, selElements, + selTy, selReplicate, selPick, selTags, selElements, combinePDVar, scalarZip, closureCtrFun, initBuiltins, initBuiltinVars, initBuiltinTyCons, initBuiltinDataCons, initBuiltinPAs, initBuiltinPRs, @@ -27,11 +27,11 @@ import OccName import TypeRep ( funTyCon ) import Type ( Type, mkTyConApp ) import TysPrim -import TysWiredIn ( unitTyCon, unitDataCon, +import TysWiredIn ( unitDataCon, tupleTyCon, tupleCon, - intTyCon, intTyConName, - doubleTyCon, doubleTyConName, - boolTyCon, boolTyConName, trueDataCon, falseDataCon, + intTyCon, + doubleTyCon, + boolTyCon, trueDataCon, falseDataCon, parrTyConName ) import PrelNames ( word8TyConName, gHC_PARR ) import BasicTypes ( Boxity(..) ) @@ -111,6 +111,7 @@ data Builtins = Builtins { , selTys :: Array Int Type , selReplicates :: Array Int CoreExpr , selPicks :: Array Int CoreExpr + , selTagss :: Array Int CoreExpr , selEls :: Array (Int, Int) CoreExpr , sumTyCons :: Array Int TyCon , closureTyCon :: TyCon @@ -125,6 +126,7 @@ data Builtins = Builtins { , replicatePDVar :: Var , emptyPDVar :: Var , packPDVar :: Var + , packByTagPDVar :: Var , combinePDVars :: Array Int Var , scalarClass :: Class , scalarZips :: Array Int Var @@ -149,6 +151,9 @@ selReplicate = indexBuiltin "selReplicate" selReplicates selPick :: Int -> Builtins -> CoreExpr selPick = indexBuiltin "selPick" selPicks +selTags :: Int -> Builtins -> CoreExpr +selTags = indexBuiltin "selTags" selTagss + selElements :: Int -> Int -> Builtins -> CoreExpr selElements i j = indexBuiltin "selElements" selEls (i,j) @@ -156,7 +161,7 @@ sumTyCon :: Int -> Builtins -> TyCon sumTyCon = indexBuiltin "sumTyCon" sumTyCons prodTyCon :: Int -> Builtins -> TyCon -prodTyCon n bi +prodTyCon n _ | n >= 2 && n <= mAX_DPH_PROD = tupleTyCon Boxed n | otherwise = pprPanic "prodTyCon" (ppr n) @@ -196,6 +201,8 @@ initBuiltins pkg (numbered "replicate" 2 mAX_DPH_SUM) sel_picks <- mapM (externalFun dph_Selector) (numbered "pick" 2 mAX_DPH_SUM) + sel_tags <- mapM (externalFun dph_Selector) + (numbered "tagsSel" 2 mAX_DPH_SUM) sel_els <- mapM mk_elements [(i,j) | i <- [2..mAX_DPH_SUM], j <- [0..i-1]] sum_tcs <- mapM (externalTyCon dph_Repr) @@ -204,6 +211,7 @@ initBuiltins pkg let selTys = listArray (2, mAX_DPH_SUM) sel_tys selReplicates = listArray (2, mAX_DPH_SUM) sel_replicates selPicks = listArray (2, mAX_DPH_SUM) sel_picks + selTagss = listArray (2, mAX_DPH_SUM) sel_tags selEls = array ((2,0), (mAX_DPH_SUM, mAX_DPH_SUM)) sel_els sumTyCons = listArray (2, mAX_DPH_SUM) sum_tcs @@ -218,6 +226,7 @@ initBuiltins pkg replicatePDVar <- externalVar dph_PArray (fsLit "replicatePD") emptyPDVar <- externalVar dph_PArray (fsLit "emptyPD") packPDVar <- externalVar dph_PArray (fsLit "packPD") + packByTagPDVar <- externalVar dph_PArray (fsLit "packByTagPD") combines <- mapM (externalVar dph_PArray) [mkFastString ("combine" ++ show i ++ "PD") @@ -253,6 +262,7 @@ initBuiltins pkg , selTys = selTys , selReplicates = selReplicates , selPicks = selPicks + , selTagss = selTagss , selEls = selEls , sumTyCons = sumTyCons , closureTyCon = closureTyCon @@ -267,6 +277,7 @@ initBuiltins pkg , replicatePDVar = replicatePDVar , emptyPDVar = emptyPDVar , packPDVar = packPDVar + , packByTagPDVar = packByTagPDVar , combinePDVars = combinePDVars , scalarClass = scalarClass , scalarZips = scalarZips @@ -595,10 +606,6 @@ externalClass :: Module -> FastString -> DsM Class externalClass mod fs = dsLookupClass =<< lookupOrig mod (mkClsOccFS fs) -unitTyConName :: Name -unitTyConName = tyConName unitTyCon - - primMethod :: TyCon -> String -> Builtins -> DsM (Maybe Var) primMethod tycon method (Builtins { dphModules = mods }) | Just suffix <- lookupNameEnv prim_ty_cons (tyConName tycon)