Vectorisation utilities
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Fri, 16 Nov 2007 05:10:37 +0000 (05:10 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Fri, 16 Nov 2007 05:10:37 +0000 (05:10 +0000)
compiler/vectorise/VectMonad.hs
compiler/vectorise/VectType.hs
compiler/vectorise/VectUtils.hs

index 92ed3ec..1bd450e 100644 (file)
@@ -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
index c631054..2f4ca2f 100644 (file)
@@ -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
index ebb2718..bdee5ea 100644 (file)
@@ -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