
#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 bgamari): Just looking at the interface file sizes between the two trees, it appears that many files increased by a few hundred bytes with a few (e.g. `GHC.Show`, `GHC.Generics`) increasing by some kilobytes. For future reference I performed the comparison with, {{{#!sh echo "delta after before file" paste \ <(ls -l $(find ghc-compare-1/libraries/base/dist-install -iname *.hi) | awk '{print $5,$9}') \ <(ls -l $(find ghc-compare-2/libraries/base/dist-install -iname *.hi) | awk '{print $5,$9}') \ | awk '{ print (($1 - $3)), $1, $3, $2}' | sort -rn | less }}} Which results in {{{ 16461 800034 783573 libraries/base/dist-install/build/GHC/Generics.hi 7673 130677 123004 libraries/base/dist-install/build/GHC/RTS/Flags.hi 7555 969695 962140 libraries/base/dist-install/build/Data/Data.hi 7449 103629 96180 libraries/base/dist-install/build/GHC/IO/Exception.hi 7068 268944 261876 libraries/base/dist-install/build/Data/Foldable.hi 6904 136200 129296 libraries/base/dist-install/build/GHC/Show.hi 4830 211720 206890 libraries/base/dist-install/build/Data/Monoid.hi 4767 458028 453261 libraries/base/dist-install/build/Data/Semigroup.hi 4735 498885 494150 libraries/base/dist-install/build/Foreign/C/Types.hi 4651 59316 54665 libraries/base/dist-install/build/GHC/IO/Handle/Types.hi ... }}} In the case of `GHC.Generics` we now have things like, {{{#!hs $fEqV14 :: [Char] {- Unfolding: (unpackCString# $fEqV15) -} $fEqV15 :: Addr# {- HasNoCafRefs, Unfolding: ("error"#) -} }}} Whereas we previously had, {{{#!hs $fEqV11 :: [Char] {- Unfolding: (unpackCString# "error"#) -} }}} One potential improvement we can make here (at the expense of some constant folding opportunities) is to drop the unfoldings from `Addr#` bindings; afterall, in most cases there is little benefit to inlining the string literal. In the case of the `Typeable` bindings, I'm very tempted to just eliminate unfoldings from all generated `TrName`s. This would likely cut down on interface file sizes dramatically. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13344#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler