Skip to content

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:

  1. A primitive case with no allocation upstream from it.
  2. 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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information