X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FsimplCore%2FSimplEnv.lhs;h=3832f547de2c019d184976fd877547946e263dac;hb=96cb07b5940f98f35ac292e40d0129db5d3748ce;hp=c9fb4fbb8ba23d5d9471a535c0498c71fe0609e1;hpb=6f074a37a1546391632863898da3c32bbb7995df;p=ghc-hetmet.git diff --git a/compiler/simplCore/SimplEnv.lhs b/compiler/simplCore/SimplEnv.lhs index c9fb4fb..3832f54 100644 --- a/compiler/simplCore/SimplEnv.lhs +++ b/compiler/simplCore/SimplEnv.lhs @@ -9,8 +9,6 @@ module SimplEnv ( OutId, OutTyVar, OutBind, OutExpr, OutAlt, OutArg, OutType, OutBndr, InCoercion, OutCoercion, - isStrictBndr, - -- The simplifier mode setMode, getMode, @@ -92,13 +90,6 @@ type OutAlt = CoreAlt type OutArg = CoreArg \end{code} -\begin{code} -isStrictBndr :: Id -> Bool -isStrictBndr bndr - = ASSERT2( isId bndr, ppr bndr ) - isStrictDmd (idNewDemandInfo bndr) || isStrictType (idType bndr) -\end{code} - %************************************************************************ %* * \subsubsection{The @SimplEnv@ type} @@ -364,7 +355,7 @@ andFF FltLifted flt = flt classifyFF :: CoreBind -> FloatFlag classifyFF (Rec _) = FltLifted classifyFF (NonRec bndr rhs) - | not (isStrictBndr bndr) = FltLifted + | not (isStrictId bndr) = FltLifted | exprOkForSpeculation rhs = FltOkSpec | otherwise = FltCareful @@ -608,8 +599,12 @@ substLetIdBndr :: SimplEnv -> InBndr -- Env and binder to transform -> (SimplEnv, OutBndr) -- C.f. substIdBndr above -- Clone Id if necessary, substitute its type --- Return an Id with completely zapped IdInfo +-- Return an Id with its fragile info zapped +-- namely, any info that depends on free variables -- [addLetIdInfo, below, will restore its IdInfo] +-- We want to retain robust info, especially arity and demand info, +-- so that they are available to occurrences that occur in an +-- earlier binding of a letrec -- Augment the subtitution -- if the unique changed, *or* -- if there's interesting occurrence info @@ -620,7 +615,10 @@ 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