<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Overall, I really like the direction of the new proposal.  The
    integration with existing lazy reading mechanisms is good to see.  <br>
    <br>
    w.r.t. the function summary section, I'd suggest that this doesn't
    need to be ThinLTO specific either.  It also sounds like this isn't
    fully fleshed out yet, so what I might suggest is that we explicitly
    design this strictly as a cache of the information stored elsewhere
    in the file.  If we did so, we could freely evolve the format
    without worrying about maintaining backwards compatibility by just
    ignoring the contents of the summary section (by rebuilding it)
    unless it's an exact match.  If we wrote the interface carefully,
    this could be entirely invisible to the consumers of the file.<br>
    <br>
    w.r.t. the summary file, this feels like it has a lot in common with
    bitcode linking.  Is there infrastructure which could be shared
    here?<br>
    <br>
    Philip<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 09/01/2015 11:04 AM, Teresa Johnson
      via llvm-dev wrote:<br>
    </div>
    <blockquote
cite="mid:CAAe5K+UXQsJsTD0Tx_KVqjSL32O-fj98YqZ-OLJMW+JNvFHB=g@mail.gmail.com"
      type="cite">
      <div dir="ltr">This RFC and the patches listed below are now
        obsolete. I have written up the bitcode format discussed with
        Duncan and others, which I've copied below but the link to the
        doc with potentially better formatting is:
        <div><a moz-do-not-send="true"
            href="https://drive.google.com/file/d/0B036uwnWM6RWdnBLakxmeDdOeXc/view">https://drive.google.com/file/d/0B036uwnWM6RWdnBLakxmeDdOeXc/view</a>.
          <div><br>
          </div>
          <div>Duncan, can you take a look and make sure this properly
            describes the format changes we discussed?<br>
            <div><br>
            </div>
            <div>I just sent a patch which implements the part of the
              bitcode format changes that apply to the lazy function
              reader: <a moz-do-not-send="true"
                href="http://reviews.llvm.org/D12536">http://reviews.llvm.org/D12536</a>.
              The current patch does not contain any of the ThinLTO
              specific changes, which will be sent as a follow-on patch.</div>
            <div>
              <div><br>
              </div>
              <div>I've additionally created a site that contains links
                to all the existing ThinLTO related RFCs and patches,
                which I will try to keep updated:</div>
              <div><a moz-do-not-send="true"
                  href="https://sites.google.com/site/llvmthinlto">https://sites.google.com/site/llvmthinlto</a><br>
              </div>
              <div><br>
              </div>
              <div>Thanks,</div>
              <div>Teresa</div>
              <div><br>
              </div>
            </div>
          </div>
          <div><span
              id="docs-internal-guid-39038591-8a12-eb16-36a7-e16974a0269c">
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:3pt"><span
style="font-size:34.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">ThinLTO
                  Bitcode Format Design</span></p>
              <br>
              <h1 dir="ltr"
                style="line-height:1.38;margin-top:20pt;margin-bottom:6pt"><span
style="font-size:26.6666666666667px;font-family:Arial;color:rgb(0,0,0);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Bitcode
                  Format Changes to Support ThinLTO</span></h1>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">During
                  importing, ThinLTO needs the following information for
                  a potentially imported function:</span></p>
              <ul style="margin-top:0pt;margin-bottom:0pt">
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Summary
                      information to determine import profitability
                      (e.g. inst count, hotness, etc)</span></p>
                </li>
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Location
                      of function IR (path to module, bitcode offset)</span></p>
                </li>
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Import
                      source module unique identifier (for consistent
                      renaming of promoted locals)</span><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                        class="">
                      <br class="">
                    </span></p>
                </li>
              </ul>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">ThinLTO
                  interaction with function summary/index:</span></p>
              <ul style="margin-top:0pt;margin-bottom:0pt">
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Phase-1
                      compile (-c -fthinlto) produces summary info and
                      records function bitcode offsets</span></p>
                </li>
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Phase-2
                      link aggregates all function summary and index
                      information into combined index file, assigns
                      unique module ids, records module paths and ids in
                      combined index file</span></p>
                </li>
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Phase-3
                      parallel backend processes independently use
                      combined index for function importing decisions
                      and mechanics</span></p>
                </li>
              </ul>
              <h1 dir="ltr"
                style="line-height:1.38;margin-top:20pt;margin-bottom:6pt"><span
