<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:"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]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><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 https://reviews.llvm.org/D34608 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. <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></body></html>