<!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>
Simon Peyton Jones pushed to branch wip/T17656
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/62ed6957463a9c0f711ea698d7ed4371e00fb122">62ed6957</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-12-08T15:31:41-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix kind inference for data types. Again.

This patch fixes several aspects of kind inference for data type
declarations, especially data /instance/ declarations

Specifically

1. In kcConDecls/kcConDecl make it clear that the tc_res_kind argument
   is only used in the H98 case; and in that case there is no result
   kind signature; and hence no need for the disgusting splitPiTys in
   kcConDecls (now thankfully gone).

   The GADT case is a bit different to before, and much nicer.
   This is what fixes #18891.

   See Note [kcConDecls: kind-checking data type decls]

2. Do not look at the constructor decls of a data/newtype instance
   in tcDataFamInstanceHeader. See GHC.Tc.TyCl.Instance
   Note [Kind inference for data family instances].  This was a
   new realisation that arose when doing (1)

   This causes a few knock-on effects in the tests suite, because
   we require more information than before in the instance /header/.

   New user-manual material about this in "Kind inference in data type
   declarations" and "Kind inference for data/newtype instance
   declarations".

3. Minor improvement in kcTyClDecl, combining GADT and H98 cases

4. Fix #14111 and #8707 by allowing the header of a data instance
   to affect kind inferece for the the data constructor signatures;
   as described at length in Note [GADT return types] in GHC.Tc.TyCl

   This led to a modest refactoring of the arguments (and argument
   order) of tcConDecl/tcConDecls.

5. Fix #19000 by inverting the sense of the test in new_locs
   in GHC.Tc.Solver.Canonical.canDecomposableTyConAppOK.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/0abe3ddf85a915ab99ae4f87a85faf6ee5466ad3">0abe3ddf</a></strong>
<div>
<span>by Adam Sandberg Ericsson</span>
<i>at 2020-12-08T15:32:19-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">hadrian: build the _l and _thr_l rts flavours in the develN flavours

The ghc binary requires the eventlog rts since
fc644b1a643128041cfec25db84e417851e28bab
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/51e3bb6db85c20cb6b287fa5ec7cfe679a7e5259">51e3bb6d</a></strong>
<div>
<span>by Andreas Klebinger</span>
<i>at 2020-12-08T22:43:21-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">CodeGen: Make folds User/DefinerOfRegs INLINEABLE.

Reduces allocation for the test case I was looking at by about 1.2%.
Mostly from avoiding allocation of some folding functions which turn
into let-no-escape bindings which just reuse their environment instead.

We also force inlining in a few key places in CmmSink which helps a bit
more.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/69ae10c39bfed1c4f90f34b42aa0630e0fda2b1b">69ae10c3</a></strong>
<div>
<span>by Andreas Klebinger</span>
<i>at 2020-12-08T22:43:21-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">CmmSink: Force inlining of foldRegsDefd

Helps avoid allocating the folding function. Improves
perf for T3294 by about 1%.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/6e3da80055dd7b3fc3bdc576088fdd16129bdac7">6e3da800</a></strong>
<div>
<span>by Andreas Klebinger</span>
<i>at 2020-12-08T22:43:21-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Cmm: Make a few types and utility function slightly stricter.

About 0.6% reduction in allocations for the code I was looking at.

Not a huge difference but no need to throw away performance.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/aef44d7fbef92159960daf73c53dbc3c8d21ecbf">aef44d7f</a></strong>
<div>
<span>by Andreas Klebinger</span>
<i>at 2020-12-08T22:43:21-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Cmm.Sink: Optimize retaining of assignments, live sets.

Sinking requires us to track live local regs after each
cmm statement. We used to do this via "Set LocalReg".

However we can replace this with a solution based on IntSet
which is overall more efficient without losing much. The thing
we lose is width of the variables, which isn't used by the sinking
pass anyway.

I also reworked how we keep assignments to regs mentioned in
skipped assignments. I put the details into
Note [Keeping assignemnts mentioned in skipped RHSs].

The gist of it is instead of keeping track of it via the use count
which is a `IntMap Int` we now use the live regs set (IntSet) which
is quite a bit faster.

I think it also matches the semantics a lot better. The skipped
(not discarded) assignment does in fact keep the regs on it's rhs
alive so keeping track of this in the live set seems like the clearer
solution as well.

Improves allocations for T3294 by yet another 1%.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/59f2249b4f4f3b1a5f2d0bc1b2923e0652b7de8f">59f2249b</a></strong>
<div>
<span>by Andreas Klebinger</span>
<i>at 2020-12-08T22:43:21-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">GHC.Cmm.Opt: Be stricter in results.

Optimization either returns Nothing if nothing is to be done or
`Just <cmmExpr>` otherwise. There is no point in being lazy in
`cmmExpr`. We usually inspect this element so the thunk gets forced
not long after.

We might eliminate it as dead code once in a blue moon but that's
not a case worth optimizing for.

Overall the impact of this is rather low. As Cmm.Opt doesn't allocate
much (compared to the rest of GHC) to begin with.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/54b88eacbf9d13f2b1d070932a742ec74419c3f5">54b88eac</a></strong>
<div>
<span>by Andreas Klebinger</span>
<i>at 2020-12-08T22:43:57-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Bump time submodule.

This should fix #19002.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/8f86d1634093d0280675184987df1d6a779dd04d">8f86d163</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-12-09T10:34:14+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Kill floatEqualities completely

This WIP patch over-delivers on #17656.

I say "over-delivers" because instead of improving floatEqualities, it
kills it off entirely.  Instead we use level numbers.

There is plenty of dead code to delete, and Notes to write, but for
now this a proof of concept, to enable code review.

