Move isVoidRep, isGcPtrRep to TyCon to join primRepSizeW etc
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 22 Nov 2013 15:05:39 +0000 (15:05 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 22 Nov 2013 18:57:09 +0000 (18:57 +0000)
This is just a modest refactoring

compiler/codeGen/StgCmmClosure.hs
compiler/codeGen/StgCmmEnv.hs
compiler/codeGen/StgCmmExpr.hs
compiler/types/TyCon.lhs

index 627c189..037ba97 100644 (file)
@@ -123,9 +123,10 @@ isKnownFun _ = False
 
 -- Why are these here?
 
--- NB: this is reliable because by StgCmm no Ids have unboxed tuple type
 idPrimRep :: Id -> PrimRep
 idPrimRep id = typePrimRep (idType id)
+    -- NB: typePrimRep fails on unboxed tuples,
+    --     but by StgCmm no Ids have unboxed tuple type
 
 addIdReps :: [Id] -> [(PrimRep, Id)]
 addIdReps ids = [(idPrimRep id, id) | id <- ids]
@@ -136,14 +137,6 @@ addArgReps args = [(argPrimRep arg, arg) | arg <- args]
 argPrimRep :: StgArg -> PrimRep
 argPrimRep arg = typePrimRep (stgArgType arg)
 
-isVoidRep :: PrimRep -> Bool
-isVoidRep VoidRep = True
-isVoidRep _other  = False
-
-isGcPtrRep :: PrimRep -> Bool
-isGcPtrRep PtrRep = True
-isGcPtrRep _      = False
-
 
 -----------------------------------------------------------------------------
 --                LambdaFormInfo
index 353fec5..2b8677c 100644 (file)
@@ -11,7 +11,7 @@ module StgCmmEnv (
         litIdInfo, lneIdInfo, rhsIdInfo, mkRhsInit,
         idInfoToAmode,
 
-        NonVoid(..), unsafe_stripNV, isVoidId, nonVoidIds,
+        NonVoid(..), unsafe_stripNV, nonVoidIds,
 
         addBindC, addBindsC,
 
@@ -60,9 +60,6 @@ unsafe_stripNV (NonVoid a) = a
 instance (Outputable a) => Outputable (NonVoid a) where
   ppr (NonVoid a) = ppr a
 
-isVoidId :: Id -> Bool
-isVoidId = isVoidRep . idPrimRep
-
 nonVoidIds :: [Id] -> [NonVoid Id]
 nonVoidIds ids = [NonVoid id | id <- ids, not (isVoidRep (idPrimRep id))]
 
index 51578b1..cc32a14 100644 (file)
@@ -638,7 +638,7 @@ cgConApp con stg_args
         ; emitReturn [idInfoToAmode idinfo] }
 
 cgIdApp :: Id -> [StgArg] -> FCode ReturnKind
-cgIdApp fun_id [] | isVoidId fun_id = emitReturn []
+cgIdApp fun_id [] | isVoidTy (idType fun_id) = emitReturn []
 cgIdApp fun_id args = do
     dflags         <- getDynFlags
     fun_info       <- getCgIdInfo fun_id
index ccc78a2..bb489b3 100644 (file)
@@ -84,7 +84,7 @@ module TyCon(
 
         -- * Primitive representations of Types
         PrimRep(..), PrimElemRep(..),
-        tyConPrimRep,
+        tyConPrimRep, isVoidRep, isGcPtrRep,
         primRepSizeW, primElemRepSizeB,
 
         -- * Recursion breaking
@@ -857,6 +857,14 @@ instance Outputable PrimRep where
 instance Outputable PrimElemRep where
   ppr r = text (show r)
 
+isVoidRep :: PrimRep -> Bool
+isVoidRep VoidRep = True
+isVoidRep _other  = False
+
+isGcPtrRep :: PrimRep -> Bool
+isGcPtrRep PtrRep = True
+isGcPtrRep _      = False
+
 -- | Find the size of a 'PrimRep', in words
 primRepSizeW :: DynFlags -> PrimRep -> Int
 primRepSizeW _      IntRep           = 1