<div dir="ltr"><div>TO: Performance czars and devs</div><div><br></div><div>I pushed a patch yesterday enabling a second demand analysis at the end of the core2core simplification pipeline. The flag is -flate-dmd-anal, and it is off by default.</div>

<div><br></div><div>My question:</div><div><br></div><div>  What&#39;s the protocol for deciding if -O2 should imply it?</div><div><br></div><div>See <a href="http://ghc.haskell.org/trac/ghc/wiki/LateDmd">http://ghc.haskell.org/trac/ghc/wiki/LateDmd</a> for context.<br>

</div><div><br></div><div>In particular, this section includes highlights of some nofib runs I did.</div><div><br></div> <a href="http://ghc.haskell.org/trac/ghc/wiki/LateDmd#Newperformancenumbers">http://ghc.haskell.org/trac/ghc/wiki/LateDmd#Newperformancenumbers</a><br>

<div><br></div><div>For some tests, it decreases allocation by 10% to 20%. But on the platforms I have tried, it causes a couple repeatable slowdowns, up to 10%. I&#39;ve investigated a bit, but haven&#39;t found any clear explanations. I&#39;m worried that it&#39;s caching effects, eg.</div>

<div><br></div><div>Any suggestions on how I should proceed with my investigation?</div><div><br></div><div>Also: I&#39;d appreciate if any developer would generously run some benchmarks on various platforms they might have and add them to the same section in the wiki page.</div>

<div><br></div><div> <a href="http://ghc.haskell.org/trac/ghc/wiki/LateDmd#Newperformancenumbers">http://ghc.haskell.org/trac/ghc/wiki/LateDmd#Newperformancenumbers</a></div><div><br></div><div>NB That it is unfortunately key to build the libraries twice: once with -flate-dmd-anal in GhcLibHcOpts and once without. I have not determined how to do this robustly without a distclean  please let me know if you have a better method.</div>

<div><br></div>So I&#39;ve used<br><br># one of the following<br><div>#GhcLibHcOpts  = -O2 # both with and without -flate-dmd-anal<br>GhcLibHcOpts  = -O2 -flate-dmd-anal<br>SplitObjs     = NO<br>DYNAMIC_BY_DEFAULT  = NO<br>

DYNAMIC_GHC_PROGRAMS = NO<br><br>The last three aren&#39;t necessary, but please record what you use, if you are so generous as to run it :).<br><br><div>Thanks.</div></div></div>