Make Vectorise warning-free
[ghc-hetmet.git] / compiler / vectorise / Vectorise.hs
index 48aa05c..46aa9a8 100644 (file)
@@ -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
@@ -471,9 +443,8 @@ packLiftingContext len shape tag fvs vty lty p
           (vexpr, lexpr) <- p
           empty <- emptyPA vty
           return (vexpr, Let (NonRec sel_var sel_expr)
-                         . mkLets (concat bnds)
                          $ Case len lc_var lty
-                             [(DEFAULT, [], lexpr),
+                             [(DEFAULT, [], mkLets (concat bnds) lexpr),
                               (LitAlt (mkMachInt 0), [], empty)])
 
 packFreeVar :: CoreExpr -> CoreExpr -> Var -> VM [CoreBind]