Vectorisation utilities
[ghc-hetmet.git] / compiler / vectorise / VectType.hs
index 77cb429..2f4ca2f 100644 (file)
@@ -1,5 +1,13 @@
+{-# 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/Commentary/CodingStyle#Warnings
+-- for details
+
 module VectType ( vectTyCon, vectType, vectTypeEnv,
-                   PAInstance, buildPADict )
+                  mkRepr, arrShapeTys, arrShapeVars, arrSelector,
+                  PAInstance, buildPADict )
 where
 
 #include "HsVersions.h"
@@ -355,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
@@ -585,11 +597,11 @@ buildToArrPRepr repr vect_tc prepr_tc arr_tc
                $ mkConApp data_con [Var len_var, Var repr_var]
 
     to_prod repr_vars@(r : _)
-            (ProdRepr { prod_components   = tys
+            (ProdRepr { prod_components   = tys@(ty : _)
                       , prod_arr_tycon    = tycon
                       , prod_arr_data_con = data_con })
       = do
-          len <- lengthPA (Var r)
+          len <- lengthPA ty (Var r)
           return . wrapFamInstBody tycon tys
                  . mkConApp data_con
                  $ map Type tys ++ len : map Var repr_vars