
#16064: Improving Placement of Heap Checks - Avoiding Slowdowns in Hot Code -------------------------------------+------------------------------------- Reporter: _recursion | Owner: (none) Type: task | Status: new Priority: normal | Milestone: 8.9 Component: Compiler | Version: Keywords: CodeGen, | Operating System: Unknown/Multiple Performance | Architecture: | Type of failure: Runtime Unknown/Multiple | performance bug Test Case: | Blocked By: Blocking: | Related Tickets: #16040, #14791, | #8326, #12231, #1498 Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- 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. This ticket exists to track the work [https://ghc.haskell.org/trac/ghc/ticket/16040#comment:5 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. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16064 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler