module Vectorise( vectorise )
where
-#include "HsVersions.h"
-
import VectMonad
import VectUtils
import VectType
vectBndr :: Var -> VM VVar
vectBndr v
= do
- vty <- vectType (idType v)
- lty <- mkPArrayType vty
+ (vty, lty) <- vectAndLiftType (idType v)
let vv = v `Id.setIdType` vty
lv = v `Id.setIdType` lty
updLEnv (mapTo vv lv)
-- FIXME: this is too lazy
vectAlgCase tycon ty_args scrut bndr ty [(DEFAULT, [], body)]
= do
- vscrut <- vectExpr scrut
- vty <- vectType ty
- lty <- mkPArrayType vty
+ vscrut <- vectExpr scrut
+ (vty, lty) <- vectAndLiftType ty
(vbndr, vbody) <- vectBndrIn bndr (vectExpr body)
return $ vCaseDEFAULT vscrut vbndr vty lty vbody
vectAlgCase tycon ty_args scrut bndr ty [(DataAlt dc, [], body)]
= do
- vscrut <- vectExpr scrut
- vty <- vectType ty
- lty <- mkPArrayType vty
+ vscrut <- vectExpr scrut
+ (vty, lty) <- vectAndLiftType ty
(vbndr, vbody) <- vectBndrIn bndr (vectExpr body)
return $ vCaseDEFAULT vscrut vbndr vty lty vbody
vectAlgCase tycon ty_args scrut bndr ty [(DataAlt dc, bndrs, body)]
= do
- vect_tc <- maybeV (lookupTyCon tycon)
- vty <- vectType ty
- lty <- mkPArrayType vty
- vexpr <- vectExpr scrut
+ vect_tc <- maybeV (lookupTyCon tycon)
+ (vty, lty) <- vectAndLiftType ty
+ vexpr <- vectExpr scrut
(vbndr, (vbndrs, vbody)) <- vect_scrut_bndr
. vectBndrsIn bndrs
$ vectExpr body
return . vLet (vNonRec vbndr vexpr)
$ vCaseProd vscrut vty lty vect_dc arr_dc shape_bndrs vbndrs vbody
where
- vect_scrut_bndr | isDeadBinder bndr = vectBndrNewIn bndr FSLIT("scrut")
+ vect_scrut_bndr | isDeadBinder bndr = vectBndrNewIn bndr (fsLit "scrut")
| otherwise = vectBndrIn bndr
vectAlgCase tycon ty_args scrut bndr ty alts
= do
- vect_tc <- maybeV (lookupTyCon tycon)
- vty <- vectType ty
- lty <- mkPArrayType vty
-
+ vect_tc <- maybeV (lookupTyCon tycon)
+ (vty, lty) <- vectAndLiftType ty
repr <- mkRepr vect_tc
shape_bndrs <- arrShapeVars repr
(len, sel, indices) <- arrSelector repr (map Var shape_bndrs)
return . vLet (vNonRec vbndr vexpr)
$ (vect_case, lift_case)
where
- vect_scrut_bndr | isDeadBinder bndr = vectBndrNewIn bndr FSLIT("scrut")
+ vect_scrut_bndr | isDeadBinder bndr = vectBndrNewIn bndr (fsLit "scrut")
| otherwise = vectBndrIn bndr
alts' = sortBy (\(alt1, _, _) (alt2, _, _) -> cmp alt1 alt2) alts
void_tc <- builtin voidTyCon
let void_ty = mkTyConApp void_tc []
arr_ty <- mkPArrayType void_ty
- bndr <- newLocalVar FSLIT("voids") arr_ty
+ bndr <- newLocalVar (fsLit "voids") arr_ty
len <- lengthPA void_ty (Var bndr)
e <- p len
return ([], [bndr], e)
= do
select <- builtin selectPAIntPrimVar
let sel_expr = mkApps (Var select) [shape, tag]
- sel_var <- newLocalVar FSLIT("sel#") (exprType sel_expr)
+ sel_var <- newLocalVar (fsLit "sel#") (exprType sel_expr)
lc_var <- builtin liftingContext
localV $
do