diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2013-01-24 14:50:50 +0000 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2013-01-24 14:50:50 +0000 |
commit | d3b8991be3875302ca6d1a4ef6e72891e9567dd5 (patch) | |
tree | afbf9416c2d569dba29fafdd7478aad02f4e0891 /compiler/vectorise | |
parent | b4e86fa8b7a3c7527632aa8ba4b4a94a8719bfa5 (diff) | |
download | haskell-d3b8991be3875302ca6d1a4ef6e72891e9567dd5.tar.gz |
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)
Diffstat (limited to 'compiler/vectorise')
-rw-r--r-- | compiler/vectorise/Vectorise/Exp.hs | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/compiler/vectorise/Vectorise/Exp.hs b/compiler/vectorise/Vectorise/Exp.hs index 20fade521b..0ae4fbf05f 100644 --- a/compiler/vectorise/Vectorise/Exp.hs +++ b/compiler/vectorise/Vectorise/Exp.hs @@ -661,11 +661,11 @@ unVectDict ty e ; return $ mkCoreConApps dataCon (map Type tys ++ scOps) } where - (tycon, tys, dataCon, methTys) = splitProductType "unVectDict: original type" ty - cls = case tyConClass_maybe tycon of - Just cls -> cls - Nothing -> panic "Vectorise.Exp.unVectDict: no class" - selIds = classAllSelIds cls + (tycon, tys) = splitTyConApp ty + Just dataCon = isDataProductTyCon_maybe tycon + Just cls = tyConClass_maybe tycon + methTys = dataConInstArgTys dataCon tys + selIds = classAllSelIds cls -- Vectorise an 'n'-ary lambda abstraction by building a set of 'n' explicit closures. -- |