<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: arial,helvetica,sans-serif; font-size: 10pt; color: #000000'><br><br><hr id="zwchr"><blockquote id="DWT5198" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><b>From: </b>"John Criswell via llvm-dev" <llvm-dev@lists.llvm.org><br><b>To: </b>"Norilo Vesa-Petri" <vesa-petri.norilo@uniarts.fi>, llvm-dev@lists.llvm.org<br><b>Sent: </b>Friday, February 19, 2016 7:54:30 AM<br><b>Subject: </b>Re: [llvm-dev] Metadata and compile time performance<br><br>

  
    <div class="moz-cite-prefix">On 2/19/16 7:47 AM, Norilo Vesa-Petri
      via llvm-dev wrote:<br>
    </div>
    <blockquote cite="mid:HE1PR01MB077770A69862A83782BE3DD6DCA00@HE1PR01MB0777.eurprd01.prod.exchangelabs.com">
      
      
      <div class="WordSection1">
        <p class="MsoNormal"><span lang="FI">Dear LLVMers,</span></p>
        <p class="MsoNormal"><span lang="FI"> </span></p>
        <p class="MsoNormal"><span lang="FI">I’m investigating the
            response time of my JIT, and according to profiling,
            optimization takes 85% of the compile time, while the rest
            is being split evenly between the front-end and machine code
            generation. Much of the optimizer time is spent in various
            alias analysis passes. </span></p>
      </div>
    </blockquote>
    <br>
    One thing you might want to do is look at the pass pipeline and see
    if the alias analysis passes are being re-run multiple times.  If
    they are, then maybe the issue is getting alias analysis to run
    fewer times instead of trying to get it to run faster.<br></blockquote>Unfortunately, our AA is mostly stateless, so this is not really going to be an issue. "Running" BasicAA, which is the most-expensive one, does not really do anything. Every time to make an AA query it walks use/def chains to determine an answer.<br><br>Counterintuitively, using TBAA metadata also won't really help because the BasicAA query is always done first regardless. This is because for its primary use case (modeling C/C++ TBAA rules), we need to catch cases of disallowed aliasing from common type-punning idioms and still do what the user expects (i.e. recognize the aliasing). Adding restrict (noalias) on function arguments where you can should help (that will make the associated BasicAA logic cheaper).<br><br>Depending on what you're doing, generating fewer GEPs that BasicAA needs to look through will also speed things up.<br><br> -Hal<br><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;">
    <br>
    There could be two culprits for running analysis passes over and
    over again.  First, it's possible that an analysis pass (or passes)
    are invalidated over and over again by optimizations.  Changing the
    ordering of the optimizations or having key optimizations update the
    analysis information might fix that problem.<br>
    <br>
    Second, unless it's been changed, using a FunctionPass from within a
    ModulePass forces the FunctionPass to be re-run from scratch
    whenever the getAnalysisUsage<FunctionPass>() method is
    called.  A poorly written ModulePass may cause a FunctionPass to be
    run over and over again needlessly.  I doubt that the in-tree
    optimizations make this sort of mistake, but it is conceivably
    possible.<br>
    <br>
    To be clear, I don't know that this is the cause of your overhead,
    but if it were me, I'd check this first before trying to make alias
    analysis run faster.<br>
    <br>
    Regards,<br>
    <br>
    John Criswell<br>
    <br>
    <blockquote cite="mid:HE1PR01MB077770A69862A83782BE3DD6DCA00@HE1PR01MB0777.eurprd01.prod.exchangelabs.com">
      <div class="WordSection1">
        <p class="MsoNormal"><span lang="FI"> </span></p>
        <p class="MsoNormal"><span lang="FI">I’m happy with the
            generated code quality and wouldn’t like to lower the
            optimization level (O2).</span></p>
        <p class="MsoNormal"><span lang="FI"> </span></p>
        <p class="MsoNormal"><span lang="FI">Would generating alias
            metadata from the front-end help and speed up optimization?
          </span></p>
        <p class="MsoNormal"><span lang="FI"> </span></p>
        <p class="MsoNormal"><span lang="FI">If so, what kind of AA
            would have the best return on investment in terms of compile
            time? TBAA is not applicable to my language, but I could
            provide C99 restrict and related semantics fairly easily.</span></p>
        <p class="MsoNormal"><span lang="FI"> </span></p>
        <p class="MsoNormal"><span lang="FI">Thanks!!</span></p>
        <p class="MsoNormal"> </p>
        <p class="MsoNormal">Vesa Norilo<br>
          Lecturer<br>
          Centre for Music and Technology<br>
          University of Arts Helsinki</p>
        <p class="MsoNormal"><span> </span></p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre>_______________________________________________<br>LLVM Developers mailing list<br><a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br><a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br></pre>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature">-- <br>John Criswell<br>Assistant Professor<br>Department of Computer Science, University of Rochester<br><a class="moz-txt-link-freetext" href="http://www.cs.rochester.edu/u/criswell" target="_blank">http://www.cs.rochester.edu/u/criswell</a></pre>
  <br>_______________________________________________<br>LLVM Developers mailing list<br>llvm-dev@lists.llvm.org<br>http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br></blockquote><br><br><br>-- <br><div><span name="x"></span>Hal Finkel<br>Assistant Computational Scientist<br>Leadership Computing Facility<br>Argonne National Laboratory<span name="x"></span><br></div></div></body></html>