mkClosureApp
) where
-#include "HsVersions.h"
-
import VectCore
import VectMonad
-import DsUtils
+import MkCore
import CoreSyn
import CoreUtils
import Coercion
import TyCon
import DataCon
import Var
-import Id ( mkWildId )
import MkId ( unwrapFamInstScrut )
import TysWiredIn
import BasicTypes ( Boxity(..) )
mkPArrayType ty
| Just tycon <- splitPrimTyCon ty
= do
- arr <- traceMaybeV "mkPArrayType" (ppr tycon)
- $ lookupPrimPArray tycon
- return $ mkTyConApp arr []
+ r <- lookupPrimPArray tycon
+ case r of
+ Just arr -> return $ mkTyConApp arr []
+ Nothing -> cantVectorise "Primitive tycon not vectorised" (ppr tycon)
mkPArrayType ty = mkBuiltinTyConApp parrayTyCon [ty]
mkBuiltinCo :: (Builtins -> TyCon) -> VM Coercion
prDFunOfTyCon :: TyCon -> VM CoreExpr
prDFunOfTyCon tycon
- = liftM Var (traceMaybeV "prDictOfTyCon" (ppr tycon) (lookupTyConPR tycon))
+ = liftM Var
+ . maybeCantVectoriseM "No PR dictionary for tycon" (ppr tycon)
+ $ lookupTyConPR tycon
paDictArgType :: TyVar -> VM (Maybe Type)
paDictArgType tv = go (TyVarTy tv) (tyVarKind tv)
go ty k | Just k' <- kindView k = go ty k'
go ty (FunTy k1 k2)
= do
- tv <- newTyVar FSLIT("a") k1
+ tv <- newTyVar (fsLit "a") k1
mty1 <- go (TyVarTy tv) k1
case mty1 of
Just ty1 -> do
paDFunApply dfun ty_args
paDictOfTyApp (TyConApp tc _) ty_args
= do
- dfun <- traceMaybeV "paDictOfTyApp" (ppr tc) (lookupTyConPA tc)
+ dfun <- maybeCantVectoriseM "No PA dictionary for tycon" (ppr tc)
+ $ lookupTyConPA tc
paDFunApply (Var dfun) ty_args
-paDictOfTyApp ty _ = pprPanic "paDictOfTyApp" (ppr ty)
+paDictOfTyApp ty _
+ = cantVectorise "Can't construct PA dictionary for type" (ppr ty)
paDFunType :: TyCon -> VM Type
paDFunType tc
paMethod :: PAMethod -> Type -> VM CoreExpr
paMethod (_method, name) ty
| Just tycon <- splitPrimTyCon ty
- = do
- fn <- traceMaybeV "paMethod" (ppr tycon <+> text name)
- $ lookupPrimMethod tycon name
- return (Var fn)
+ = liftM Var
+ . maybeCantVectoriseM "No PA method" (text name <+> text "for" <+> ppr tycon)
+ $ lookupPrimMethod tycon name
paMethod (method, _name) ty
= do
mk_dict_var tv = do
r <- paDictArgType tv
case r of
- Just ty -> liftM Just (newLocalVar FSLIT("dPA") ty)
+ Just ty -> liftM Just (newLocalVar (fsLit "dPA") ty)
Nothing -> return Nothing
mk_lams mdicts = mkLams (tvs ++ [dict | Just dict <- mdicts])
buildClosures tvs vars (arg_ty : arg_tys) res_ty mk_body
= do
res_ty' <- mkClosureTypes arg_tys res_ty
- arg <- newLocalVVar FSLIT("x") arg_ty
+ arg <- newLocalVVar (fsLit "x") arg_ty
buildClosure tvs vars arg_ty res_ty'
. hoistPolyVExpr tvs
$ do
buildClosure tvs vars arg_ty res_ty mk_body
= do
(env_ty, env, bind) <- buildEnv vars
- env_bndr <- newLocalVVar FSLIT("env") env_ty
- arg_bndr <- newLocalVVar FSLIT("arg") arg_ty
+ env_bndr <- newLocalVVar (fsLit "env") env_ty
+ arg_bndr <- newLocalVVar (fsLit "arg") arg_ty
fn <- hoistPolyVExpr tvs
$ do
return (vbody', lbody'))
where
(vs,ls) = unzip vvs
- tys = map idType vs
+ tys = map varType vs
mkVectEnv :: [Type] -> [Var] -> (Type, CoreExpr, CoreExpr -> CoreExpr -> CoreExpr)
mkVectEnv [] [] = (unitTy, Var unitDataConId, \_ body -> body)
mkVectEnv [ty] [v] = (ty, Var v, \env body -> Let (NonRec v env) body)
mkVectEnv tys vs = (ty, mkCoreTup (map Var vs),
- \env body -> Case env (mkWildId ty) (exprType body)
+ \env body -> mkWildCase env ty (exprType body)
[(DataAlt (tupleCon Boxed (length vs)), vs, body)])
where
ty = mkCoreTupTy tys
bind env body = let scrut = unwrapFamInstScrut env_tc env_tyargs env
in
- return $ Case scrut (mkWildId (exprType scrut))
+ return $ mkWildCase scrut (exprType scrut)
(exprType body)
[(DataAlt env_con, lc : bndrs, body)]
return (env, bind)