style="font-size:26.6666666666667px;font-family:Arial;color:rgb(0,0,0);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Lazy
                  Reader Support</span></h1>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">The
                  existing function lazy reader builds an index of
                  function blocks bitcode offsets on the fly while
                  initially walking through (and skipping) function
                  blocks. ThinLTO also needs an index of function blocks
                  but we don’t want to pay the cost of building this on
                  the fly each time a function is imported. The bitcode
                  indexes of function records will therefore be added to
                  ValueSymbolTable (VST) function records, and the
                  existing lazy function reader will be changed to use
                  this index rather than building it on the fly. Then
                  ThinLTO importing can easily leverage the same
                  infrastructure as lazy function reading.</span></p>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Specifically,
                  augment the existing lazy reader with the function
                  bitcode index:</span></p>
              <ul style="margin-top:0pt;margin-bottom:0pt">
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Build
                      lazy reader’s DeferredFunctionInfo map (maps from
                      Function* to function block bitcode offset) from
                      index rather than by parsing the function blocks,
                      use during currently lazy reading as well as
                      ThinLTO importing.</span></p>
                </li>
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Means
                      that bitcode index is needed before the function
                      blocks in the bitcode (phase-ordering issue
                      discussed below)</span></p>
                </li>
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Include
                      bitcode offset with ValueSymbolTable (VST)
                      function records</span></p>
                </li>
              </ul>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Function
                  offset needed in bitcode before function blocks (in
                  order to use for lazy function reading). However, we
                  don’t have function offsets when this part of bitcode
                  being encoded/written. This requires some kind of
                  backpatching. There are several approaches:</span></p>
              <ol style="margin-top:0pt;margin-bottom:0pt">
                <li dir="ltr"
style="list-style-type:decimal;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Backpatching
                      a bitcode offset precludes encoding it as a VBR,
                      since we don’t know how many chunks are required.
                      This means any backpatched bitcode offsets must be
                      64-bit fixed. Doing this for every function VST
                      record can result in high overhead.</span></p>
                </li>
                <li dir="ltr"
style="list-style-type:decimal;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Could
                      encode the function blocks twice, once before the
                      VST in a temp stream to get each bitcode offset
                      into the stream of function blocks, then again
                      into the final location in the real output stream
                      (or copy over the pre-encoded function blocks at
                      the final location). This has time overhead, but
                      allows VBRs to be used for encoding the offsets
                      (which are offsets from the start of the function
                      blocks, not from the start of the file).</span></p>
                </li>
                <li dir="ltr"
style="list-style-type:decimal;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Encode
                      the VST after the function blocks, but place a new
                      forward declaration VST record at the point where
                      we previously had the VST (before the function
                      blocks). Only the one forward decl record needs to
                      be backpatched with a 64-bit fixed offset (can
                      likely get by with a 32-bit word offset as the
                      real VST block should be word aligned). The reader
                      needs to be taught to jump to and parse the real
                      VST when seeing the forward decl VST, and to jump
                      back after reading it.</span></p>
                </li>
              </ol>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Proposal
                  #3 above (forward decl VST) is the approach that was
                  agreed to and is being implemented. The first patch
                  will implement this new forward decl VST, add the
                  bitcode offsets to the real VST, and change the lazy
                  reader to use the bitcode offsets from the VST instead
                  of building up the DeferredFunctionInfo on the fly.</span></p>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">The
                  new VST bitcode (used by the lazy function reader even
                  without ThinLTO) are shown below:</span></p>
              <br>
              <p dir="ltr"
                style="line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">A.c:</span></p>
              <p dir="ltr"
                style="line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                   A1() {...}</span></p>
              <p dir="ltr"
                style="line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                   static A2() {...} </span></p>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:16pt"><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">BitOffset</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                   0      <MODULE_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                   </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><span
                    class="" style="white-space:pre"> </span></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                      ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            // MODULE_CODE_VSTOFFSET: [wordoffset(32-bit
                  fixed)]</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <VSTOFFSET </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">20</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">/>
                    </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">//
                  20*32 = 640</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">320</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                         <FUNCTION_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </FUNCTION_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">480</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                         <FUNCTION_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </FUNCTION_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">640</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                         <VALUE_SYMTAB></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">//
                  VST_FNENTRY: [valueid, funcoffset(VBR), namechar x N]</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <FNENTRY 0, </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">10</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">,
                  “A1”/>  </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">//
                  10*32 = 320</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <FNENTRY 1, </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">15</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">,
                  “A2”/>  </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">//
                  15*32 = 480</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </VALUE_SYMTAB></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                          </MODULE_BLOCK></span></p>
              <br>
              <h1 dir="ltr"
                style="line-height:1.38;margin-top:20pt;margin-bottom:6pt"><span
style="font-size:26.6666666666667px;font-family:Arial;color:rgb(0,0,0);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">ThinLTO-Specific
                  Bitcode Changes</span></h1>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">In
                  addition to the VST changes above, for ThinLTO
                  importing additional bitcode blocks are needed. These
                  will initially only be generated under -fthinlto,
                  unless other use cases are identified. The bitcode
                  changes are summarized below.</span></p>
              <h3 dir="ltr"
                style="line-height:1.38;margin-top:16pt;margin-bottom:4pt"><span
style="font-size:18.6666666666667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Per-Module
                  Bitcode</span></h3>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">This
                  pertains to bitcode generated by the phase-1 compile
                  step (-fthinlto -c). It includes one new block that
                  holds summary information for the functions in that
                  module, summarized below:</span></p>
              <ul style="margin-top:0pt;margin-bottom:0pt">
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Function
                      summary info encoded in new
                      FUNCTION_SUMMARY_BLOCK.</span></p>
                </li>
                <ul style="margin-top:0pt;margin-bottom:0pt">
                  <li dir="ltr"
