
#13344: Core string literal patch regresses compiler performance considerably -------------------------------------+------------------------------------- Reporter: bgamari | Owner: bgamari Type: bug | Status: new Priority: high | Milestone: 8.2.1 Component: Compiler | Version: 8.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): There is a good reason for (2). Consider {{{ let x = C "foo"# in .x..x..x.....case x of { C s -> ...s...s... }.... }}} We'll do case-of-known-constructor on the case expression, binding `s` to the component. Ah! The component is `"foo"#` so we'll duplicate `"foo"#` at every occurrence of `s`. That is why we do ANF for let-bound constructors. I think we should continue to do so. (Unless, just possibly, the let-binding has a NOINLINE pragma...) For (3) I agree. The only reason to aggressively float literals would be for CSE. ------------- More generally, if it is ''really'' the case that these top level bindings {{{ x = "foo#" y = C x }}} take a lot longer to compile (code generate?) than {{{ y = C "foo"# }}} then I think we should seek insight into ''why''. There is no good reason for it to take longer. Let's not bend ourselves out of shape to accommodate what may possibly be an easily-fixed perf bug in the back end. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13344#comment:14 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler