If I understand correctly, the LNE-detection in CoreToSTG makes all of the decisions; it's the only place that the StgLetNoEscape constructor arises.

Join-points are only implemented as LNE if they are detected to be LNE, which they most often — but not always! — after all the core2core simplification are.

I have seen let-bindings with no parameters be detected as LNE.

HTH


On Wed, Oct 16, 2013 at 11:27 AM, Jan Stolarek <jan.stolarek@p.lodz.pl> wrote:
Hi all,

I'm trying to understand this:

1. Note [What is a non-escaping let] says that one of conditions of binding being a non-escaping
let is non-updatability.
2. My understanding is that a if a binding has at least one parameter it is non-updatable, though
I suspect that converse does not have to be true (lambdas)
3. Join-points are implemented using LNE bindings and I can imagine a join-points not having any
parameters (and not being a lambda).

Three points above seem inconsistent - where does my reasoning go wrong? I suspect that the Note
might be wrong and an updatable binding can in fact be a LNE binding.

Janek
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs