retain arity for let-bound vars in simplifier
authorKirsten Chevalier <t-kirstc@microsoft.com>
Tue, 28 Nov 2006 13:51:43 +0000 (13:51 +0000)
committerKirsten Chevalier <t-kirstc@microsoft.com>
Tue, 28 Nov 2006 13:51:43 +0000 (13:51 +0000)
compiler/basicTypes/Id.lhs
compiler/basicTypes/IdInfo.lhs
compiler/simplCore/SimplEnv.lhs

index edaeb7a..cc9587e 100644 (file)
@@ -22,7 +22,7 @@ module Id (
        -- Modifying an Id
        setIdName, setIdUnique, Id.setIdType, setIdExported, setIdNotExported, 
        setIdInfo, lazySetIdInfo, modifyIdInfo, maybeModifyIdInfo,
-       zapLamIdInfo, zapDemandIdInfo, 
+       zapLamIdInfo, zapDemandIdInfo, zapFragileIdInfo,
 
        -- Predicates
        isImplicitId, isDeadBinder, isDictId,
@@ -513,9 +513,15 @@ clearOneShotLambda id
 \end{code}
 
 \begin{code}
+zapInfo :: (IdInfo -> Maybe IdInfo) -> Id -> Id
+zapInfo zapper id = maybeModifyIdInfo (zapper (idInfo id)) id
+
 zapLamIdInfo :: Id -> Id
-zapLamIdInfo id = maybeModifyIdInfo (zapLamInfo (idInfo id)) id
+zapLamIdInfo = zapInfo zapLamInfo
+
+zapDemandIdInfo = zapInfo zapDemandInfo
 
-zapDemandIdInfo id = maybeModifyIdInfo (zapDemandInfo (idInfo id)) id
+zapFragileIdInfo :: Id -> Id
+zapFragileIdInfo = zapInfo zapFragileInfo 
 \end{code}
 
index 9db8e35..38e2a2e 100644 (file)
@@ -16,7 +16,7 @@ module IdInfo (
        seqIdInfo, megaSeqIdInfo,
 
        -- Zapping
-       zapLamInfo, zapDemandInfo,
+       zapLamInfo, zapDemandInfo, zapFragileInfo,
 
        -- Arity
        ArityInfo,
@@ -693,3 +693,8 @@ zapDemandInfo info@(IdInfo {newDemandInfo = dmd})
   | otherwise  = Nothing
 \end{code}
 
+\begin{code}
+zapFragileInfo :: IdInfo -> Maybe IdInfo
+zapFragileInfo info = Just (info `setSpecInfo` emptySpecInfo
+                                 `setUnfoldingInfo` NoUnfolding)
+\end{code}
index c9fb4fb..040240c 100644 (file)
@@ -620,7 +620,9 @@ substLetIdBndr env@(SimplEnv { seInScope = in_scope, seIdSubst = id_subst }) old
   where
     id1           = uniqAway in_scope old_id
     id2    = substIdType env id1
-    new_id = setIdInfo id2 vanillaIdInfo
+    -- we want to get rid of any info that's dependent on free variables,
+    -- but keep other info (like the arity).
+    new_id = zapFragileIdInfo id2
 
        -- Extend the substitution if the unique has changed,
        -- or there's some useful occurrence information