Skip to content
  • Simon Peyton Jones's avatar
    Improve SpecConstr (esp nofib/spectral/ansi) · 66dc09b1
    Simon Peyton Jones authored and Marge Bot's avatar Marge Bot committed
    This MR makes three improvements to SpecConstr: see #24282
    
    * It fixes an outright (and recently-introduced) bug in `betterPat`, which
      was wrongly forgetting to compare the lengths of the argument lists.
    
    * It enhances ConVal to inclue a boolean for work-free-ness, so that the
      envt can contain non-work-free constructor applications, so that we
      can do more: see Note [ConVal work-free-ness]
    
    * It rejigs `subsumePats` so that it doesn't reverse the list.  This can
      make a difference because, when patterns overlap, we arbitrarily pick
      the first.  There is no "right" way, but this retains the old
      pre-subsumePats behaviour, thereby "fixing" the regression in #24282.
    
    Nofib results
    
       +========================================
       |                 spectral/ansi  -21.14%
       | spectral/hartel/comp_lab_zift   -0.12%
       |       spectral/hartel/parstof   +0.09%
       |           spectral/last-piece   -2.32%
       |           spectral/multiplier   +6.03%
       |                 spectral/para   +0.60%
       |               spectral/simple   -0.26%
       +========================================
       |                     geom mean   -0.18%
       +----------------------------------------
    
    The regression in `multiplier` is sad, but it simply replicates GHC's
    previous behaviour (e.g. GHC 9.6).
    66dc09b1