<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Dear Rahman,<br>
      <br>
      First, if you can, try to use the mapping between BasicBlocks and
      MachineBasicBlocks after all LLVM IR optimizations have been done
      (if you are not doing that already).<br>
      <br>
      Second, there are several ideas you might want to try:<br>
      <br>
      1. The llvm.pcmarker() intrinsic seems close to what you need. 
      That said, it looks like the optimizers are free to move them
      around any way they like, but perhaps most optimizations will
      leave them within the basic block in which they were originally
      inserted.<br>
      <br>
      2. A volatile load or an llvm.prefetch instruction might be a
      workable hack.  Alternatively, you could insert an inline assembly
      call which the optimizer is unlikely to move.  The key here is to
      provide a unique argument to the each instruction you insert so
      that you can map it back to its original basic block.<br>
      <br>
      3. You could insert an llvm.var.annotation or llvm.annotation
      intrinsic into each basic block and modify the code generator to
      recognize your annotation.<br>
      <br>
      I'm not sure which of these would be the best option.  I would try
      llvm.pcmarker first to see if that works and then move on to the
      other options as needed.<br>
      <br>
      Regards,<br>
      <br>
      John Criswell<br>
      <br>
      <br>
      On 3/19/14, 12:34 PM, Rahman Lavaee wrote:<br>
    </div>
    <blockquote
cite="mid:CAERV3kMDKnvq0GL1mqPgEy78PJ=_obys2Wwt3Y54u0Uo-CZBkA@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <div dir="ltr">
        <div>Hi,<br>
          <br>
          I have written a code layout feedback directed optimization
          pass, which currently works for basic block reordering and
          function reordering. It very effectively improves the speedup
          (we could improve Python by 30%). The profiling method is
          window based context sensitive which is based on reference
          affinity (<a moz-do-not-send="true"
href="https://urresearch.rochester.edu/fileDownloadForInstitutionalItem.action?itemId=28368&itemFileId=143426">https://urresearch.rochester.edu/fileDownloadForInstitutionalItem.action?itemId=28368&itemFileId=143426</a>)<br>
          <br>
        </div>
        <div>The pass works in the IR level. Therefore, it may lose some
          information during the machine code optimization passes and
          perform imprecisely for BB reordering.<br>
          <br>
        </div>
        <div>Eventually, I would like to see the improve for an
          interprocedural basic block reordering pass. However, with the
          current system there are several challenges ahead. The most
          important is that the CFG is not preserved during several
          passes including code-gen-prepare, cfg-simplify,
          remove-unreachable-blocks, tail-merge, and tail-duplication.
          So in order to keep track of the mapping between MBBs and BBs,
          one needs to insert code in every function that modifies the
          structure of BBs and MBBs.<br>
          <br>
        </div>
        <div>The current block placement pass
          (MachineBasicBlockPlacement) works at the machine code level
          and with the new profiling structure (SampleProfileLoader), is
          effective as far as context-free profiling info is considered
          sufficient. However, the implementation of SampleProfileLoader
          itself encourages context sensitive info, which cannot
          efficiently be provided with the current profiling structure
          (<func,lineNo>).<br>
          <br>
        </div>
        <div>Is there any way to incorporate information into the
          emitted MBBs so that we can get IR basic block level info
          instead of lineNo info?<br>
          <br>
        </div>
        <div>regards<br>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a class="moz-txt-link-freetext" href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>