
#15560: Full laziness destroys opportunities for join points -------------------------------------+------------------------------------- Reporter: AndreasK | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.4.3 (CodeGen) | Resolution: | Keywords: JoinPoints Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #14287 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Generally, I think we should not float join points -- in general floating them will stop them being join points. It'd be easy to change `SetLevels` thus -- but intuition is a poor guide and it'd be really worth trying it and measuring the effect. However, if the binding can go all the way to the top level, then there seems no downside to floating it: we end up with a smaller (and hence perhaps more inlinable) function; and the jump to the join point is still a nice, efficient jump. What's not to like? (Your Description suggests that you think that doing so is Bad. Why?) All that said, there is a Huge Mess in `SetLevels` around join points with stuff about the "join ceiling". I want to expunge all that, but have lacked the time. The trouble is that we do want some limited, local floating -- I have a whole WIP tree pending on that, but it's in limbo. If anyone would like to work on this, I'll commit my WIP to a branch and offer advice/support on taking it forward. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15560#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler