<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en">
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>



<style>img {
max-width: 100%; height: auto;
}
</style>
</head>
<body>
<div class="content">

<h3>
Ben Gamari pushed to branch wip/T13253
at <a href="https://gitlab.haskell.org/ghc/ghc">Glasgow Haskell Compiler / GHC</a>
</h3>
<h4>
Commits:
</h4>
<ul>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/a82fb6c4eec37f3436d2cb154563b3e47fb4ebe0">a82fb6c4</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-06-26T19:07:43+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Make arityType deal with join points

As Note [Eta-expansion and join points] describes,
this patch makes arityType deal correctly with join points.
What was there before was not wrong, but yielded lower
arities than it could.

Fixes #18328

In base GHC this makes no difference to nofib.

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
         n-body          -0.1%     -0.1%     -1.2%     -1.1%      0.0%
--------------------------------------------------------------------------------
            Min          -0.1%     -0.1%    -55.0%    -56.5%      0.0%
            Max          -0.0%      0.0%    +16.1%    +13.4%      0.0%
 Geometric Mean          -0.0%     -0.0%    -30.1%    -31.0%     -0.0%

But it starts to make real difference when we land the change to the
way mkDupableAlts handles StrictArg, in fixing #13253 and friends.
I think this is because we then get more non-inlined join points.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/44f37086b61eecdf6bda13f6855eb8e84a5ffca7">44f37086</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-06-26T19:07:43+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Improve eta-expansion using ArityType

As #18355 shows, we were failing to preserve one-shot info when
eta-expanding.  It's rather easy to fix, by using ArityType more,
rather than just Arity.

This patch is important to suport the one-shot monad trick;
see #18202.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/24171cb191cf077d82140df822e54d4710234581">24171cb1</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-06-26T19:07:43+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Reduce result discount in conSize

Ticket #18282 showed that the result discount given by conSize
was massively too large.  This patch reduces that discount to
a constant 10, which just balances the cost of the constructor
application itself.

Note [Constructor size and result discount] elaborates, as
does the ticket #18282.

Reducing result discount reduces inlining, which affects perf.  I
found that I could increase the unfoldingUseThrehold from 80 to 90 in
compensation; in combination with the result discount change I get
these overall nofib numbers:

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
          boyer          -0.3%     +5.4%     +0.7%     +1.0%      0.0%
       cichelli          -0.3%     +5.9%     -9.9%     -9.5%      0.0%
      compress2          -0.4%     +9.6%     +7.2%     +6.4%      0.0%
    constraints          -0.3%     +0.2%     -3.0%     -3.4%      0.0%
   cryptarithm2          -0.3%     -3.9%     -2.2%     -2.4%      0.0%
         gamteb          -0.4%     +2.5%     +2.8%     +2.8%      0.0%
           life          -0.3%     -2.2%     -4.7%     -4.9%      0.0%
           lift          -0.3%     -0.3%     -0.8%     -0.5%      0.0%
         linear          -0.3%     -0.1%     -4.1%     -4.5%      0.0%
           mate          -0.2%     +1.4%     -2.2%     -1.9%    -14.3%
         parser          -0.3%     -2.1%     -5.4%     -4.6%      0.0%
         puzzle          -0.3%     +2.1%     -6.6%     -6.3%      0.0%
         simple          -0.4%     +2.8%     -3.4%     -3.3%     -2.2%
        veritas          -0.1%     +0.7%     -0.6%     -1.1%      0.0%
   wheel-sieve2          -0.3%    -19.2%    -24.9%    -24.5%    -42.9%
--------------------------------------------------------------------------------
            Min          -0.4%    -19.2%    -24.9%    -24.5%    -42.9%
            Max          +0.1%     +9.6%     +7.2%     +6.4%    +33.3%
 Geometric Mean          -0.3%     -0.0%     -3.0%     -2.9%     -0.3%

I'm ok with these numbers, remembering that this change removes
an *exponential* increase in code size in some in-the-wild cases.

I investigated compress2.  The difference is entirely caused by this
function no longer inlining

