Improving Placement of Heap Checks - Avoiding Slowdowns in Hot Code
When generating both heap and stack checks in Cmm, GHC can sometimes be fairly obtuse about their placement. As a result, they can be generated for paths in hot code that actually do not perform any allocation. Examples can be found in the related tickets, particularly #14791 and #16040 (closed).
This ticket exists to track the work proposed by Simon to detect such code patterns. They are described as follows:
- A primitive case with no allocation upstream from it.
- One alternative that performs no allocation.
Under such circumstances the stack/heap checks can be moved from being performed on every iteration to being performed just prior to the allocation itself.
Trac metadata
| Trac field | Value |
|---|---|
| Version | |
| Type | Task |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | simonpj |
| Operating system | |
| Architecture |