projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Warning police
[ghc-hetmet.git]
/
compiler
/
simplCore
/
SimplEnv.lhs
diff --git
a/compiler/simplCore/SimplEnv.lhs
b/compiler/simplCore/SimplEnv.lhs
index
040240c
..
3832f54
100644
(file)
--- 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,
OutId, OutTyVar, OutBind, OutExpr, OutAlt, OutArg, OutType, OutBndr,
InCoercion, OutCoercion,
- isStrictBndr,
-
-- The simplifier mode
setMode, getMode,
-- The simplifier mode
setMode, getMode,
@@
-92,13
+90,6
@@
type OutAlt = CoreAlt
type OutArg = CoreArg
\end{code}
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}
%************************************************************************
%* *
\subsubsection{The @SimplEnv@ type}
@@
-364,7
+355,7
@@
andFF FltLifted flt = flt
classifyFF :: CoreBind -> FloatFlag
classifyFF (Rec _) = FltLifted
classifyFF (NonRec bndr rhs)
classifyFF :: CoreBind -> FloatFlag
classifyFF (Rec _) = FltLifted
classifyFF (NonRec bndr rhs)
- | not (isStrictBndr bndr) = FltLifted
+ | not (isStrictId bndr) = FltLifted
| exprOkForSpeculation rhs = FltOkSpec
| otherwise = FltCareful
| 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
-> (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]
-- [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
-- Augment the subtitution
-- if the unique changed, *or*
-- if there's interesting occurrence info
@@
-620,7
+615,8
@@
substLetIdBndr env@(SimplEnv { seInScope = in_scope, seIdSubst = id_subst }) old
where
id1 = uniqAway in_scope old_id
id2 = substIdType env id1
where
id1 = uniqAway in_scope old_id
id2 = substIdType env id1
- -- we want to get rid of any info that's dependent on free variables,
+
+ -- 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
-- but keep other info (like the arity).
new_id = zapFragileIdInfo id2