<!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>
Sebastian Graf pushed to branch wip/nested-cpr-2019
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/255f7da3b44d012b9e042525379e6f9710d54a5d">255f7da3</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Inline `integerDecodeDouble#` and constant-fold `decodeDouble_Int64#` instead

Currently, `integerDecodeDouble#` is known-key so that it can be
recognised in constant folding. But that is very brittle and doesn't
survive worker/wrapper, which we even do for
`NOINLINE` things since #13143.
Also it is a trade-off: The implementation of `integerDecodeDouble#`
allocates an `Integer` box that never cancels aways if we don't inline
it.

Hence we recognise the `decodeDouble_Int64#` primop instead in constant
folding, so that we can inline `integerDecodeDouble#`. As a result,
`integerDecodeDouble#` no longer needs to be known-key.

While doing so, I realised that we don't constant-fold
`decodeFloat_Int#` either, so I also added a RULE for it.

`integerDecodeDouble` is dead, so I deleted it.

Part of #18092. This improves the 32-bit `realToFrac`/`toRational`:

Metric Decrease:
    T10359
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/09642b18eaba2b37760a0faae0d804068b3a0b41">09642b18</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Nested CPR
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/21f4f6a8b0aca01df63b017e1ea2621db6090b09">21f4f6a8</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Move tests from stranal to cpranal
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/dfa71c42ec0538547abb8af0cb724201a7ce2f7f">dfa71c42</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Accept FacState
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/dd43149b18013752c4ff7dd4001d4bf4913c7bd8">dd43149b</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Factor Cpr and Termination into a joint lattice

As a result, we don't even have to export Termination from Cpr. Neat!

Also I realised there is a simpler and more sound way to generate and
unleash CPR signatures.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/accc7b062935f11acd5159389b51f34cce9169b5">accc7b06</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Consider unboxing effects of WW better and get rid of hack
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/ffceb656ed22ff4040d02f2e0ee7062ca8225d55">ffceb656</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">stuff
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/a0a58d44e12a4ce98e3f134f0896108fd92b7b0b">a0a58d44</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">A slew of testsuite changes
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/301fbecc763871d30d8474ddff32703ed6ac6ddf">301fbecc</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix T1600
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/5d686400129aaccba3ba1bd34767c536ea01222c">5d686400</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix primop termination
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/cc60de4364eab0105c67779b3be8cc37481ae306">cc60de43</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Test for DataCon wrapper CPR
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/77a08dea69338528e919811904e38c787c80899e">77a08dea</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix CPR of bottoming functions/primops
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d0c371db185662ce2b69b1b37d58b158a9eb3c54">d0c371db</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix DataConWrapperCpr and accept other test outputs
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/abb7a677be8fd215c2607b6601b5eec132447524">abb7a677</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Accept two more changed test outputs
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/57a1ddeac0f1b3930bceec8ac38d599e40a3d41a">57a1ddea</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Update CaseBinderCPR with a new function
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/0882d7a12864fe5cded5841115f5a2f21b181e73">0882d7a1</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Don't give the case binder the CPR property
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/adab24ea869ce6dcbb95f5ea465f53d0232a047f">adab24ea</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:38+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Prune CPR sigs to constant depth on all bindings
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f21d25cf5280229a13122c5f5a04e6cb6b9dd7f3">f21d25cf</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Use variable length coding for ConTags
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/fddeca2203d99b0684d3e89ea24493d772207e69">fddeca22</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Accept testuite output
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f36591b7f67a1a2b7483e06552ac9499b9c4977c">f36591b7</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Don't attach CPR sigs to expandable bindings; transform their unfoldings instead
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/b65459f7582d7653c18858390148cb713b918005">b65459f7</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Revert "Don't give the case binder the CPR property"

This reverts commit 910edd76d5fe68b58c74f3805112f9faef4f2788.

It seems we broke too much with this change. We lost our big win in
`fish`.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/9272dc2b32678f738db0f8443794038d61aab171">9272dc2b</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">A more modular and configurable approach to optimistic case binder CPR
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/295251f3e3b9f444588e2b23dd58a1893f758f7b">295251f3</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix T9291
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/5a7d9758b0717539a5631db8011574b85873ed99">5a7d9758</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Document -fcase-binder-cpr-depth in the user's guide
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f31e09ad810a8c2401e86a519526ddf800600362">f31e09ad</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Testsuite changes
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/fe784c0a7045aabcedebe6fe7411591f779813f1">fe784c0a</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Refactoring around cprAnalBind
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f274b8fb226d488ff251e8d02a8efd1b5d64d55d">f274b8fb</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix case binder CPR by not looking into unfoldings of case binders
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/b013bbed85aace204ac03c84fd97f4914f3594b5">b013bbed</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Regard all arity 0 bindings (incl. DataCon apps) as thunks
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/e82413500c7b5b7dd6d7827dec50b73c3db720bd">e8241350</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Don't store CPR info for data structures that are NOINLINE
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/e41b7ed81ed0bf953b01ca7fff7e39d827238e33">e41b7ed8</a></strong>
<div>
<span>by Sebastian Graf</span>
<i>at 2020-10-02T16:17:39+02:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Accepting metric changes to advance CI

There are two ghc/alloc increases, which we might want to investigate
later on.

Metric Decrease:
    T9872a
    T9872b
    T9872c
Metric Increase:
    T13253
    T13701
