#13208: Do two-phase inlining in simpleOptPgm -------------------------------------+------------------------------------- Reporter: lukemaurer | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.1 Resolution: | Keywords: JoinPoints Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by simonpj): * keywords: => JoinPoints Comment: Done! {{{ commit 8e9593fb2147252ecb8b685ef6bf9c0237a71219 Author: Simon Peyton Jones <simonpj@microsoft.com> Date: Tue Feb 7 00:32:43 2017 +0000 Improve the simple optimiser The previous version of the simple optimiser would leave beta-redexes, which was bad for join points. E.g. join j x = .... -- a join point in (\x. j x) y This would be ok if we beta-reduced the (\x) but not if we don't. This patch improves the simple optimiser, to follow the plan described in "Secrets of the GHC inliner", and implemented in the Mighty Simplifier. It turns out not to be too hard to use the same plan here, and we get slightly better code as a result. }}} Luke, you say:
The simpleOptPgm β-redexes are the only reason for the special rule in Core Lint (see Note [Beta redexes] in CoreLint.hs), so once this is done we can be rid of that.
but don't we sometimes generate some beta-redexes in worker/wrapper after strictness analysis? I have not yet changed this. Adding keyword `JoinPoints` so we don't lose track of this. It'd be cool to finish it off. Ideally getting rid of type-lets too. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13208#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler