... | ... | @@ -32,25 +32,6 @@ Simon Marlow: |
|
|
- I need to remember to cerfully choose at which optimization levels my Cmm passes are enabled
|
|
|
- Here's an interesting bit from `CoreToStg.lhs`: "a dead variable's stack slot (if it has one): should be stubbed to avoid space leaks"
|
|
|
|
|
|
## Let-no-escape notes
|
|
|
|
|
|
- Code generation for let-no-escape: `cgLneBinds` in `codeGen/StgCmmExpr.hs`
|
|
|
- Heap checking in let-no-escape: see `Note [Heap checks]` in `codeGen/StgCmmHeap.hs`
|
|
|
- From `codeGen/StgCmmMonad.hs`:
|
|
|
|
|
|
```wiki
|
|
|
data CgLoc
|
|
|
= CmmLoc CmmExpr -- A stable CmmExpr; that is, one not mentioning
|
|
|
-- Hp, so that it remains valid across calls
|
|
|
|
|
|
| LneLoc BlockId [LocalReg] -- A join point
|
|
|
-- A join point (= let-no-escape) should only.
|
|
|
-- be tail-called, and in a saturated way.
|
|
|
-- To tail-call it, assign to these locals,.
|
|
|
-- and branch to the block id
|
|
|
```
|
|
|
- Simon Marlow says: "\[let-no-escape\] catches more cases than just join points. Any function or variable binding that does not escape is turned into let-no-escape."
|
|
|
|
|
|
## Some interesting tickets
|
|
|
|
|
|
- [\#605](https://gitlab.haskell.org//ghc/ghc/issues/605) - Optimisation: strict enumerations
|
... | ... | |