<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 10/27/2017 03:32 PM, Jun Lim via
      llvm-dev wrote:<br>
    </div>
    <blockquote
      cite="mid:03d001d34f62$c05a0270$410e0750$@codeaurora.org"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@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;}
@font-face
        {font-family:"Malgun Gothic";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
        {font-family:"\@Malgun Gothic";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-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;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></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]-->
      <div class="WordSection1">
        <p class="MsoNormal">When compiling C code below for AArach64, I
          saw that shrink-wrapping didn't happen due to the very early
          uses of CSRs in the entry block. So CSR spills/reloads are
          executed even when the early exit block is taken.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">int getI(int i);<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">int foo(int *P, int i) {<o:p></o:p></p>
        <p class="MsoNormal">   if (i>0)<o:p></o:p></p>
        <p class="MsoNormal">     return P[i];<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">   i = getI(i);<o:p></o:p></p>
        <p class="MsoNormal">   return P[i];<o:p></o:p></p>
        <p class="MsoNormal">}<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">It's not that hard to find such cases where
          RegAllocGreedy aggressively allocates a CSRs when a live range
          expands across a call-site.  That's because of the
          conservatively initialized CSRCost, causing RegAllocGreedy to
          strongly favour allocating a CSR over splitting a region.
          Since allocation of CSRs requires the cost of spilling CSRs,
          allocating CSRs is not always beneficial. Like the case above,
          if a function has an early exit code, we may want to be less
          aggressive on the first allocation of CSR in the entry block
          by increasing the CSRCost. <o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Previously, I proposed
          <a class="moz-txt-link-freetext" href="https://reviews.llvm.org/D34608">https://reviews.llvm.org/D34608</a> in this matter, but the way I
          detect the profitable cases and the way I increase the CRSCost
          was somewhat unclear. Now, I'm thinking to less aggressive on
          the first allocation of CSR in the entry block in case where
          the function has an early exit so that encourage more
          shrink-wrapping and avoid executing CSR spill/recover when the
          early exit is taken. By sending this out, I just want to get
          any high level feedback early. Please let me know if anyone
          has any opinion about this. </p>
      </div>
    </blockquote>
    <br>
    So the heuristic will have nothing to do with the presence of calls?
    Might this increase spilling in loops?<br>
    <br>
     -Hal<br>
    <br>
    <blockquote
      cite="mid:03d001d34f62$c05a0270$410e0750$@codeaurora.org"
      type="cite">
      <div class="WordSection1">
        <p class="MsoNormal"><o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Thanks,<br>
          Jun<o:p></o:p></p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </body>
</html>