Do not inline bottoming things
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 20 Jan 2017 15:12:42 +0000 (15:12 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Tue, 7 Feb 2017 14:00:46 +0000 (14:00 +0000)
commita0174d2264358c5930a54e372d5d3ab5e713b87a
treef56c0c5b961fffc9ef4c9304f5c24cdd9db3ee95
parent17ae5e79cad49ff05941d9d9234648b15d0169dc
Do not inline bottoming things

If a function seems small, worker/wrapper won't split it; instead
it turns it into an INLINE function.

But if it's a /bottoming/ function that's a bad idea.  We want
don't want to inline bottoming functions unless they are /really/
small (smaller than the call itself) and that's handled by a
different branch in certainlyWillInline.

So this patch adds a not-bottom test to the UnfIfGoodArgs case of
certainlyWillInline.

No big perf effect, but this will tend to keep error code out of
functions, and hence make them a bit more likely to inline.

I fell over this when fiddling with #13144
compiler/coreSyn/CoreUnfold.hs