X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fvectorise%2FVectorise.hs;h=46aa9a8692245b938527e91ba900be62959ea140;hb=a385f0af5ea320a18d580f6a36c59c55b3516efd;hp=562e46d353123ba90e9fff3a7175c9f8f139f92e;hpb=2de9393dfe9b2aa0a94ad12991053848958fb174;p=ghc-hetmet.git diff --git a/compiler/vectorise/Vectorise.hs b/compiler/vectorise/Vectorise.hs index 562e46d..46aa9a8 100644 --- a/compiler/vectorise/Vectorise.hs +++ b/compiler/vectorise/Vectorise.hs @@ -1,15 +1,7 @@ -{-# OPTIONS -w #-} --- The above warning supression flag is a temporary kludge. --- While working on this module you are encouraged to remove it and fix --- any warnings in the module. See --- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings --- for details module Vectorise( vectorise ) where -#include "HsVersions.h" - import VectMonad import VectUtils import VectType @@ -28,29 +20,20 @@ import DataCon import TyCon import Type import FamInstEnv ( extendFamInstEnvList ) -import InstEnv ( extendInstEnvList ) import Var import VarEnv import VarSet -import Name ( Name, mkSysTvName, getName ) -import NameEnv import Id -import MkId ( unwrapFamInstScrut ) import OccName -import Module ( Module ) -import DsMonad hiding (mapAndUnzipM) -import DsUtils ( mkCoreTup, mkCoreTupTy ) +import DsMonad import Literal ( Literal, mkMachInt ) -import PrelNames import TysWiredIn -import TysPrim ( intPrimTy ) -import BasicTypes ( Boxity(..) ) import Outputable import FastString -import Control.Monad ( liftM, liftM2, zipWithM, mapAndUnzipM ) +import Control.Monad ( liftM, liftM2, zipWithM ) import Data.List ( sortBy, unzip4 ) vectorise :: HscEnv -> UniqSupply -> RuleBase -> ModGuts @@ -131,8 +114,7 @@ tryConvert var vect_var rhs 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) @@ -166,14 +148,6 @@ vectBndrNewIn v fs p x <- p return (vv, x) -vectBndrIn' :: Var -> (VVar -> VM a) -> VM (VVar, a) -vectBndrIn' v p - = localV - $ do - vv <- vectBndr v - x <- p vv - return (vv, x) - vectBndrsIn :: [Var] -> VM a -> VM ([VVar], a) vectBndrsIn vs p = localV @@ -271,7 +245,7 @@ vectExpr (_, AnnCase scrut bndr ty alts) where scrut_ty = exprType (deAnnotate scrut) -vectExpr (_, AnnCase expr bndr ty alts) +vectExpr (_, AnnCase _ _ _ _) = panic "vectExpr: case" vectExpr (_, AnnLet (AnnNonRec bndr rhs) body) @@ -323,9 +297,7 @@ vectLam fvs bs body vectTyAppExpr :: CoreExprWithFVs -> [Type] -> VM VExpr vectTyAppExpr (_, AnnVar v) tys = vectPolyVar v tys -vectTyAppExpr e tys = pprPanic "vectTyAppExpr" (ppr $ deAnnotate e) - -type CoreAltWithFVs = AnnAlt Id VarSet +vectTyAppExpr e _ = pprPanic "vectTyAppExpr" (ppr $ deAnnotate e) -- We convert -- @@ -342,33 +314,33 @@ type CoreAltWithFVs = AnnAlt Id VarSet -- -- FIXME: this is too lazy -vectAlgCase tycon ty_args scrut bndr ty [(DEFAULT, [], body)] +vectAlgCase :: TyCon -> [Type] -> CoreExprWithFVs -> Var -> Type + -> [(AltCon, [Var], CoreExprWithFVs)] + -> VM VExpr +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)] +vectAlgCase _tycon _ty_args scrut bndr ty [(DataAlt _, [], 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)] +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 - (vscrut, arr_tc, arg_tys) <- mkVScrut (vVar vbndr) + (vscrut, arr_tc, _arg_tys) <- mkVScrut (vVar vbndr) vect_dc <- maybeV (lookupDataCon dc) let [arr_dc] = tyConDataCons arr_tc repr <- mkRepr vect_tc @@ -376,15 +348,13 @@ vectAlgCase tycon ty_args scrut bndr ty [(DataAlt dc, bndrs, 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 +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) @@ -393,7 +363,7 @@ vectAlgCase tycon ty_args scrut bndr ty alts let (vect_dcs, vect_bndrss, lift_bndrss, vbodies) = unzip4 valts vexpr <- vectExpr scrut - (vscrut, arr_tc, arg_tys) <- mkVScrut (vVar vbndr) + (vscrut, arr_tc, _arg_tys) <- mkVScrut (vVar vbndr) let [arr_dc] = tyConDataCons arr_tc let (vect_scrut, lift_scrut) = vscrut @@ -410,7 +380,7 @@ vectAlgCase tycon ty_args scrut bndr ty alts 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 @@ -419,6 +389,7 @@ vectAlgCase tycon ty_args scrut bndr ty alts cmp DEFAULT DEFAULT = EQ cmp DEFAULT _ = LT cmp _ DEFAULT = GT + cmp _ _ = panic "vectAlgCase/cmp" proc_alt sel vty lty (DataAlt dc, bndrs, body) = do @@ -431,13 +402,14 @@ vectAlgCase tycon ty_args scrut bndr ty alts $ vectExpr body return (vect_dc, vect_bndrs, lift_bndrs, vbody) + proc_alt _ _ _ _ = panic "vectAlgCase/proc_alt" vect_alt_bndrs [] p = do 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) @@ -461,7 +433,7 @@ packLiftingContext len shape tag fvs vty lty p = 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