<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin-top:6.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:6.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:36.0pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
p.Code, li.Code, div.Code
        {mso-style-name:Code;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:9.0pt;
        font-family:"Courier New";}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
.MsoPapDefault
        {mso-style-type:export-only;
        margin-top:6.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:0cm;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:652680917;
        mso-list-type:hybrid;
        mso-list-template-ids:-322122790 134807553 134807555 134807557 134807553 134807555 134807557 134807553 134807555 134807557;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">Ben, David, Reid<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">I have been working for months (on and off, mostly off, but very ON for the last week or two) on a very simple idea: the simplifier should inline things even in the “gentle” phase.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">It seems so simple.  And it is: the key patch is tiny.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">But it stressed corners of the optimiser that were not stressed before; and digging into it showed opportunities I did not know about before.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">So I  have ended up a with a whole series of patches, which are on wip/spj-early-inline branch<o:p></o:p></span></p>
<p class="Code">7f14d15c0e5fc2c9a81db3d0f0b01d85857b1d87 Error message wibbles accumulated from the preceding patches<o:p></o:p></p>
<p class="Code">0499c65d9fa45e7879e1e1264fdaa15274adcba6 Improve SetLevels for join points<o:p></o:p></p>
<p class="Code">3b2fc0827ff6cafa34836c2d9dc710b628c990b6 Change -ddump-tc-trace output in TcErrors, slightly<o:p></o:p></p>
<p class="Code">9ffdf62b0ca72c4f35579f9d6f31a9beebf23025 Improve pretty-printing of types<o:p></o:p></p>
<p class="Code">3f346eac06399a79adf48425018ee949cee245bf Add VarSet.anyDVarSet, allDVarSet<o:p></o:p></p>
<p class="Code">912e71eb3b4ec91e805ecf2236d1033e55e2933a The Early Inline Patch<o:p></o:p></p>
<p class="Code">7188cd13f8e54efa764d52ca016b87b3669b29f5 Small changes to expression sizing in CoreUnfold<o:p></o:p></p>
<p class="Code">bfc6fa3f377d11bdfcdbf82b65bf2f39cb00b90c Fix SetLevels for makeStaticPtr<o:p></o:p></p>
<p class="Code">8b1cfea089faacb5b95ffcc3511e05faeabb8076 Extend CSE to handle recursive bindings<o:p></o:p></p>
<p class="Code">50411995641802568bb27c867afe804f91e0524c Combine identical case alterantives in CSE<o:p></o:p></p>
<p class="Code">2e077ccc736a0b2a622b7f42b7929966bddb4ded Inline data constructor wrappers in phase 2 only<o:p></o:p></p>
<p class="Code">b868de53dd19f639c1070089ecff21948ff33e0d Make Specialise work with casts<o:p></o:p></p>
<p class="Code">c767ae5f04a09ef71dcb8f67a17225a52c2cc5d2 Stop uniques ending up in SPEC rule names<o:p></o:p></p>
<p class="Code">b49ed1f0102f93ca7f62632c436b41bd240b501f Occurrence-analyse the result of rule firings<o:p></o:p></p>
<p class="Code">607a735dfb99bb8f0edf466ccb01e732218c42ec Add -fspec-constr-keen<o:p></o:p></p>
<p class="Code">67a0c1872c0515f1f12ea68097a84e02da92f45b Refactor floating of bindings (fiBind)<o:p></o:p></p>
<p class="Code">e90f4d7c6d3003039fa1647a3da3dafcaa75527b More tracing in SpecConstr<o:p></o:p></p>
<p class="Code"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">Much to my surprise, we get some jolly nice improvements in compiler perf:<o:p></o:p></span></p>
<p class="Code">3%   perf/compiler/T5837.run            T5837 [stat too good] (normal)<o:p></o:p></p>
<p class="Code">7%   perf/compiler/parsing001.run       parsing001 [stat too good] (normal)<o:p></o:p></p>
<p class="Code">9%   perf/compiler/T12234.run           T12234 [stat too good] (optasm)<o:p></o:p></p>
<p class="Code">35%  perf/compiler/T9020.run            T9020 [stat too good] (optasm)<o:p></o:p></p>
<p class="Code">9%   perf/compiler/T3064.run            T3064 [stat too good] (normal)<o:p></o:p></p>
<p class="Code">13%  perf/compiler/T9961.run            T9961 [stat too good] (normal)<o:p></o:p></p>
<p class="Code">20%  perf/compiler/T13056.run           T13056 [stat too good] (optasm)<o:p></o:p></p>
<p class="Code">5%   perf/compiler/T9872d.run           T9872d [stat too good] (normal)<o:p></o:p></p>
<p class="Code">5%   perf/compiler/T9872c.run           T9872c [stat too good] (normal)<o:p></o:p></p>
<p class="Code">5%   perf/compiler/T9872b.run           T9872b [stat too good] (normal)<o:p></o:p></p>
<p class="Code">7%   perf/compiler/T9872a.run           T9872a [stat too good] (normal)<o:p></o:p></p>
<p class="Code">5%   perf/compiler/T783.run             T783 [stat too good] (normal)<o:p></o:p></p>
<p class="Code">35%   perf/compiler/T12227.run           T12227 [stat too good] (normal)<o:p></o:p></p>
<p class="Code">20%   perf/compiler/T1969.run            T1969 [stat too good] (normal)<o:p></o:p></p>
<p class="Code">5%   perf/should_run/lazy-bs-alloc.run  lazy-bs-alloc [stat too good] (normal)<o:p></o:p></p>
<p class="Code">5%   perf/compiler/T12707.run         T12707 [stat too good] (normal)<o:p></o:p></p>
<p class="Code"><o:p> </o:p></p>
<p class="Code">4%   perf/compiler/T3294.run            T3294 [stat too good] (normal)<o:p></o:p></p>
<p class="Code">1.5% perf/space_leaks/T4029.run         T4029 [stat too good] (ghci)<o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">So what is left?  I have sunk so much time into this and am still not QUITE out of the woods.   I was left with
<o:p></o:p></span></p>
<p class="Code">Unexpected failures:<o:p></o:p></p>
<p class="Code">   codeGen/should_compile/debug.run              debug [bad stdout] (normal)<o:p></o:p></p>
<p class="Code">   concurrent/should_run/T4030.run               T4030 [bad exit code] (normal)<o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">I’m re-validating having pulled from HEAD, but I THINK that’s all.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">Now<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-family:"Calibri",sans-serif">I don’t know how to Phab these individually<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-family:"Calibri",sans-serif">I have not sweated through which patch is responsible for which perf improvments.  Maybe Gipeda can tell?<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-family:"Calibri",sans-serif">I have not put each error message change with the correct patch.  I don’t know how much that matters.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">So this is to say: anything you guys can do to help get this actually Done would be really helpful.   I’m out of time till Monday at least.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">It would be great to collect those performance improvements!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">Thanks!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">Simon<o:p></o:p></span></p>
<p class="Code"><o:p> </o:p></p>
</div>
</body>
</html>