projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed uninitialised FunBind fun_tick field
[ghc-hetmet.git]
/
compiler
/
simplCore
/
SimplEnv.lhs
diff --git
a/compiler/simplCore/SimplEnv.lhs
b/compiler/simplCore/SimplEnv.lhs
index
c9fb4fb
..
245f313
100644
(file)
--- a/
compiler/simplCore/SimplEnv.lhs
+++ b/
compiler/simplCore/SimplEnv.lhs
@@
-608,8
+608,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
+624,10
@@
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
- 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
-- Extend the substitution if the unique has changed,
-- or there's some useful occurrence information