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