Use (UArr Int) instead of PArray_Int# in vectorisation
[ghc-hetmet.git] / compiler / vectorise / VectType.hs
index 64de665..86dcaf2 100644 (file)
@@ -366,8 +366,8 @@ arrShapeTys (EnumRepr {}) = sumShapeTys
 
 sumShapeTys :: VM [Type]
 sumShapeTys = do
-                int_arr <- builtin parrayIntPrimTyCon
-                return [intPrimTy, mkTyConApp int_arr [], mkTyConApp int_arr []]
+                int_arr <- builtin intPrimArrayTy
+                return [intPrimTy, int_arr, int_arr]
 
 
 arrShapeVars :: Repr -> VM [Var]
@@ -431,7 +431,7 @@ arrReprVars repr
 mkRepr :: TyCon -> VM Repr
 mkRepr vect_tc
   | [tys] <- rep_tys = boxedProductRepr tys
-  | all null rep_tys = enumRepr
+  -- | all null rep_tys = enumRepr
   | otherwise        = sumRepr =<< mapM unboxedProductRepr rep_tys
   where
     rep_tys = map dataConRepArgTys $ tyConDataCons vect_tc
@@ -1022,7 +1022,7 @@ fromVect (FunTy arg_ty res_ty) expr
       vres_ty <- vectType res_ty
       apply   <- builtin applyClosureVar
       body    <- fromVect res_ty
-               $ Var apply `mkTyApps` [arg_ty, res_ty] `mkApps` [expr, Var arg]
+               $ Var apply `mkTyApps` [varg_ty, vres_ty] `mkApps` [expr, varg]
       return $ Lam arg body
 fromVect ty expr
   = identityConv ty >> return expr
@@ -1042,6 +1042,7 @@ identityConvTyCon :: TyCon -> VM ()
 identityConvTyCon tc
   | isBoxedTupleTyCon tc = return ()
   | isUnLiftedTyCon tc   = return ()
-  | otherwise            = maybeV (lookupTyCon tc) >> return ()
-
+  | otherwise            = do
+                             tc' <- maybeV (lookupTyCon tc)
+                             if tc == tc' then return () else noV