<div dir="ltr"><div class="gmail_default" style="font-family:times new roman,serif;font-size:large"><br></div><div class="gmail_default" style="font-family:times new roman,serif;font-size:large">Kavin is definitely the right guy to answer this but as he mentioned the Wiki now has a link to the Google Doc, i.e. <a href="https://docs.google.com/document/d/1Pn2_TDBJwSBKkjFlT-blwygH10z37TPxIqcKTOOf2mg/edit#" style="font-family:Arial,Helvetica,sans-serif;font-size:small">https://docs.google.com/document/d/1Pn2_TDBJwSBKkjFlT-blwygH10z37TPxIqcKTOOf2mg/edit#</a>. Simon, have you had a chance to read that?</div><div class="gmail_default" style="font-family:times new roman,serif;font-size:large"><br></div><div class="gmail_default" style="font-family:times new roman,serif;font-size:large">If I understand that doc correctly the original hope of a CPS call intrinsic in LLVM has been abandoned. Excerpts from the doc:</div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:times new roman,serif;font-size:large"><span id="gmail-docs-internal-guid-df95ed8b-7fff-8079-ae5c-1a51cdf9560d"><h1 dir="ltr" style="line-height:1.8;margin-top:20pt;margin-bottom:6pt"><span style="font-size:20pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">First approach -- “CPS call” intrinsic in LLVM</span></h1></span></div><div class="gmail_default" style="font-family:times new roman,serif;font-size:large"><span id="gmail-docs-internal-guid-df95ed8b-7fff-8079-ae5c-1a51cdf9560d"><div><span style="font-size:20pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">...</span></div><div><span style="background-color:transparent;font-size:20pt;color:rgb(0,0,0);font-family:Arial;white-space:pre-wrap">Current ideas</span></div></span></div><div class="gmail_default" style="font-family:times new roman,serif;font-size:large"><span id="gmail-docs-internal-guid-df95ed8b-7fff-8079-ae5c-1a51cdf9560d"><span style="font-size:20pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"><span id="gmail-docs-internal-guid-867f1f60-7fff-fb95-9233-aa67a1a490a1"><div><span style="font-size:20pt;background-color:transparent;font-weight:400;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline">...</span></div></span></span></span></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_default" style="font-family:times new roman,serif;font-size:large"><span><div><span style="font-size:20pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"><span><div><span style="font-size:20pt;background-color:transparent;font-weight:400;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline"><span id="gmail-docs-internal-guid-31f8abc2-7fff-b6cc-e924-2868a2534459"><h3 dir="ltr" style="line-height:1.8;margin-top:16pt;margin-bottom:4pt"><span style="font-size:14pt;color:rgb(67,67,67);background-color:transparent;font-weight:400;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline">CPS call</span></h3><p dir="ltr" style="line-height:1.8;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline"><span class="gmail-Apple-tab-span" style="white-space:pre">    </span></span><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline">LLVM recently added callbr instruction that looks similar to what we need to get CPS calls to work (the instruction allows to reify the return address as a parameter to a call and specify the successor blocks where the call might jump back to).</span></p></span></span></div></span></span></div></span></div></blockquote><div class="gmail_default" style="font-family:times new roman,serif;font-size:large"><span id="gmail-docs-internal-guid-4983b804-7fff-8ff6-f352-5db6ee55eee4"><h3 dir="ltr" style="line-height:1.8;margin-top:16pt;margin-bottom:4pt"><br></h3></span><br class="gmail-Apple-interchange-newline"></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 4, 2019 at 6:16 PM Simon Peyton Jones via ghc-devs <<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-GB">
<div class="gmail-m_1509248987267550974WordSection1">
<p class="MsoNormal">Thanks Kavon.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">What news of CpsCall in LLVM?  That seems crucial.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I didn’t know of an effort to use a different SP register.  I seriously doubt that, with GHC’s use of zillions of small, heap-allocated stacks that move around during GHC, we’ll be able to leverage profiling or debugging tools in a serious
 way. But perhaps I need education.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Simon<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> ghc-devs <<a href="mailto:ghc-devs-bounces@haskell.org" target="_blank">ghc-devs-bounces@haskell.org</a>>
<b>On Behalf Of </b>Kavon Farvardin<br>
<b>Sent:</b> 04 December 2019 19:32<br>
<b>To:</b> Ben Gamari <<a href="mailto:ben@smart-cactus.org" target="_blank">ben@smart-cactus.org</a>><br>
<b>Cc:</b> GHC developers <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>><br>
<b>Subject:</b> Re: new llvm IR callbr instruction useful for proc-point splitting?<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Hi Ben,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The Wiki now has a link to the Google Doc that Michal and I were working on to compile all of the notes into one place.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The key progress made on this front has been in evaluating the trade-offs of the design space being considered by GHC, but tested within Manticore.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'm drafting a message today for the LLVM mailing list regarding one of our first options: defining a GHC ABI to redefine which stack-pointer register is used. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Once we have additional answers to the question "how much effort is it to add a GHC ABI to LLVM?", we can then then start a discussion on whether GHC wants to change instead by moving to a native stack-pointer register (to take advantage
 of existing debugging and profiling tools, etc).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Ideally, we would then make a decision on which option to take and someone (perhaps a GSoC student with mentorship from myself and others) with spare time can work on it.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Cheers,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Kavon<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">On Wed, 2019-12-04 at 11:38 -0500, Ben Gamari wrote:<u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid rgb(114,159,207);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<pre>Kavon Farvardin <<a href="mailto:kavon@farvard.in" target="_blank">kavon@farvard.in</a>> writes:<u></u><u></u></pre>
<pre><u></u> <u></u></pre>
<pre>Yes, callbr is part of the discussion on removing proc-point splitting! <u></u><u></u></pre>
<pre>Soon there will be an announcement about a new working group dedicated to LLVM<u></u><u></u></pre>
<pre>issues such as this one on this mailing list. Anyone interested is welcome to<u></u><u></u></pre>
<pre>join our meetings.<u></u><u></u></pre>
<pre>We're currently gathering our notes together first, but you can have a look here<u></u><u></u></pre>
<pre>for a preview: <u></u><u></u></pre>
<pre><a href="https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/LLVM-Backend-Optimization" target="_blank">https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/LLVM-Backend-Optimization</a><u></u><u></u></pre>
<pre><u></u> <u></u></pre>
<pre>Hi Kavon,<u></u><u></u></pre>
<pre><u></u> <u></u></pre>
<pre>What ever happened to this? It came up during the GHC call and we<u></u><u></u></pre>
<pre>realized that none of us knew what the state of the proposal was. Is<u></u><u></u></pre>
<pre>this Wiki page still reflective of the current state of play?<u></u><u></u></pre>
<pre><u></u> <u></u></pre>
<pre>Cheers,<u></u><u></u></pre>
<pre><u></u> <u></u></pre>
<pre>- Ben<u></u><u></u></pre>
<pre><u></u> <u></u></pre>
<pre><u></u> <u></u></pre>
</blockquote>
</div>
</div>
</div>

_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div>