Skip to content
  • Simon Peyton Jones's avatar
    Fix a nasty infelicity in the size computation of CoreUnfold · d21c80ea
    Simon Peyton Jones authored
    The size computation was treating gigantic case expressions as
    practically free, which they really aren't.  It was exacerbated by
    recent decisions to charge 0 for naked variables and constructors, so
    the RHS of the case might look free too.  A good example was 
    Foreign.C.Error.errnoToIOError, which hsa lots of join points
    that were getting inlined way to vigorously, so we had:
    
      *** Simplifier Phase 2 [main]:
          Result size = 2983
      *** Core Linted result of Simplifier mode 2 [main], iteration 1 out of 4:
          Result size = 640327
      *** Core Linted result of Simplifier mode 2 [main], iteration 2 out of 4:
          Result size = 1659
    
    Notice that gigantic intermediate!
    
    This patch adds a small charge for each *alternative*.  Of course,
    that'll also mean that there's a bit less inling of things involving
    case expressions.
    d21c80ea