Use packByTag instead of pack in the vectoriser
[ghc-hetmet.git] / compiler / vectorise / VectUtils.hs
index ea647c7..e508424 100644 (file)
@@ -11,7 +11,7 @@ module VectUtils (
   pdataReprTyCon, pdataReprDataCon, mkVScrut,
   prDictOfType, prDFunOfTyCon,
   paDictArgType, paDictOfType, paDFunType,
-  paMethod, wrapPR, replicatePD, emptyPD, packPD,
+  paMethod, wrapPR, replicatePD, emptyPD, packPD, packByTagPD,
   combinePD,
   liftPD,
   zipScalars, scalarClosure,
@@ -241,7 +241,7 @@ prDictOfTyApp ty_fn ty_args
   | Just ty_fn' <- coreView ty_fn = prDictOfTyApp ty_fn' ty_args
 prDictOfTyApp (TyConApp tc _) ty_args
   = do
-      dfun <- prDFunOfTyCon tc
+      dfun <- liftM Var $ maybeV (lookupTyConPR tc)
       prDFunApply dfun ty_args
 prDictOfTyApp _ _ = noV
 
@@ -269,6 +269,12 @@ packPD :: Type -> CoreExpr -> CoreExpr -> CoreExpr -> VM CoreExpr
 packPD ty xs len sel = liftM (`mkApps` [xs, len, sel])
                              (paMethod packPDVar "packPD" ty)
 
+packByTagPD :: Type -> CoreExpr -> CoreExpr -> CoreExpr -> CoreExpr
+                 -> VM CoreExpr
+packByTagPD ty xs len tags t
+  = liftM (`mkApps` [xs, len, tags, t])
+          (paMethod packByTagPDVar "packByTagPD" ty)
+
 combinePD :: Type -> CoreExpr -> CoreExpr -> [CoreExpr]
           -> VM CoreExpr
 combinePD ty len sel xs