Make FloatOut/SetLevels idemoptent on bottoming functions
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 3 Mar 2017 16:10:06 +0000 (16:10 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Mon, 6 Mar 2017 13:29:27 +0000 (13:29 +0000)
commitfb9ae288088a3eabc4e1bb4e86fa473a3881d2e2
tree5b1bb03ad8ed94a5a77efdc420bac2d89185b5ec
parent995ab74b3c55fe3a0299bd94b49e948c942e76d6
Make FloatOut/SetLevels idemoptent on bottoming functions

This fixes Trac #13369.  It turned out that I really had got the
bottoming-float code wrong, again.  The new story is explained in
Note [Bottoming floats], esp item (3), and Note [Floating from a RHS].

I didn't make a regression test; it's hard to to so.

Nofib result are good

--------------------------------------------------------------------------------
        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
         banner          -2.2%     -4.6%      0.00      0.00     +0.0%
           bspt          -1.3%     -1.6%      0.01      0.01     +0.0%
      cacheprof          -1.8%     -0.3%     +3.7%     +3.7%     -0.9%
   digits-of-e2          -1.0%     -1.5%     -0.5%     -0.5%     +0.0%
         expert          -1.3%     -0.2%      0.00      0.00     +0.0%
         n-body          -1.1%     -0.2%     +0.1%     +0.1%     +0.0%
        veritas          -2.9%     -0.1%      0.00      0.00     +0.0%
--------------------------------------------------------------------------------
            Min          -2.9%     -4.6%     -7.4%     -7.4%    -19.8%
            Max          -1.0%     +0.0%     +5.2%     +5.1%    +10.0%
 Geometric Mean          -1.2%     -0.1%     +0.5%     +0.5%     -0.1%

I /think/ all this is due to this error-floating change; but it's possible
that some was due to commit "Fix CSE (again) on literal strings" a couple
of commits earlier.
compiler/simplCore/SetLevels.hs
testsuite/tests/simplCore/should_compile/T13143.stderr