[GHC] #11731: Simplifier: Inlining trivial let can lose sharing
GHC
ghc-devs at haskell.org
Fri Apr 1 08:50:51 UTC 2016
#11731: Simplifier: Inlining trivial let can lose sharing
-------------------------------------+-------------------------------------
Reporter: nomeata | Owner:
Type: bug | Status: patch
Priority: normal | Milestone:
Component: Compiler | Version: 8.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D2073
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by nomeata):
With the late demand analysis, suddenly demand signatures involving free
variables turn up in `-ddump-simpl`:
{{{
Roman.foo_$s$wgo [Occ=LoopBreaker]
:: GHC.Prim.Int# -> GHC.Prim.Int# -> GHC.Prim.Int#
-[GblId, Arity=2, Caf=NoCafRefs, Str=<L,U><L,U>]
+[GblId, Arity=2, Caf=NoCafRefs, Str=<L,U><S,U>]
Roman.foo_$s$wgo =
\ (sc :: GHC.Prim.Int#) (sc1 :: GHC.Prim.Int#) ->
let {
m :: GHC.Prim.Int#
- [LclId]
+ [LclId, Str={s1Yc-><S,A>}]
...
}}}
As this contains uniques, this breaks a few test cases. So it seems that
previously, this information has been removed somewhere (in the simplifier
or so). With DmdAnal running right at the end, this is not happening. So I
wondered if `CoreTidy` should remove them, but there it says
{{{
-- Note [Tidy IdInfo]
-- We need to keep around any interesting strictness and
-- demand info because later on we may need to use it when
-- converting to A-normal form.
-- eg.
-- f (g x), where f is strict in its argument, will be
converted
-- into case (g x) of z -> f z by CorePrep, but only if f
still
-- has its strictness info.
--
-- Similarly for the demand info - on a let binder, this tells
-- CorePrep to turn the let into a case.
}}}
Questions:
* At CorePrep time, should there still be a demand environment in the
strictness signatures? (Note that the `Binary` instance does _not_
serialize the environment, but discards it).
* If not, should I remove the environment in TidyCore?
* Where was it removed before?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11731#comment:41>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list