WriteRoutines.$woutputCodes
  = \ (w :: [CodeEvent]) ->
      let result_s1Sr
            = case WriteRoutines.outputCodes_$s$woutput w 0# 0# 8# 9# of
                (# ww1, ww2 #) -> (ww1, ww2)
      in (# case result_s1Sr of (x, _) ->
              map @Int @Char WriteRoutines.outputCodes1 x
         , case result_s1Sr of { (_, y) -> y } #)

It was right on the cusp before, driven by the excessive result
discount.  Too bad!

Metric Decrease:
    T12227
    T12545
    T15263
    T1969
    T5030
    T9872a
    T9872c
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d6d70c7e970f35a6017aa479cad6cb57d32b46de">d6d70c7e</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-06-26T19:07:43+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">This patch addresses the exponential blow-up in the simplifier.

Specifically:
  #13253 exponential inlining
  #10421 ditto
  #18140 strict constructors
  #18282 another nested-function call case

This patch makes two significant changes:

1. For Ids that are used at most once in each branch of a case,
   make the occurrence analyser record the total number of
   syntactic occurrences.  Then in postInlineUnconditionally
   use that info to avoid inling something many many times.

   Actual changes:
     * See the occ_n_br field of OneOcc.
     * postInlineUnconditionally
   See Note [Suppress exponential blowup] in GHC.Core.Opt.Simplify.Utils

2. Change the way that mkDupableCont handles StrictArg.
   The details are explained in GHC.Core.Opt.Simplify
      Note [Duplicating StrictArg]

Current nofib run

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
             VS          -0.3%   +115.9%    +12.1%    +11.2%      0.0%
         boyer2          -0.3%    +10.0%     +3.5%     +4.0%      0.0%
   cryptarithm2          -0.3%    +39.0%    +16.6%    +16.1%      0.0%
         gamteb          -0.3%     +4.1%     -0.0%     +0.4%      0.0%
     last-piece          -0.3%     +1.4%     -1.1%     -0.4%      0.0%
           mate          -0.4%    -11.1%     -8.5%     -9.0%      0.0%
     multiplier          -0.3%     -2.2%     -1.5%     -1.5%      0.0%
      transform          -0.3%     +3.4%     +0.5%     +0.8%      0.0%
--------------------------------------------------------------------------------
            Min          -0.8%    -11.1%     -8.5%     -9.0%      0.0%
            Max          -0.3%   +115.9%    +30.1%    +26.4%      0.0%
 Geometric Mean          -0.3%     +1.0%     +1.0%     +1.0%     -0.0%

Should investigate these numbers.

But the tickets are indeed cured, I think.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/c0c2a4524cccab5e283a850ba8fe52f1e73d2fb9">c0c2a452</a></strong>
<div>
<span>by GHC GitLab CI</span>
<i>at 2020-06-26T19:07:43+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Add --top flag to driver

This allows us to make `config.top` a proper Path. Previously it was a
str, which caused the Ghostscript detection logic to break.
</pre>
</li>
</ul>
<h4>30 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#c3967bb9d3e8f5aae2dd111b5a335b48c21c1999">
compiler/GHC/Core/Opt/Arity.hs
</a>
</li>
<li class="file-stats">
<a href="#bac3d5159a5688007de3aa3f5c4e50569677b347">
compiler/GHC/Core/Opt/OccurAnal.hs
</a>
</li>
<li class="file-stats">
<a href="#cc763cdd1967f5d921161a32f64136cfcf0332c5">
compiler/GHC/Core/Opt/SetLevels.hs
</a>
</li>
<li class="file-stats">
<a href="#f168a93cde5e2aec2441d6331dfe500172df4af3">
compiler/GHC/Core/Opt/Simplify.hs
</a>
</li>
<li class="file-stats">
<a href="#48fbb5cdea308650de5756521feb28ec68819b9b">
compiler/GHC/Core/Opt/Simplify/Utils.hs
</a>
</li>
<li class="file-stats">
<a href="#11ffe98a94d798427bc600e4fcfe899407536346">
compiler/GHC/Core/SimpleOpt.hs
</a>
</li>
<li class="file-stats">
<a href="#2811a7297b8aa206197ac1f5dabd0818e3c7ec5a">
compiler/GHC/Core/Unfold.hs
</a>
</li>
<li class="file-stats">
<a href="#774d88050336ef660c7a219fb06c480c2fc639bc">
compiler/GHC/Driver/Session.hs
</a>
</li>
<li class="file-stats">
<a href="#166e3514d27c63ef7e86af29830d9e8b2a31c8b1">
compiler/GHC/Types/Basic.hs
</a>
</li>
<li class="file-stats">
<a href="#38110817cdbc9a34d2b80a14070cabc7515c808a">
compiler/GHC/Types/Id/Info.hs
</a>
</li>
<li class="file-stats">
<a href="#acb22db8d0fa26a579b612416f02f6a519b4cb9b">
hadrian/src/Settings/Builders/RunTest.hs
</a>
</li>
<li class="file-stats">
<a href="#326e115e015c04db679ca1d9dbc1092906bef3a6">
testsuite/driver/runtests.py
</a>
</li>
<li class="file-stats">
<a href="#19a3a16fa9d768a2005142b6cc4b642f0f88713f">
testsuite/driver/testglobals.py
</a>
</li>
<li class="file-stats">
<a href="#c591f85f122007bac88228c5ff6fd76b40e6a811">
testsuite/driver/testlib.py
</a>
</li>
<li class="file-stats">
<a href="#7b2623ac371a10ea66bc330530343f950eec0e23">
testsuite/mk/test.mk
</a>
</li>
<li class="file-stats">
<a href="#b74ba5875fd7cccd72bb96f5e09ffd324e58a963">
testsuite/tests/deSugar/should_compile/T13208.stdout
</a>
</li>
<li class="file-stats">
<a href="#941cab631058a932f5b548d7ef1ec5735a95df46">
testsuite/tests/deSugar/should_compile/T16615.stderr
</a>
</li>
<li class="file-stats">
<a href="#73459bdd68c8a1d83dd2fc05500d4d379b541a3d">
testsuite/tests/numeric/should_compile/T14170.stdout
</a>
</li>
<li class="file-stats">
<a href="#68981928c0d335390bba962b95dc1104a8881d05">
testsuite/tests/numeric/should_compile/T14465.stdout
</a>
</li>
<li class="file-stats">
<a href="#e6a25af732cafed9cd91b716ddbdb29b303bd865">
testsuite/tests/numeric/should_compile/T7116.stdout
</a>
</li>
<li class="file-stats">
<a href="#9856dc5a4674b6f62977f48c1f04853d4a567961">
<span class="new-file">
+
testsuite/tests/perf/compiler/T10421.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#0184e9a52eb2baf5f839713779cf06cac224d755">
<span class="new-file">
+
testsuite/tests/perf/compiler/T10421_Form.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#fc1b1f4f4d3cd9abfc943223dfcfaa28517401c4">
<span class="new-file">
+
testsuite/tests/perf/compiler/T10421_Y.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#6cded300cd59c6c6bd64f4fe380e9248a339c2bf">
<span class="new-file">
+
testsuite/tests/perf/compiler/T13253-spj.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#2546b50520bb12b5295e3396e1c0f536b4a19c47">
<span class="new-file">
+
testsuite/tests/perf/compiler/T13253.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#0ec8c7a42ce4c1d4caa408ab9cde327d64463cbf">
<span class="new-file">
+
testsuite/tests/perf/compiler/T18140.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#fd4a0b65d74153aed8b33b01a04eb3ff7442cd45">
testsuite/tests/perf/compiler/all.T
</a>
</li>
<li class="file-stats">
<a href="#58150fbbe4223a9c341c6b3ce2c25d49f9f771af">
testsuite/tests/profiling/should_run/T5654-O1.prof.sample
</a>
</li>
<li class="file-stats">
<a href="#17afc265788fa3bfcc15d40cc9d14a0626394231">
testsuite/tests/profiling/should_run/T5654b-O1.prof.sample
</a>
</li>
<li class="file-stats">
<a href="#7689a0e0d277b40f99e932c27420c16ffc39e176">
testsuite/tests/profiling/should_run/ioprof.stderr
</a>
</li>
</ul>
<h5>The diff was not included because it is too large.</h5>

</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #777;">

<br>
<a href="https://gitlab.haskell.org/ghc/ghc/-/compare/df525f2b1d18d2c21c42dae1612d31ef1ced489e...c0c2a4524cccab5e283a850ba8fe52f1e73d2fb9">View it on GitLab</a>.
<br>
You're receiving this email because of your account on gitlab.haskell.org.
If you'd like to receive fewer emails, you can
adjust your notification settings.



</p>
</div>
</body>
</html>