Partially fix #367 by adding HpLim checks to entry with -fno-omit-yields.
authorEdward Z. Yang <ezyang@mit.edu>
Mon, 17 Sep 2012 16:28:49 +0000 (18:28 +0200)
committerEdward Z. Yang <ezyang@mit.edu>
Wed, 26 Sep 2012 20:46:57 +0000 (13:46 -0700)
commitd3128bfc286002862e916296629a22f1ce987e4e
treeb819a5ba9bb6079775186726a603e96cbf26c9fb
parent2145ffc452a64bae457a38276c81b60f22ddf161
Partially fix #367 by adding HpLim checks to entry with -fno-omit-yields.

The current fix is relatively dumb as far as where to add HpLim
checks: it will always perform a check unless we know that we're
returning from a closure or we are doing a non let-no-escape case
analysis.  The performance impact on the nofib suite looks like this:

            Min          +5.7%     -0.0%     -6.5%     -6.4%    -50.0%
            Max          +6.3%     +5.8%     +5.0%     +5.5%     +0.8%
 Geometric Mean          +6.2%     +0.1%     +0.5%     +0.5%     -0.8%

Overall, the executable bloat is the biggest problem, so we keep the old
omit-yields optimization on by default. Remember that if you need an
interruptibility guarantee, you need to recompile all of your libraries
with -fno-omit-yields.

A better fix would involve only inserting the yields necessary to break
loops; this is left as future work.

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
compiler/codeGen/StgCmmExpr.hs
compiler/codeGen/StgCmmHeap.hs
compiler/main/DynFlags.hs
docs/users_guide/using.xml