Fix a nasty infelicity in the size computation of CoreUnfold
authorsimonpj@microsoft.com <unknown>
Thu, 19 Nov 2009 11:57:36 +0000 (11:57 +0000)
committersimonpj@microsoft.com <unknown>
Thu, 19 Nov 2009 11:57:36 +0000 (11:57 +0000)
commitd21c80ead2ab829c1bb760943233dd9c0751ea13
treeb04f9ee451a1c087c31fe90458a4a3013bb758cf
parent8a85f89b9e663ba0b69d92c730f54f066b15a6aa
Fix a nasty infelicity in the size computation of CoreUnfold

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.
compiler/coreSyn/CoreUnfold.lhs