Be a little less aggressive about inlining (fixes Trac #5623)
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 9 May 2012 10:06:44 +0000 (11:06 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Wed, 9 May 2012 10:06:44 +0000 (11:06 +0100)
commit2112f43c466935818a371c53c706608cfa069d01
tree543152c5ed5f056811538a65abb70aa3e3a967d6
parent753360701b115747140a4056dbf1e126059aa8ef
Be a little less aggressive about inlining (fixes Trac #5623)

When inlining, we are making a copy of the expression, so we have to
be careful about duplicating work.  Previously we were using
exprIsCheap for that, but it is willing to duplicate a cheap primop --
and that is terribly bad if it happens inside some inner array loop
(Trac #5623).  So now we use a new function exprIsWorkFree.  Even
then there is some wiggle room:
   see Note [exprIsWorkFree] in CoreUtils

This commit does make wheel-sieve1 allocate a lot more, but we decided
that's just tough; it's more important for inlining to be robust
about not duplicating work.
compiler/coreSyn/CoreSyn.lhs
compiler/coreSyn/CoreUnfold.lhs
compiler/coreSyn/CoreUtils.lhs
compiler/coreSyn/PprCore.lhs