</pre>
</li>
</ul>
<h4>30 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#0887cf39c5cdf9cf8d6758f410d7dab3023c0d77">
compiler/GHC/Builtin/Names.hs
</a>
</li>
<li class="file-stats">
<a href="#35cff95f9f44690fc50b44bbe8ac3c554c7d5a5e">
compiler/GHC/Core/Make.hs
</a>
</li>
<li class="file-stats">
<a href="#c3967bb9d3e8f5aae2dd111b5a335b48c21c1999">
compiler/GHC/Core/Opt/Arity.hs
</a>
</li>
<li class="file-stats">
<a href="#aa79261abf782f3dc603af7fbd5c4b08ed3ddb88">
compiler/GHC/Core/Opt/ConstantFold.hs
</a>
</li>
<li class="file-stats">
<a href="#c1bf6b849619bc8d7ef37a97d993dbfaa9966f7b">
compiler/GHC/Core/Opt/CprAnal.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="#5b215b0e109123e4bef5434854f18e2f61c45b88">
compiler/GHC/Core/Opt/WorkWrap.hs
</a>
</li>
<li class="file-stats">
<a href="#f4421b4e35592648510c877ecf55b1af2b96dcee">
compiler/GHC/Core/Opt/WorkWrap/Utils.hs
</a>
</li>
<li class="file-stats">
<a href="#bbf06eb5d4f0db7bc3213b84b9f5822710ff7be8">
compiler/GHC/CoreToIface.hs
</a>
</li>
<li class="file-stats">
<a href="#f4ae6618b39d5ee4af8302b821aa7e38097a84b7">
compiler/GHC/Data/Maybe.hs
</a>
</li>
<li class="file-stats">
<a href="#2e5692f568fd7b67a6b172e2a60469da8392508c">
compiler/GHC/Driver/Flags.hs
</a>
</li>
<li class="file-stats">
<a href="#774d88050336ef660c7a219fb06c480c2fc639bc">
compiler/GHC/Driver/Session.hs
</a>
</li>
<li class="file-stats">
<a href="#079d6b28856775716c78fdd4a4b35bb45a59002c">
compiler/GHC/Iface/Syntax.hs
</a>
</li>
<li class="file-stats">
<a href="#d11203a9321005ba51a16d751c86f609d1f18c71">
compiler/GHC/Iface/Tidy.hs
</a>
</li>
<li class="file-stats">
<a href="#5a3376ebe9ef8294e13f1fb3761637fa76cd1558">
compiler/GHC/Types/Cpr.hs
</a>
</li>
<li class="file-stats">
<a href="#d09e98aae6ad2eb59d08eac7894b68c0ab820cda">
compiler/GHC/Types/Demand.hs
</a>
</li>
<li class="file-stats">
<a href="#38110817cdbc9a34d2b80a14070cabc7515c808a">
compiler/GHC/Types/Id/Info.hs
</a>
</li>
<li class="file-stats">
<a href="#261c0c5029eb34eb7436b087d77314f377ff8223">
compiler/GHC/Types/Id/Make.hs
</a>
</li>
<li class="file-stats">
<a href="#2e45f2cd303dd998950a7c8042e796a5b2abd64f">
docs/users_guide/using-optimisation.rst
</a>
</li>
<li class="file-stats">
<a href="#97f10ff6d3080a1528fa6a08128bf8a954416ec5">
<span class="deleted-file">

libraries/ghc-bignum/gmp/gmp-tarballs
</span>
</a>
</li>
<li class="file-stats">
<a href="#84ed6dfb0380e98269259d1b3a64e920ab8b9476">
libraries/ghc-bignum/src/GHC/Num/Integer.hs
</a>
</li>
<li class="file-stats">
<a href="#2ac98cc8621d6bfdea8f2b4778708fd4cc6b2a43">
testsuite/tests/stranal/sigs/CaseBinderCPR.hs

testsuite/tests/cpranal/sigs/CaseBinderCPR.hs
</a>
</li>
<li class="file-stats">
<a href="#ababeed265656180dcff618bf07f106122a4c488">
<span class="new-file">
+
testsuite/tests/cpranal/sigs/CaseBinderCPR.stderr
</span>
</a>
</li>
<li class="file-stats">
<a href="#43ee12cc363fbd354ba8fe834bc0645da253e571">
testsuite/tests/stranal/sigs/FacState.hs

testsuite/tests/cpranal/sigs/FacState.hs
</a>
</li>
<li class="file-stats">
<a href="#def1a3e69aaf5611b8d113117ba3736904fa8034">
<span class="new-file">
+
testsuite/tests/cpranal/sigs/FacState.stderr
</span>
</a>
</li>
<li class="file-stats">
<a href="#dd093eefcb81a5d889a35fe44f9c2f67acb37513">
<span class="new-file">
+
testsuite/tests/cpranal/sigs/Makefile
</span>
</a>
</li>
<li class="file-stats">
<a href="#798336961fb8c99684cf88b3cdac786a15a8938e">
testsuite/tests/stranal/should_compile/T10694.hs

testsuite/tests/cpranal/sigs/T10694.hs
</a>
</li>
<li class="file-stats">
<a href="#14abb53dfb8f7d74fcd5b2d69e33df3b785bbe7f">
<span class="new-file">
+
testsuite/tests/cpranal/sigs/T10694.stderr
</span>
</a>
</li>
<li class="file-stats">
<a href="#83c51c55db5835fdec38507a4acaaa61da9e39d9">
<span class="new-file">
+
testsuite/tests/cpranal/sigs/T1600.hs
</span>
</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/c7e6705fb267ad71b16865ad01d0e8ac2694d90d...e41b7ed81ed0bf953b01ca7fff7e39d827238e33">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>