<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 6/21/16 11:27 AM, vivek pandya
wrote:<br>
</div>
<blockquote
cite="mid:CAHYgpoL=JMKag6Ky_FANBLVF_DfSu7YDB6iMw=vacFN1HtT=6g@mail.gmail.com"
type="cite">
<meta http-equiv="Context-Type" content="text/html; charset=UTF-8">
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Tue, Jun 21, 2016 at 8:58 PM, John
Criswell <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:jtcriswel@gmail.com" target="_blank">jtcriswel@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote">
<div><span class="">
<div>On 6/20/16 11:29 PM, Mehdi Amini wrote:<br>
</div>
<blockquote type="cite"> <br>
<div>
<blockquote type="cite">
<div>On Jun 20, 2016, at 11:12 AM, John Criswell
via llvm-dev <<a moz-do-not-send="true"
href="mailto:llvm-dev@lists.llvm.org"
target="_blank">llvm-dev@lists.llvm.org</a>>
wrote:</div>
<br>
<div>
<div>On 6/20/16 9:39 AM, vivek pandya via
llvm-dev wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Dear Community,
<div><br>
</div>
<div>To improve current interprocedural
register allocation (IPRA) , we have
planned to set callee saved registers to
none for local functions, currently I am
doing it in following way:</div>
<div><br>
</div>
<div>if (F->hasLocalLinkage() <span> </span><span>&&
!F->hasAddressTaken()</span>) {</div>
</div>
</blockquote>
<br>
<span>As an aside, you might want to analyze
how many functions have both local linkage
and are not address taken. I recall that
many functions returned false for
hasAddressTaken() because some direct calls
casted the function to a different function
type before calling it. Such functions are
still not address taken, but the simple
hasAddressTaken() method can't determine it.</span><br>
</div>
</blockquote>
<div><br>
</div>
<div>Looks like hasAddressTaken could be updated
to handle these simple case maybe?</div>
</div>
</blockquote>
<br>
</span> That might make sense if it has not been fixed
already. Another approach (if in-tree LLVM passes are
frequently checking for indirect calls) would be to
write a simple analysis pass that lazily computes the
information on demand. That way, if multiple passes are
checking the same function repeatedly, it gets cached in
the analysis pass instead of being recomputed (so long
as the analysis pass is not invalidated by a transform).
<br>
<br>
</div>
</blockquote>
<div>Addition of new pass will require other passes to be
modified. So it will be good have strong reason for adding
new pass. Other wise I am in favor to modify
hasAddressTaken().</div>
</div>
</div>
</div>
</blockquote>
<br>
Addition of a new pass means that existing passes would not get the
benefit of the new pass until they are updated to use it. You would
not need to update existing passes though it would probably make
sense to do so if using a separate analysis pass is better.<br>
<br>
Also keep in mind that the two approaches are not mutually
exclusive. Updating hasAddressTaken() to take casting into account
would probably not increase its run-time much. The point of using a
pass is to cache the results of hasAddressTaken(); the pass makes
sense if the hasAddressTaken() queries are being performed
repeatedly on the same functions by multiple passes.<br>
<br>
Regards,<br>
<br>
John Criswell<br>
<br>
<blockquote
cite="mid:CAHYgpoL=JMKag6Ky_FANBLVF_DfSu7YDB6iMw=vacFN1HtT=6g@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div><br>
</div>
<div>-Vivek</div>
<div> </div>
<blockquote class="gmail_quote">
<div> Regards,<br>
<br>
John Criswell<span class=""><br>
<p><br>
</p>
<pre cols="72">--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a moz-do-not-send="true" href="http://www.cs.rochester.edu/u/criswell" target="_blank">http://www.cs.rochester.edu/u/criswell</a></pre>
</span></div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
<br>
<p><br>
</p>
<pre class="moz-signature" cols="72">--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a class="moz-txt-link-freetext" href="http://www.cs.rochester.edu/u/criswell">http://www.cs.rochester.edu/u/criswell</a></pre>
</body>
</html>