<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 href="mailto:jtcriswel@gmail.com" target="_blank">jtcriswel@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><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 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><br></div><div>-Vivek</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
    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 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>