[GHC] #10844: CallStack should not be inlined

GHC ghc-devs at haskell.org
Tue Oct 4 22:02:12 UTC 2016


#10844: CallStack should not be inlined
-------------------------------------+-------------------------------------
        Reporter:  nomeata           |                Owner:  gridaphobe
            Type:  task              |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  7.10.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D1259
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by gridaphobe):

 Actually, that's not the problem (though it may well be a profitable
 change regardless). The problem can be illustrated even more simply.

 {{{
 module Foo where

 str = "foo" ++ "\n" ++ "\n"
 }}}

 We would like GHC to optimize this into

 {{{
 str = "foo\n\n"
 }}}

 but the pre-emptive lifting/cse that I've done during desugaring gives us

 {{{
 foo = "foo"
 n = "\n"
 str = foo ++ n ++ n
 }}}

 At this point the simplifier is in a bind because in order to fully inline
 everything, it would have to '''duplicate''' the `"\n"` string, and GHC
 presumably knows this is generally a bad idea.

 Removing the pre-emptive CSE from the desugarer resolves this issue :)

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10844#comment:23>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list