
#14137: Do more inlining into non-recursive join points -------------------------------------+------------------------------------- Reporter: simonpj | Owner: nomeata Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.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: | -------------------------------------+------------------------------------- Comment (by simonpj): Consider the example above: {{{ let ys = expensive in letrec f xs = case xs of [] -> ys (p:ps) -> p : f ps in f ps : qs }}} Here `f` is called exactly once in the body of the `letrec`, but not in tail position. Question: can cardinality analysis discover that `ys` is evaluated at most once? I would have thought the answer should be 'yes'. And if so, we can inline it, which is what we want. To make this go * We'd need to check that the cardinality analysis fixpoint stuff was up to snuff * We'd need to make the inliner take account of that used-once info. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14137#comment:15 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler