<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>