From: Roman Leshchinskiy Date: Fri, 16 Nov 2007 05:10:37 +0000 (+0000) Subject: Vectorisation utilities X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=51ad52d4f7d259b500543404f419ff62456e2097;hp=fd399de26f49a14431a07ed4a1351f41781b80ec Vectorisation utilities --- diff --git a/compiler/vectorise/VectMonad.hs b/compiler/vectorise/VectMonad.hs index 92ed3ec..1bd450e 100644 --- a/compiler/vectorise/VectMonad.hs +++ b/compiler/vectorise/VectMonad.hs @@ -11,7 +11,7 @@ module VectMonad ( noV, tryV, maybeV, traceMaybeV, orElseV, fixV, localV, closedV, initV, liftDs, - cloneName, cloneId, + cloneName, cloneId, cloneVar, newExportedVar, newLocalVar, newDummyVar, newTyVar, Builtins(..), sumTyCon, prodTyCon, @@ -301,6 +301,9 @@ cloneId mk_occ id ty | otherwise = Id.mkLocalId name ty return id' +cloneVar :: Var -> VM Var +cloneVar var = liftM (setIdUnique var) (liftDs newUnique) + newExportedVar :: OccName -> Type -> VM Var newExportedVar occ_name ty = do diff --git a/compiler/vectorise/VectType.hs b/compiler/vectorise/VectType.hs index c631054..2f4ca2f 100644 --- a/compiler/vectorise/VectType.hs +++ b/compiler/vectorise/VectType.hs @@ -6,7 +6,8 @@ -- for details module VectType ( vectTyCon, vectType, vectTypeEnv, - PAInstance, buildPADict ) + mkRepr, arrShapeTys, arrShapeVars, arrSelector, + PAInstance, buildPADict ) where #include "HsVersions.h" @@ -362,6 +363,10 @@ replicateShape (IdRepr _) _ _ = return [] replicateShape (VoidRepr {}) len _ = return [len] replicateShape (EnumRepr {}) len _ = return [len] +arrSelector :: Repr -> [a] -> a +arrSelector (SumRepr {}) [_, sel, _] = sel +arrSelector _ _ = panic "arrSelector" + emptyArrRepr :: Repr -> VM [CoreExpr] emptyArrRepr (SumRepr { sum_components = prods }) = liftM concat $ mapM emptyArrRepr prods diff --git a/compiler/vectorise/VectUtils.hs b/compiler/vectorise/VectUtils.hs index ebb2718..bdee5ea 100644 --- a/compiler/vectorise/VectUtils.hs +++ b/compiler/vectorise/VectUtils.hs @@ -8,7 +8,9 @@ module VectUtils ( collectAnnTypeBinders, collectAnnTypeArgs, isAnnTypeArg, collectAnnValBinders, - mkDataConTag, mkDataConTagLit, + dataConTagZ, mkDataConTag, mkDataConTagLit, + + newLocalVVar, mkBuiltinCo, mkPADictType, mkPArrayType, mkPReprType, @@ -74,12 +76,14 @@ isAnnTypeArg :: AnnExpr b ann -> Bool isAnnTypeArg (_, AnnType t) = True isAnnTypeArg _ = False +dataConTagZ :: DataCon -> Int +dataConTagZ con = dataConTag con - fIRST_TAG + mkDataConTagLit :: DataCon -> Literal -mkDataConTagLit con - = mkMachInt . toInteger $ dataConTag con - fIRST_TAG +mkDataConTagLit = mkMachInt . toInteger . dataConTagZ mkDataConTag :: DataCon -> CoreExpr -mkDataConTag con = mkIntLitInt (dataConTag con - fIRST_TAG) +mkDataConTag = mkIntLitInt . dataConTagZ splitPrimTyCon :: Type -> Maybe TyCon splitPrimTyCon ty