style="list-style-type:circle;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                    <p dir="ltr"
                      style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">One
                        record per function with summary data
                        containing: VST value id, islocal flag for
                        phase-2 renaming decisions, summary info for
                        importing decisions (e.g. instruction count).
                        The summary information will evolve over time.</span></p>
                  </li>
                </ul>
              </ul>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Note
                  that the summary block is only used to create the
                  combined index in phase 2. It is not used when
                  compiling that module through the phase 3 backend. The
                  earlier example is expanded with the function summary
                  block below:</span></p>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:16pt"><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">BitOffset</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                   0     <MODULE_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                   </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><span
                    class="" style="white-space:pre"> </span></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                      ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            // MODULE_CODE_VSTOFFSET: [wordoffset(32-bit
                  fixed)]</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <VSTOFFSET </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">20</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">/>
                    </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">//
                  20*32 = 640</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">320</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                         <FUNCTION_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </FUNCTION_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">480</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                         <FUNCTION_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </FUNCTION_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">640</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                         <VALUE_SYMTAB></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               // VST_FNENTRY: [valueid,
                  funcoffset(VBR), namechar x N]</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <FNENTRY 0, </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">10</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">,
                  “A1”/>  </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">//
                  10*32 = 320</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <FNENTRY 1, </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">15</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">,
                  “A2”/>  </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">//
                  15*32 = 480</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </VALUE_SYMTAB></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <FUNCTION_SUMMARY_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               // FS_ENTRY: [valueid, islocal,
                  instcount]</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                    </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">           <ENTRY
                  0, 0, 10/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,153,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                    </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">           <ENTRY
                  1, 1, 15/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </FUNCTION_SUMMARY_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                          </MODULE_BLOCK></span></p>
              <h3 dir="ltr"
                style="line-height:1.38;margin-top:16pt;margin-bottom:4pt"><span
style="font-size:18.6666666666667px;font-family:Arial;color:rgb(67,67,67);font-weight:400;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Combined
                  Index File Bitcode</span></h3>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">This
                  pertains to the combined index file generated by the
                  phase-2 link step, which is encoded as bitcode. This
                  file contains a single MODULE_BLOCK with only 3
                  subblocks: the VST, a module path strtab, and a
                  function summary block. Also note that the VST only
                  contains entries for functions, and the record type
                  used in the combined index is changed to include the
                  VBR-encoded bitcode offset of the corresponding
                  summary record in the summary block. This is to allow
                  lazy reading of summary records from the combined
                  index file during importing. That replaces the bitcode
                  offset of the function summary block which is not
                  needed in the combined index (it is obtained from the
                  importee module’s VST when importing from that
                  module).</span></p>
              <ul style="margin-top:0pt;margin-bottom:0pt">
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Module
                      paths encoded in new MODULE_STRTAB_BLOCK.</span></p>
                </li>
                <ul style="margin-top:0pt;margin-bottom:0pt">
                  <li dir="ltr"
style="list-style-type:circle;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                    <p dir="ltr"
                      style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">One
                        record per module containing: unique module id
                        assigned during phase-2 link and module path
                        string</span></p>
                  </li>
                </ul>
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Function
                      summary info encoded in new
                      FUNCTION_SUMMARY_BLOCK.</span></p>
                </li>
                <ul style="margin-top:0pt;margin-bottom:0pt">
                  <li dir="ltr"
style="list-style-type:circle;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                    <p dir="ltr"
                      style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">One
                        record per function containing: VST value id,
                        module id, summary info for importing decisions</span></p>
                  </li>
                </ul>
                <li dir="ltr"
style="list-style-type:disc;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                  <p dir="ltr"
                    style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">VST:</span></p>
                </li>
                <ul style="margin-top:0pt;margin-bottom:0pt">
                  <li dir="ltr"
