<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 1/28/18 12:06 AM, Linhai Song wrote:<br>
    </div>
    <blockquote
cite="mid:CY4PR06MB235748761E89726F05A8F02F81E60@CY4PR06MB2357.namprd06.prod.outlook.com"
      type="cite">
      <meta http-equiv="Context-Type" content="text/html;
        charset=us-ascii">
      <div id="divtagdefaultwrapper" dir="ltr">
        <p>Hi John,</p>
        <p><br>
        </p>
        <p>Thanks a lot for the reply! I try mem2reg opt and also
          implement the algorithm proposed in "Efficiently Counting
          Program Events with Support for On-line Queries" to place the
          local counter smarter. If I build the executable by using -O0,
          the overhead would be 20% - 30%. But if I build the executable
          by using -O2, the overhead would be more than 3X. I feel
          instrumenting counter will disable some optimization. Any
          other suggestions I could try?</p>
      </div>
    </blockquote>
    <br>
    The overhead is probably getting worse because the baseline is
    getting better (the program before instrumentation runs faster at
    -O2 than -O0).<br>
    <br>
    I assume you're running the -O2 optimizations, then instrumenting
    the code, and then running -O2 again to optimize your
    instrumentation.  If you're not doing that, try it first.<br>
    <br>
    Otherwise, you'll need to take a look at the bitcode that you're
    generating after instrumentation and optimization to see what is not
    getting optimized and develop some ideas as to why the code is not
    being optimized.<br>
    <br>
    Regards,<br>
    <br>
    John Criswell<br>
    <blockquote
cite="mid:CY4PR06MB235748761E89726F05A8F02F81E60@CY4PR06MB2357.namprd06.prod.outlook.com"
      type="cite">
      <div id="divtagdefaultwrapper" dir="ltr">
        <p><br>
        </p>
        <p>Thanks a lot!</p>
        <p><br>
        </p>
        <p>Best,</p>
        <p><br>
        </p>
        <p>                         Linhai</p>
      </div>
      <hr tabindex="-1">
      <div id="divRplyFwdMsg" dir="ltr"><b>From:</b> John Criswell
        <a class="moz-txt-link-rfc2396E" href="mailto:jtcriswel@gmail.com"><jtcriswel@gmail.com></a><br>
        <b>Sent:</b> Saturday, January 27, 2018 3:11:50 PM<br>
        <b>To:</b> Linhai Song; <a class="moz-txt-link-abbreviated" href="mailto:Llvm-dev@lists.llvm.org">Llvm-dev@lists.llvm.org</a><br>
        <b>Subject:</b> Re: [llvm-dev] count how many basic block
        executed
        <div> </div>
      </div>
      <div>
        <div class="x_moz-cite-prefix">On 1/26/18 1:04 AM, Linhai Song
          via llvm-dev wrote:<br>
        </div>
        <blockquote type="cite">
          <div id="x_divtagdefaultwrapper" dir="ltr">
            <p>Hello everyone,</p>
            <p><br>
            </p>
            <p>I am writing a pass to instrument program and count how
              many basic block executed. What I have tried is to
              instrument a local counter inside each function, add 1 to
              the local counter inside each basic block, and save the
              counter value to a global counter. The current runtime
              overhead is around 25%. Is there any way I can try to
              lower the overhead? Like keeping the local counter inside
              a register or applying the path profiling algorithm?
              <br>
            </p>
          </div>
        </blockquote>
        <br>
        By "local counter," I assume you mean that you created an alloca
        instruction that allocates memory and that you increment the
        value in this alloca'ed memory using a load, add, and store
        instruction.  Is that correct?<br>
        <br>
        If so, have you tried using the mem2reg pass to convert the
        local counter into a SSA virtual register?  That may speed it up
        a bit.  After that, other LLVM optimizations may be able to
        remove redundant instructions or combine additions.<br>
        <br>
        If that isn't enough, then you'll probably need to make your
        instrumentation smarter.  LLVM has passes that you can use to
        locate loops; if the loop has the right structure, you can
        increment the count at the end of the loop.  Likewise, if you
        can find control equivalent basic blocks, you only need to
        increment the counter in one of them.<br>
        <br>
        Regards,<br>
        <br>
        John Criswell<br>
        <br>
        <blockquote type="cite">
          <div id="x_divtagdefaultwrapper" dir="ltr">
            <p><br>
            </p>
            <p>Thanks a lot!</p>
            <p><br>
            </p>
            <p>Best,</p>
            <p><br>
            </p>
            <p>                         Linhai</p>
          </div>
          <br>
          <fieldset class="x_mimeAttachmentHeader"></fieldset>
          <br>
          <pre>_______________________________________________
LLVM Developers mailing list
<a moz-do-not-send="true" class="x_moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a moz-do-not-send="true" class="x_moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
        </blockquote>
        <br>
        <p><br>
        </p>
        <pre class="x_moz-signature" cols="72">-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a moz-do-not-send="true" class="x_moz-txt-link-freetext" href="http://www.cs.rochester.edu/u/criswell">http://www.cs.rochester.edu/u/criswell</a></pre>
      </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>