Bottoming expressions should not be expandable
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 25 Aug 2017 08:00:31 +0000 (09:00 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 25 Aug 2017 08:23:54 +0000 (09:23 +0100)
commit407c11b880325f4f327982d4f6b9f9cba4564016
tree7c23fad27c8f2ad168f37cd090f2c011dff89981
parenta0b7b100c649f01325bc6807e418b7563885120e
Bottoming expressions should not be expandable

This patch changes isExpandableApp and isWorkFreeApp to respond
False to bottoming applications.  I found that if we had

  x = undefined <dict-expr>

then prepareRhs was ANF'ing it to

  d = <dict-expr>
  x = undefined d

which is stupid (no gain); and worse it made the simplifier iterate
indefinitely.  It showed up when I started marking 'x' as a bottoming
Id more aggresssively than before; but it's been a lurking bug for
ages.

It was convenient to make isWorkFreeApp also return False for
bottoming applications, and I see no reason not to do so.

That leaves isCheapApp.  It currently replies True to bottoming
applications, but I don't see why that's good..  Something to try
later.
compiler/coreSyn/CoreUtils.hs
compiler/simplCore/OccurAnal.hs