style="list-style-type:circle;font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;background-color:transparent">
                    <p dir="ltr"
                      style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">One
                        record per function containing: value id,
                        function summary offset, function name string</span></p>
                  </li>
                </ul>
              </ul>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Note
                  that a VST forward decl record is not needed in the
                  combined index, as the VST can be connected to the
                  summary records later via the value ids (eager parsing
                  of summary) or via the summary record offsets (lazy
                  parsing of summary). When reading the summary eagerly,
                  we just need to build a temporary map from value id to
                  summary structure.</span></p>
              <br>
              <p dir="ltr"
                style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">BitOffset</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                   0     <MODULE_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <MODULE_STRTAB_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               // MST_ENTRY: [modid, namechar x N]</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <ENTRY 1, “A.o”/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <ENTRY 2, “B.o”/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </MODULE_STRTAB_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <FUNCTION_SUMMARY_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               // FS_ENTRY: [valueid, modid, islocal,
                  instcount]</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">500</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <ENTRY 0, 2, 0, 100/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">550</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <ENTRY 1, 2, 0, 20/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">600</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <ENTRY 2, 1, 0, 10/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">650</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <ENTRY 3, 1, 1, 15/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </FUNCTION_SUMMARY_BLOCK></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            <VALUE_SYMTAB></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               // VST_FNENTRY: [valueid, funcsumoffset,
                  namechar x N]</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <FNENTRY 2, </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">600</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">,
                  “A1”/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <FNENTRY 3, </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(255,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">650</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">,
                  “A2”/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <FNENTRY 0, </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,0,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">500</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">,
                  “B2”/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               <FNENTRY 1, </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(0,255,255);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent">550</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">,
                  “B2”/></span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                               ...</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                            </VALUE_SYMTAB</span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br
                    class="">
                </span><span
                  style="font-size:13.3333333333333px;font-family:'Courier
New';color:rgb(89,89,89);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">
                         </MODULE_BLOCK></span></p>
              <br>
              <span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Note
                that the value ids are reassigned here to be unique as
                they are no longer correlated with uses outside of the
                function summary records. They are not strictly
                necessary for correlating VST entries with function
                summary entries, but enable some sanity checking.</span></span><br>
          </div>
          <div><span><span
style="font-size:14.6666666666667px;font-family:Arial;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><br>
              </span></span></div>
          <div><br>
          </div>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Thu, Aug 13, 2015 at 7:49 AM, Teresa
          Johnson <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div dir="ltr">Hi all,
              <div><br>
              </div>
              <div>I updated the patches to remove the native object
                wrapper format. As suggested we will work on getting the
                ThinLTO framework in place using bitcode first, and then
                work on adding the native object support. As noted in
                this RFC and in the associated patch D11722, for now I
                have empty ThinLTO blocks with no records, since I
                wanted to get feedback on the overall block design
                first. The RFC discusses this in more detail, but one of
                the main ideas is to leverage the existing value symbol
                table block in the module to avoid duplicating function
                symbol strings, e.g.</div>
              <div><br>
              </div>
              <div>I also wanted to call out another important design
                consideration here, since it is buried in the other RFC
                (ThinLTO File API and Data Structures), and has a big
                influence on the way I have designed the ThinLTO index
                and object file data structures. The ThinLTO index is
                read in compile/link steps when the rest of the Module
                IR is not, and vice versa. That is why I have separate
                data structures for reading/holding the ThinLTO index.
                The ThinLTO index in the module (generated during the
                initial -c compile step) is needed by other modules
                during the later parallel backend compile phase, and
                therefore it is only used in the linker plugin step to
                create the combined index file. The rest of the Module
                IR is not read during this step (eventually we may look
                at adding heavier weight whole program analysis under an
                option, but by default the Module, Functions, etc are
                not read or materialized). When the normal Module IR is
                read during the parallel backend compile step, the
                ThinLTO information in its own module is not read, as
                the importing pass will read the combined (global) index
                file instead. This is because a module is only
                interested in the ThinLTO index from other modules that
                it is considering importing from.</div>
              <div><br>
              </div>
              <div>Right now I have 5 outstanding patches to put in the
                basic infrastructure/options for reading/writing the
                ThinLTO function indices:</div>
              <div><br>
              </div>
              <div><span style="color:rgb(75,77,81);font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap">D11721</span><span
                  style="color:rgb(0,0,0);font-family:'Segoe UI','Segoe
                  UI Web Regular','Segoe UI Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"> </span><a
                  moz-do-not-send="true"
                  href="http://reviews.llvm.org/D11721" title="[ThinLTO]
                  Data structures for holding ThinLTO function
                  index/summary"
                  style="text-decoration:none;color:rgb(24,85,157);display:inline;font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"
                  target="_blank">[ThinLTO] Data structures for holding
                  ThinLTO function index/summary</a><br>
              </div>
              <div><span style="color:rgb(75,77,81);font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap">D11722</span><span
                  style="color:rgb(0,0,0);font-family:'Segoe UI','Segoe
                  UI Web Regular','Segoe UI Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"> </span><a
                  moz-do-not-send="true"
                  href="http://reviews.llvm.org/D11722" title="[ThinLTO]
                  Bitcode reading/writing support for ThinLTO function
                  summary/index"
                  style="text-decoration:none;color:rgb(24,85,157);display:inline;font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"
                  target="_blank">[ThinLTO] Bitcode reading/writing
                  support for ThinLTO function summary/index</a><br>
              </div>
              <div><span style="color:rgb(75,77,81);font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap">D11723</span><span
                  style="color:rgb(0,0,0);font-family:'Segoe UI','Segoe
                  UI Web Regular','Segoe UI Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"> </span><a
                  moz-do-not-send="true"
                  href="http://reviews.llvm.org/D11723" title="[ThinLTO]
                  ThinLTO object file interfaces"
                  style="color:rgb(24,85,157);display:inline;font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"
                  target="_blank">[ThinLTO] ThinLTO object file
                  interfaces</a><br>
              </div>
              <div><span style="color:rgb(75,77,81);font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap">D11907</span><span
                  style="color:rgb(0,0,0);font-family:'Segoe UI','Segoe
                  UI Web Regular','Segoe UI Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"> </span><a
                  moz-do-not-send="true"
                  href="http://reviews.llvm.org/D11907" title="LLVM
                  support for -fthinlto option."
                  style="text-decoration:none;color:rgb(24,85,157);display:inline;font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"
                  target="_blank">LLVM support for -fthinlto option.</a><br>
              </div>
              <div><span style="color:rgb(75,77,81);font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap">D11908</span><span
                  style="color:rgb(0,0,0);font-family:'Segoe UI','Segoe
                  UI Web Regular','Segoe UI Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"> </span><a
                  moz-do-not-send="true"
                  href="http://reviews.llvm.org/D11908" title="Clang
                  support for -fthinlto."
                  style="text-decoration:none;color:rgb(24,85,157);display:inline;font-family:'Segoe
                  UI','Segoe UI Web Regular','Segoe UI
                  Symbol','Helvetica
Neue',Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:16.0029983520508px;white-space:nowrap"
                  target="_blank">Clang support for -fthinlto.</a><br>
              </div>
              <div><br>
              </div>
              <div>Once the basic options support, data structs, and
                bitcode support goes in I can send patches for
                generating/emitting the function index and the combined
                function index (off by defaut, guarded by the -fthinlto
                option), and subsequently send patches for the function
                importing during the backend compile step. I've tried to
                break down the above infrastructure into small pieces
                for review, and plan to implement the rest via
                incremental patches.</div>
              <div><br>
              </div>
              <div>Hope this clarifies the approach I'm taking! Looking
                forward to additional feedback on the approach and the
                patches.</div>
              <div><br>
              </div>
              <div>Thanks,</div>
              <div>Teresa</div>
            </div>
            <div class="HOEnZb">
              <div class="h5">
                <div class="gmail_extra"><br>
                  <div class="gmail_quote">On Wed, Aug 12, 2015 at 2:09
                    PM, Teresa Johnson <span dir="ltr"><<a
                        moz-do-not-send="true"
                        href="mailto:tejohnson@google.com"
                        target="_blank">tejohnson@google.com</a>></span>
                    wrote:<br>
                    <blockquote class="gmail_quote" style="margin:0 0 0
                      .8ex;border-left:1px #ccc solid;padding-left:1ex">
                      <div dir="ltr">Saw that, thanks! Responding now.
                        Will update the patch with some changes and the
                        wrapper stuff removed later today or very early
                        tomorrow.<span><font color="#888888">
                            <div>Teresa</div>
                          </font></span></div>
                      <div>
                        <div>
                          <div class="gmail_extra"><br>
                            <div class="gmail_quote">On Wed, Aug 12,
                              2015 at 2:07 PM, Philip Reames <span
                                dir="ltr"><<a moz-do-not-send="true"
href="mailto:listmail@philipreames.com" target="_blank">listmail@philipreames.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">
                                  <div>I went ahead and replied to two
                                    of the review threads.  I only
                                    considered the parts which would be
                                    left without the native wrapped
                                    bitcode support.  <br>
                                    <span><font color="#888888"> <br>
                                        Philip</font></span>
                                    <div>
                                      <div><br>
                                        <br>
                                        On 08/12/2015 01:24 PM, Teresa
                                        Johnson wrote:<br>
                                      </div>
                                    </div>
                                  </div>
                                  <div>
                                    <div>
                                      <blockquote type="cite">
                                        <div dir="ltr">I can remove the
                                          native wrapper portions of the
                                          associated patch and add that
                                          later. Most of the support as
                                          I mentioned is for the bitcode
                                          handling anyway, but I wanted
                                          to include a skeleton of the
                                          native wrapper part. For the
                                          RFC, I wanted to show the end
                                          goal including how the native
                                          wrapper support would look (it
                                          in fact mostly leverages the
                                          same bitcode encoding, so
                                          there isn't a lot of
                                          difference, and hence there
                                          isn't a whole lot of extra
                                          code needed to support that).
                                          The bulk of the RFC deals with
                                          the bitcode format, and I
                                          would love some feedback on
                                          that.
                                          <div><br>
                                          </div>
                                          <div>Thanks,</div>
                                          <div>Teresa<br>
                                            <div class="gmail_extra"><br>
                                              <div class="gmail_quote">On
                                                Wed, Aug 12, 2015 at
                                                11:50 AM, Philip Reames
                                                <span dir="ltr"><<a
                                                    moz-do-not-send="true"
href="mailto:listmail@philipreames.com" target="_blank">listmail@philipreames.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">
                                                    <div>Alex already
                                                      made what I
                                                      consider to be the
                                                      most relevant
                                                      point.  I would
                                                      suggest removing
                                                      the unwanted
                                                      functionality and
                                                      asking again. 
                                                      From my
                                                      perspective,
                                                      native wrapped
                                                      bitcode is only
                                                      interesting (and
                                                      thus worth
                                                      reviewing and/or
                                                      talking about)
                                                      once the native
                                                      bitcode version is
                                                      in tree and
                                                      functional. 
                                                      Frankly, I
                                                      consider the
                                                      native wrapped
                                                      bitcode to be an
                                                      entirely
                                                      orthogonal
                                                      proposal that
                                                      shouldn't be tied
                                                      to ThinLTO at all.
                                                        <br>
                                                      <br>
                                                      Fair warning, I'm
                                                      not going to be
                                                      particularly
                                                      involved either
                                                      way.  This is far
                                                      enough from my own
                                                      immediate
                                                      interests that I
                                                      can't spare the
                                                      cycles.  I would
                                                      suggest that you
                                                      collaborate
                                                      closely with the
                                                      Sony and Apple
                                                      folks who are
                                                      already *using*
                                                      LTO to find a
                                                      proposal they're
                                                      happy with.  Until
                                                      you do that, you
                                                      are unlikely to
                                                      make much
                                                      progress.  <br>
                                                      <span><font
                                                          color="#888888">
                                                          <br>
                                                          Philip</font></span>
                                                      <div>
                                                        <div><br>
                                                          <br>
                                                          On 08/12/2015
                                                          09:13 AM,
                                                          Teresa Johnson
                                                          wrote:<br>
                                                        </div>
                                                      </div>
                                                    </div>
                                                    <div>
                                                      <div>
                                                        <blockquote
                                                          type="cite">
                                                          <div dir="ltr">
                                                          <div>Ping.
                                                          Explicitly
                                                          adding a few
                                                          more people
                                                          who commented
                                                          on the earlier
                                                          (high-level)
                                                          ThinLTO RFC. I
                                                          removed the
                                                          body of the
                                                          RFC here since
                                                          the original
                                                          was large and
                                                          had trouble
                                                          getting
                                                          through the
                                                          mailer. I also
                                                          updated the
                                                          patch
                                                          mentioned
                                                          below so that
                                                          it was emailed
                                                          to
                                                          llvm-commits
                                                          properly.<br>
                                                          </div>
                                                          <div><br>
                                                          </div>
                                                          <div>Thanks,</div>
                                                          <div>Teresa</div>
                                                          <div
                                                          class="gmail_extra"><br>
                                                          <div
                                                          class="gmail_quote">On
                                                          Mon, Aug 3,
                                                          2015 at 11:59
                                                          AM, Teresa
                                                          Johnson <span
                                                          dir="ltr"><<a
moz-do-not-send="true" href="mailto:tejohnson@google.com"
                                                          target="_blank">tejohnson@google.com</a>></span>
                                                          wrote:<br>
                                                          <blockquote
                                                          class="gmail_quote"
                                                          style="margin:0
                                                          0 0
                                                          .8ex;border-left:1px
                                                          #ccc
                                                          solid;padding-left:1ex">
                                                          <div dir="ltr">Hi
                                                          Alex,
                                                          <div><br>
                                                          </div>
                                                          <div>After
                                                          outlining some
                                                          of the
                                                          rationale for
                                                          using
                                                          native-wrapped,
                                                          there were a
                                                          couple of
                                                          responses that
                                                          indicated
                                                          native-wrapped
                                                          support was
                                                          reasonable,
                                                          but they
                                                          preferred to
                                                          see
                                                          bitcode-only
                                                          first (Phillip
                                                          and Rafael).
                                                          This is
                                                          essentially
                                                          what this
                                                          proposal and
                                                          the patches do
                                                          - I've
                                                          implemented
                                                          some of the
                                                          basic support
                                                          for looking
                                                          for and
                                                          parsing the
                                                          native-wrapped
                                                          sections, but
                                                          the
                                                          bitcode-only
                                                          reading/writing
                                                          support is
                                                          more complete.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>In fact,
                                                          as described
                                                          in this RFC, I
                                                          designed the
                                                          native-wrapped
                                                          format to
                                                          utilize the
                                                          same bitcode
                                                          encoding for
                                                          most of the
                                                          ThinLTO
                                                          information,
                                                          so it uses
                                                          most of the
                                                          same
                                                          underlying
                                                          bitcode
                                                          interfaces
                                                          anyway. The
                                                          additional
                                                          support
                                                          required for
                                                          native-wrapped
                                                          is not
                                                          tremendous,
                                                          and is similar
                                                          to existing
                                                          support in the
                                                          LLVM tree for
                                                          reading
                                                          native-wrapped
                                                          bitcode.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>We
                                                          believe that
                                                          there will be
                                                          clang/llvm
                                                          users who will
                                                          find
                                                          native-wrapped
                                                          ThinLTO easier
                                                          to use for the
                                                          same reasons
                                                          (e.g.
                                                          compatibility
                                                          with existing
                                                          native
                                                          toolchains),
                                                          so I don't
                                                          expect this to
                                                          be Google
                                                          specific.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>Thanks,</div>
                                                          <div>Teresa</div>
                                                          </div>
                                                          <div>
                                                          <div>
                                                          <div
                                                          class="gmail_extra"><br>
                                                          <div
                                                          class="gmail_quote">On
                                                          Mon, Aug 3,
                                                          2015 at 12:26
                                                          PM, Alex
                                                          Rosenberg <span
                                                          dir="ltr"><<a
moz-do-not-send="true" href="mailto:alexr@leftfield.org" target="_blank">alexr@leftfield.org</a>></span>
                                                          wrote:<br>
                                                          <blockquote
                                                          class="gmail_quote"
                                                          style="margin:0
                                                          0 0
                                                          .8ex;border-left:1px
                                                          #ccc
                                                          solid;padding-left:1ex">
                                                          <div
                                                          dir="auto">
                                                          <div>I think
                                                          I've read all
                                                          the feedback
                                                          posted
                                                          regarding your
                                                          May proposal.
                                                          I have yet to
                                                          see a single
                                                          response that
                                                          wants native
                                                          object wrapped
                                                          bitcode.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>If the
                                                          only use for
                                                          native object
                                                          wrapped
                                                          bitcode is for
                                                          your project
                                                          at Google,
                                                          then it
                                                          probably
                                                          shouldn't go
                                                          into the tree
                                                          against all of
                                                          these
                                                          objections.<br>
                                                          <br>
                                                          Alex</div>
                                                          <div>
                                                          <div><br>
                                                          On Aug 3,
                                                          2015, at 9:19
                                                          AM, Teresa
                                                          Johnson <<a
moz-do-not-send="true" href="mailto:tejohnson@google.com"
                                                          target="_blank">tejohnson@google.com</a>>


                                                          wrote:<br>
                                                          <br>
                                                          </div>
                                                          <blockquote
                                                          type="cite">
                                                          <div dir="ltr">As

                                                          discussed in
                                                          the high-level
                                                          ThinLTO RFC <span
style="font-size:12.8000001907349px">(</span><a moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-May/086211.html"
                                                          style="font-size:12.8000001907349px"
target="_blank">http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-May/086211.html</a><span
style="font-size:12.8000001907349px">), we would like to add support for
                                                          native object
                                                          wrapped
                                                          bitcode and
                                                          ThinLTO
                                                          information.
                                                          Based on
                                                          comments on
                                                          the mailing
                                                          list, I am
                                                          adding support
                                                          for ThinLTO in
                                                          both normal
                                                          bitcode files,
                                                          as well as
                                                          native-object
                                                          wrapped
                                                          bitcode.</span>
                                                          <div><span
                                                          style="font-size:12.8000001907349px"><br>
                                                          </span></div>
                                                          <div><span
                                                          style="font-size:12.8000001907349px">The


                                                          following RFC
                                                          describes the
                                                          planned file
                                                          format of
                                                          ThinLTO
                                                          information
                                                          both in the
                                                          bitcode-only
                                                          and native
                                                          object wrapped
                                                          cases. It
                                                          doesn't yet
                                                          define the
                                                          exact record
                                                          format, as I
                                                          would like
                                                          feedback on
                                                          the overall
                                                          block design
                                                          first.</span></div>
                                                          <div><span
                                                          style="font-size:12.8000001907349px"><br>
                                                          </span></div>
                                                          <div><span
                                                          style="font-size:12.8000001907349px">I've


                                                          also
                                                          implemented
                                                          the support
                                                          for reading
                                                          and writing
                                                          the bitcode
                                                          blocks in the
                                                          following
                                                          patch:</span></div>
                                                          <div><a
                                                          moz-do-not-send="true"
href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D11722&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=oUy_PB_mSfRgDO7H7bZOR04gv_DMzX5rPO_lv4PHt60&s=WVxrKkHnjKr75fCQ-UkGke8dk6KpZcFCnLWVrJ3G188&e="
rel="noreferrer" style="font-size:12.8000001907349px" target="_blank">http://reviews.llvm.org/D11722</a></div>
                                                          <div><br>
                                                          </div>
                                                          <div>The
                                                          ThinLTO data
                                                          structures and
                                                          the file APIs
                                                          are described
                                                          in a separate
                                                          RFC I will be
                                                          sending
                                                          simultaneously,
                                                          with pointers
                                                          to the patches
                                                          implementing
                                                          them.</div>
                                                          <div><br>
                                                          </div>
                                                          <div>Looking
                                                          forward to
                                                          your feedback.
                                                          Thanks!</div>
                                                          <div>Teresa</div>
                                                          <div><br>
                                                          </div>
                                                          <div><span>
                                                          <p dir="ltr"
style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:center"><br>
                                                          </p>
                                                          </span></div>
                                                          </div>
                                                          </blockquote>
                                                          </div>
                                                          </div>
                                                          </blockquote>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </blockquote>
                                                          </div>
                                                          <br
                                                          clear="all">
                                                          <div><br>
                                                          </div>
                                                          -- <br>
                                                          <div><span
                                                          style="font-family:Times;font-size:medium">
                                                          <table
                                                          cellpadding="0"
cellspacing="0">
                                                          <tbody>
                                                          <tr
                                                          style="color:rgb(85,85,85);font-family:sans-serif;font-size:small">
                                                          <td
style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px"
nowrap="nowrap">Teresa Johnson |</td>
                                                          <td
style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"
nowrap="nowrap"> Software Engineer |</td>
                                                          <td
style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"
nowrap="nowrap"> <a moz-do-not-send="true"
                                                          href="mailto:tejohnson@google.com"
target="_blank">tejohnson@google.com</a> |</td>
                                                          <td
style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"
nowrap="nowrap"> <a moz-do-not-send="true" href="tel:408-460-2413"
                                                          value="+14084602413"
target="_blank">408-460-2413</a></td>
                                                          </tr>
                                                          </tbody>
                                                          </table>
                                                          </span></div>
                                                          </div>
                                                          </div>
                                                        </blockquote>
                                                        <br>
                                                      </div>
                                                    </div>
                                                  </div>
                                                </blockquote>
                                              </div>
                                              <br>
                                              <br clear="all">
                                              <div><br>
                                              </div>
                                              -- <br>
                                              <div><span
                                                  style="font-family:Times;font-size:medium">
                                                  <table cellpadding="0"
                                                    cellspacing="0">
                                                    <tbody>
                                                      <tr
                                                        style="color:rgb(85,85,85);font-family:sans-serif;font-size:small">
                                                        <td
style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px"
nowrap="nowrap">Teresa Johnson |</td>
                                                        <td
style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"
nowrap="nowrap"> Software Engineer |</td>
                                                        <td
style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"
nowrap="nowrap"> <a moz-do-not-send="true"
                                                          href="mailto:tejohnson@google.com"
target="_blank">tejohnson@google.com</a> |</td>
                                                        <td
style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"
nowrap="nowrap"> <a moz-do-not-send="true" href="tel:408-460-2413"
                                                          value="+14084602413"
target="_blank">408-460-2413</a></td>
                                                      </tr>
                                                    </tbody>
                                                  </table>
                                                </span></div>
                                            </div>
                                          </div>
                                        </div>
                                      </blockquote>
                                      <br>
                                    </div>
                                  </div>
                                </div>
                              </blockquote>
                            </div>
                            <br>
                            <br clear="all">
                            <div><br>
                            </div>
                            -- <br>
                            <div><span
                                style="font-family:Times;font-size:medium">
                                <table cellpadding="0" cellspacing="0">
                                  <tbody>
                                    <tr
                                      style="color:rgb(85,85,85);font-family:sans-serif;font-size:small">
                                      <td
style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px"
                                        nowrap="nowrap">Teresa Johnson |</td>
                                      <td
style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"
                                        nowrap="nowrap"> Software
                                        Engineer |</td>
                                      <td
style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"
                                        nowrap="nowrap"> <a
                                          moz-do-not-send="true"
                                          href="mailto:tejohnson@google.com"
                                          target="_blank">tejohnson@google.com</a> |</td>
                                      <td
style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"
                                        nowrap="nowrap"> <a
                                          moz-do-not-send="true"
                                          href="tel:408-460-2413"
                                          value="+14084602413"
                                          target="_blank">408-460-2413</a></td>
                                    </tr>
                                  </tbody>
                                </table>
                              </span></div>
                          </div>
                        </div>
                      </div>
                    </blockquote>
                  </div>
                  <br>
                  <br clear="all">
                  <div><br>
                  </div>
                  -- <br>
                  <div><span style="font-family:Times;font-size:medium">
                      <table cellpadding="0" cellspacing="0">
                        <tbody>
                          <tr
                            style="color:rgb(85,85,85);font-family:sans-serif;font-size:small">
                            <td
style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px"
                              nowrap="nowrap">Teresa Johnson |</td>
                            <td
style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"
                              nowrap="nowrap"> Software Engineer |</td>
                            <td
style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"
                              nowrap="nowrap"> <a moz-do-not-send="true"
                                href="mailto:tejohnson@google.com"
                                target="_blank">tejohnson@google.com</a> |</td>
                            <td
style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"
                              nowrap="nowrap"> <a moz-do-not-send="true"
                                href="tel:408-460-2413"
                                value="+14084602413" target="_blank">408-460-2413</a></td>
                          </tr>
                        </tbody>
                      </table>
                    </span></div>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        <div class="gmail_signature"><span
            style="font-family:Times;font-size:medium">
            <table cellpadding="0" cellspacing="0">
              <tbody>
                <tr
                  style="color:rgb(85,85,85);font-family:sans-serif;font-size:small">
                  <td
style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px"
                    nowrap="nowrap">Teresa Johnson |</td>
                  <td
style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"
                    nowrap="nowrap"> Software Engineer |</td>
                  <td
style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"
                    nowrap="nowrap"> <a moz-do-not-send="true"
                      href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td>
                  <td
style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"
                    nowrap="nowrap"> 408-460-2413</td>
                </tr>
              </tbody>
            </table>
          </span></div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="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>
  </body>
</html>