Re: [GHC] #5075: CPR optimisation for sum types if only one constructor is used
#5075: CPR optimisation for sum types if only one constructor is used ---------------------------------+------------------------------------------ Reporter: batterseapower | Owner: simonpj Type: feature request | Status: patch Priority: normal | Milestone: 7.6.2 Component: Compiler | Version: 7.0.3 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by simonpj@…): commit d3b8991be3875302ca6d1a4ef6e72891e9567dd5 {{{ Author: Simon Peyton Jones <simonpj@microsoft.com> Date: Thu Jan 24 14:50:50 2013 +0000 Introduce CPR for sum types (Trac #5075) The main payload of this patch is to extend CPR so that it detects when a function always returns a result constructed with the *same* constructor, even if the constructor comes from a sum type. This doesn't matter very often, but it does improve some things (results below). Binary sizes increase a little bit, I think because there are more wrappers. This with -split-objs. Without split-ojbs binary sizes increased by 6% even for HelloWorld.hs. It's hard to see exactly why, but I think it was because System.Posix.Types.o got included in the linked binary, whereas it didn't before. Program Size Allocs Runtime Elapsed TotalMem fluid +1.8% -0.3% 0.01 0.01 +0.0% tak +2.2% -0.2% 0.02 0.02 +0.0% ansi +1.7% -0.3% 0.00 0.00 +0.0% cacheprof +1.6% -0.3% +0.6% +0.5% +1.4% parstof +1.4% -4.4% 0.00 0.00 +0.0% reptile +2.0% +0.3% 0.02 0.02 +0.0% ---------------------------------------------------------------------- Min +1.1% -4.4% -4.7% -4.7% -15.0% Max +2.3% +0.3% +8.3% +9.4% +50.0% Geometric Mean +1.9% -0.1% +0.6% +0.7% +0.3% Other things in this commit ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Got rid of the Lattice class in Demand * Refactored the way that products and newtypes are decomposed (no change in functionality) compiler/basicTypes/BasicTypes.lhs | 17 ++ compiler/basicTypes/DataCon.lhs | 60 ----- compiler/basicTypes/Demand.lhs | 429 ++++++++++++++++++----------------- compiler/basicTypes/MkId.lhs | 11 +- compiler/cmm/CLabel.hs | 1 - compiler/coreSyn/CoreLint.lhs | 12 +- compiler/coreSyn/CoreSyn.lhs | 7 +- compiler/deSugar/DsCCall.lhs | 45 ++++- compiler/deSugar/DsForeign.lhs | 2 +- compiler/prelude/PrelRules.lhs | 2 +- compiler/simplCore/Simplify.lhs | 5 +- compiler/specialise/SpecConstr.lhs | 2 +- compiler/stranal/DmdAnal.lhs | 49 +++- compiler/stranal/WwLib.lhs | 210 ++++++++---------- compiler/types/Coercion.lhs | 62 ++++-- compiler/types/FamInstEnv.lhs | 26 +-- compiler/types/TyCon.lhs | 25 ++- compiler/types/Type.lhs | 26 +-- compiler/vectorise/Vectorise/Exp.hs | 10 +- 19 files changed, 515 insertions(+), 486 deletions(-) }}} -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5075#comment:8> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
participants (1)
-
GHC