• Simon Peyton Jones's avatar
    Introduce CPR for sum types (Trac #5075) · d3b8991b
    Simon Peyton Jones authored
    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)
    d3b8991b
Coercion.lhs 45.6 KB