- int_arr <- builtin parrayIntPrimTyCon
- return [intPrimTy, mkTyConApp int_arr [], mkTyConApp int_arr []]
-arrShapeTys (ProdRepr {}) = return [intPrimTy]
-arrShapeTys (IdRepr _) = return []
-arrShapeTys (VoidRepr {}) = return [intPrimTy]
-
-arrShapeVars :: Repr -> VM [Var]
-arrShapeVars repr = mapM (newLocalVar FSLIT("sh")) =<< arrShapeTys repr
-
-replicateShape :: Repr -> CoreExpr -> CoreExpr -> VM [CoreExpr]
-replicateShape (ProdRepr {}) len _ = return [len]
-replicateShape (SumRepr {}) len tag
- = do
- rep <- builtin replicatePAIntPrimVar
- up <- builtin upToPAIntPrimVar
- return [len, Var rep `mkApps` [len, tag], Var up `App` len]
-replicateShape (IdRepr _) _ _ = return []
-replicateShape (VoidRepr {}) len _ = return [len]
-
-emptyArrRepr :: Repr -> VM [CoreExpr]
-emptyArrRepr (SumRepr { sum_components = prods })
- = liftM concat $ mapM emptyArrRepr prods
-emptyArrRepr (ProdRepr { prod_components = [] })
- = return [Var unitDataConId]
-emptyArrRepr (ProdRepr { prod_components = tys })
- = mapM emptyPA tys
-emptyArrRepr (IdRepr ty)
- = liftM singleton $ emptyPA ty
-emptyArrRepr (VoidRepr { void_tycon = tycon })
- = liftM singleton $ emptyPA (mkTyConApp tycon [])
-
-arrReprTys :: Repr -> VM [Type]
-arrReprTys (SumRepr { sum_components = reprs })
- = liftM concat $ mapM arrReprTys reprs
-arrReprTys (ProdRepr { prod_components = [] })
- = return [unitTy]
-arrReprTys (ProdRepr { prod_components = tys })
- = mapM mkPArrayType tys
-arrReprTys (IdRepr ty)
- = liftM singleton $ mkPArrayType ty
-arrReprTys (VoidRepr { void_tycon = tycon })
- = liftM singleton $ mkPArrayType (mkTyConApp tycon [])
-
-arrReprTys' :: Repr -> VM [[Type]]
-arrReprTys' (SumRepr { sum_components = reprs })
- = mapM arrReprTys reprs
-arrReprTys' repr = liftM singleton $ arrReprTys repr
-
-arrReprVars :: Repr -> VM [[Var]]
-arrReprVars repr
- = mapM (mapM (newLocalVar FSLIT("rs"))) =<< arrReprTys' repr
-
-mkRepr :: TyCon -> VM Repr
-mkRepr vect_tc
- = sumRepr =<< mapM unboxedProductRepr rep_tys