[GHC] #11158: Combine exprIsTrivial and cpe_ExprIsTrivial
GHC
ghc-devs at haskell.org
Mon Oct 17 08:43:09 UTC 2016
#11158: Combine exprIsTrivial and cpe_ExprIsTrivial
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner:
Type: task | Status: infoneeded
Priority: highest | Milestone: 8.2.1
Component: Compiler | Version: 7.10.2
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:D1656
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
It's worth reading `Note [CafInfo and floating]` in `CorePrep`.
Here's what I don't understand:
1. I think that local bindings (which may get floated) have by-default a
`MayHaveCafRefs` flag. Worth checking.
2. I don't understand why a top-level binding
{{{
sat1 = Nothing
}}}
(with a `MayHaveCafRefs` flag) gives rise to a `Nothing_closure` in the
SRT of the binding mentioning `sat`, whereas
{{{
sat2 = GHC.Tuple.()
}}}
(also with a `MayHaveCafRefs` flag) gives rise to a `sat2_closure` entry
in he SRT. Why are the two treated differently?
3. In the binding
{{{
main = return @ IO GHC.Base.$fMonadIO @ () GHC.Tuple.()
}}}
I don't understand why we ANF-ise the `GHC.Tuple.()` argument. It's
already atomic; no need to create a binding for it. Does the same happen
for `Nothing`?
'''Simon''', do you have any ideas there? E.g. maybe data constructor
closures are in static space and can't get marked by the CAF traversal or
something? It'd be good to document it.
4. I don't understand why having those entries in the SRT would cause a
crash.
Finally, although it woudl be great to understand these things, the Real
Solution is #9718, which I have been longing to get done for literally
years. I really don't think it's hard; we just need to be a bit careful
about memory usage.
I'd rather fix #9718 than burn cycles doing very careful jiggery-pokery
with `CorePrep` and floating. Fixing #9718 fixes the problem at source,
rather than perpetuating it.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11158#comment:22>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list