It validates.
</pre>
</li>
</ul>
<h4>30 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#56e23d78cfece2c83f03ed9b9a8ce9b20be26462">
compiler/GHC/Cmm/Expr.hs
</a>
</li>
<li class="file-stats">
<a href="#2d9f432ef2a75cf9ce101a5380b45e6cb06a42d0">
<span class="new-file">
+
compiler/GHC/Cmm/LRegSet.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#95111d27913460e138e20c87f610b61c3745ab2b">
compiler/GHC/Cmm/Liveness.hs
</a>
</li>
<li class="file-stats">
<a href="#90378e83c3a00a78bc0b3c01da111e0a787de451">
compiler/GHC/Cmm/Node.hs
</a>
</li>
<li class="file-stats">
<a href="#00c27365316e033b00cc3ed3854ac8714d25a2b5">
compiler/GHC/Cmm/Opt.hs
</a>
</li>
<li class="file-stats">
<a href="#b1390f6749e1a2dddcae35f88d55623ea6269f56">
compiler/GHC/Cmm/Sink.hs
</a>
</li>
<li class="file-stats">
<a href="#f9f29a5a64a0b66967f0a7c538dbf8ad06a9f5bb">
compiler/GHC/Cmm/Utils.hs
</a>
</li>
<li class="file-stats">
<a href="#576dff4e64fa03683ffc5dcdd58284acdd70bc8e">
compiler/GHC/Hs/Extension.hs
</a>
</li>
<li class="file-stats">
<a href="#9355bef855426caf5f526925edf351b20f9a86c4">
compiler/GHC/Tc/Gen/HsType.hs
</a>
</li>
<li class="file-stats">
<a href="#54436e21ea530a66a8a71bcc01c836f4740b8f02">
compiler/GHC/Tc/Solver.hs
</a>
</li>
<li class="file-stats">
<a href="#f018e77421f495c6f75733fee4a511cfe57bebe8">
compiler/GHC/Tc/Solver/Canonical.hs
</a>
</li>
<li class="file-stats">
<a href="#f639b0b31b7245cb7d34ac190b798f5ec1c7da2e">
compiler/GHC/Tc/Solver/Interact.hs
</a>
</li>
<li class="file-stats">
<a href="#0c6b585a8a21f8340a85ca2cef89c4b1bf5a8953">
compiler/GHC/Tc/Solver/Monad.hs
</a>
</li>
<li class="file-stats">
<a href="#83d23a46bb6cdc8b1edc16f1fd2c8f5c53e2c9ca">
compiler/GHC/Tc/TyCl.hs
</a>
</li>
<li class="file-stats">
<a href="#e63425e031ffe9350ee6b1687e506aaea75d11e1">
compiler/GHC/Tc/TyCl/Instance.hs
</a>
</li>
<li class="file-stats">
<a href="#94c96afe1bb3b771ffbcfeeca34ce43ebbe76ccb">
compiler/GHC/Tc/Utils/TcMType.hs
</a>
</li>
<li class="file-stats">
<a href="#5461e7beeb7ae73d7c01f720cbaa3fa2c5333590">
compiler/GHC/Tc/Utils/TcType.hs
</a>
</li>
<li class="file-stats">
<a href="#74295edeac870ee7f2f3484ebaffab5c948b735a">
compiler/GHC/Tc/Utils/Unify.hs
</a>
</li>
<li class="file-stats">
<a href="#d3cf57b6a5ebc234dc7689db38ef9b6cf2259c0f">
compiler/GHC/Utils/Outputable.hs
</a>
</li>
<li class="file-stats">
<a href="#0f33fd88c617246c7f89c4477d2d1d24f942df23">
compiler/ghc.cabal.in
</a>
</li>
<li class="file-stats">
<a href="#d87dfc77856eeaef6134e28336290ddcbcf18d7d">
docs/users_guide/9.2.1-notes.rst
</a>
</li>
<li class="file-stats">
<a href="#fa050e1532c92b2ffc94692d8b368f3fefa3196d">
docs/users_guide/exts/poly_kinds.rst
</a>
</li>
<li class="file-stats">
<a href="#6d5bb3f66af29932d469deefe0f4351faf14a304">
hadrian/src/Settings/Flavours/Development.hs
</a>
</li>
<li class="file-stats">
<a href="#85be39da47a20360dc906ebad4c63f9cfb7363a6">
libraries/time
</a>
</li>
<li class="file-stats">
<a href="#05e2feaa7ccbd427e12a90d25808ead5ec587c63">
testsuite/tests/dependent/should_fail/T13780a.stderr
</a>
</li>
<li class="file-stats">
<a href="#526bbf30531cad446c3194aa829668c9c4650b0a">
testsuite/tests/deriving/should_compile/T11416.hs
</a>
</li>
<li class="file-stats">
<a href="#5b83e99d7c85673bbd8af817bf225cf3695013b9">
testsuite/tests/deriving/should_compile/T9359.hs
</a>
</li>
<li class="file-stats">
<a href="#94292f469539d175687337f47cccb30eaba2e6fc">
<span class="new-file">
+
testsuite/tests/gadt/SynDataRec.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#c68bb340f8f227ab4ac9922422ce0177433e1dfc">
testsuite/tests/gadt/all.T
</a>
</li>
<li class="file-stats">
<a href="#be3176dd680b038f442161581e992924140d0404">
testsuite/tests/ghci.debugger/scripts/break012.stdout
</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: #666;">

<br>
<a href="https://gitlab.haskell.org/ghc/ghc/-/compare/6313ae215c19bbde5e1c11c503e8cf51e893b6ea...8f86d1634093d0280675184987df1d6a779dd04d">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>