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