[GHC] #9630: compile-time performance regression (probably due to Generics)

GHC ghc-devs at haskell.org
Sat Jun 3 05:50:28 UTC 2017


#9630: compile-time performance regression (probably due to Generics)
-------------------------------------+-------------------------------------
        Reporter:  hvr               |                Owner:  dfeuer
            Type:  bug               |               Status:  new
        Priority:  high              |            Milestone:  8.2.1
       Component:  Compiler          |              Version:  7.9
      Resolution:                    |             Keywords:  deriving-
                                     |  perf, Generics
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Compile-time      |  Unknown/Multiple
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #9583, #10293,    |  Differential Rev(s):
  #13059, #10818                     |
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by RyanGlScott):

 I've confirmed this as well. Before that commit, this is the `-ddump-ds`
 output:

 {{{
 $cnoDuh_axu :: T -> Integer
 [LclId, Str=DmdType]
 $cnoDuh_axu =
   \ (ds_dTM :: T) ->
     case ds_dTM of _ [Occ=Dead] { T m_avB ->
     gnoDuh @ (Maybe (Maybe ())) $dGenDuh_axt m_avB
     }

 $cduh_axo :: Integer -> T
 [LclId, Str=DmdType]
 $cduh_axo =
   \ (i_avA :: Integer) ->
     Duh.T (gduh @ (Maybe (Maybe ())) $dGenDuh_axt i_avA)
 }}}

 But after that commit:

 {{{
 $cnoDuh_axw :: T -> Integer
 [LclId, Str=DmdType]
 $cnoDuh_axw =
   let {
     $dGenDuh_aNk :: GenDuh (Maybe ())
     [LclId, Str=DmdType]
     $dGenDuh_aNk = Duh.$fGenDuhMaybe @ () Duh.$fGenDuh() } in
   let {
     $dGenDuh_axC :: GenDuh (Maybe (Maybe ()))
     [LclId, Str=DmdType]
     $dGenDuh_axC = Duh.$fGenDuhMaybe @ (Maybe ()) $dGenDuh_aNk } in
   \ (ds_dTV :: T) ->
     case ds_dTV of _ [Occ=Dead] { T m_avB ->
     gnoDuh @ (Maybe (Maybe ())) $dGenDuh_axC m_avB
     }

 $cduh_axp :: Integer -> T
 [LclId, Str=DmdType]
 $cduh_axp =
   let {
     $dGenDuh_aNi :: GenDuh (Maybe ())
     [LclId, Str=DmdType]
     $dGenDuh_aNi = Duh.$fGenDuhMaybe @ () Duh.$fGenDuh() } in
   let {
     $dGenDuh_axv :: GenDuh (Maybe (Maybe ()))
     [LclId, Str=DmdType]
     $dGenDuh_axv = Duh.$fGenDuhMaybe @ (Maybe ()) $dGenDuh_aNi } in
   \ (i_avA :: Integer) ->
     Duh.T (gduh @ (Maybe (Maybe ())) $dGenDuh_axv i_avA)
 }}}

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


More information about the ghc-tickets mailing list