<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.gmailmsg
        {mso-style-name:gmail_msg;}
span.m-3252641158768971784m-7912342312953494768gmail-
        {mso-style-name:m_-3252641158768971784m_-7912342312953494768gmail-;}
span.m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-
        {mso-style-name:m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-;}
span.m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-m-810890770938607349gmail-m-1572076769796879342m-1389974181502797381gmail-
        {mso-style-name:m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381gmail-;}
span.m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-m-810890770938607349gmail-m-1572076769796879342hoenzb
        {mso-style-name:m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342hoenzb;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle24
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">In many cases, the line-table fussing to improve autoFDO/sample-PGO would also likely help the debugging experience for optimized code, certainly in cases where
 line attribution is inherently ambiguous.  In those cases, I have no problem with Just Doing It.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Something likely to pad the line table to benefit profiling without similarly benefiting debugging… that's probably worth inventing a –gprofile or some such. 
 I suspect Dehao's more elaborate ideas about discriminators fall into that category (although IIRC discriminators were invented mainly to benefit profiling in the first place, so maybe having discriminators at all would be something to put under a –gprofile
 kind of option).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">--paulr<o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></a></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> David Blaikie [mailto:dblaikie@gmail.com]
<br>
<b>Sent:</b> Monday, November 21, 2016 3:04 PM<br>
<b>To:</b> Dehao Chen; Hal Finkel<br>
<b>Cc:</b> llvm-dev; Xinliang David Li; Adrian Prantl; Robinson, Paul; Diego Novillo<br>
<b>Subject:</b> Re: [llvm-dev] (RFC) Encoding code duplication factor in discriminator<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">(+Adrian & Paul since they're mentioned here, +Diego since he might have opinions as he implemented the discriminator stuff originally)<br>
<br>
my 2c (that was mentioned here & that I idly discussed with Diego a few weeks ago in no great detail) is also that maybe a separate mode for PGO might be what we want/need, because it's not what sanitizers or simple backtrace tools need & we're slowly growing
 the size of debug info for profiling needs that we don't need elsewhere. (might be worth doing a full measurement here as we add new features - what's the growth of all hte profile related features (from (including) discriminators up) and see if it's still
 a reasonable thing to keep with the rest of the debug info use cases or needs a separate flag)<br>
<br>
But I'm not too fussed/don't feel terribly strongly, really.<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal">On Fri, Nov 4, 2016 at 3:44 PM Dehao Chen via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">Discussed with Hal, Adrain and Paul offline at the llvm dev meeting today.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">* trip count is not enough for vectorization, there is runtime check that might go false, which can be reflected in profile that we may want to preserve.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">* simply recording these context-profile may cause problems to iterative-sample-pgo. i.e. when you find a loop's vectorized version no executed (due to runtime check), you will choose not to vectorize (which is optimal). But when you collect
 profile from this binary (optimized with sample-pgo, not vectorize the loop), as the loop is not vectorized, we do not have the context to demonstrate "the loop should *not* vectorize" any more. So it will end up being vectorized again, introducing perf instability.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">To summarize, more context info may improve performance for one iteration, but the perf improvement may not be stable across iterations. If we aim at performance stability (which is one of the major goals of this RFC), profile should only
 reflect the attribute of source, not compiler transformations.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">But there are sample pgo users who does *not* care about iterative sample pgo performance, for them, as Hal suggested, we should invent a more extensible way to preserve profile context. Apparently discriminator is not an extensible choice.
 So how about we just use discriminator to store the attribute of the source (i.e trip count), and later design new extensible ways in dwarf to represent more context info?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Adrian also suggested that we may need to consider have a flag or a separate debugging mode to indicate if we want to emit discriminator to prevent debug_line size increase.<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Dehao<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Tue, Nov 1, 2016 at 9:34 PM, Dehao Chen <span class="gmailmsg">
<<a href="mailto:dehao@google.com" target="_blank">dehao@google.com</a>></span> wrote:<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">On Tue, Nov 1, 2016 at 7:35 PM, Hal Finkel <span class="gmailmsg">
<<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p> </o:p></span></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">
<hr size="3" width="100%" align="center" id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582zwchr">
</span></div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span class="m-3252641158768971784m-7912342312953494768gmail-"><b><span style="font-family:"Helvetica","sans-serif";color:black">From:
</span></b></span><span class="m-3252641158768971784m-7912342312953494768gmail-"><span style="font-family:"Helvetica","sans-serif";color:black">"Dehao Chen" <<a href="mailto:dehao@google.com" target="_blank">dehao@google.com</a>></span></span><span style="font-family:"Helvetica","sans-serif";color:black"><br>
<span class="m-3252641158768971784m-7912342312953494768gmail-"><b>To: </b>"Hal Finkel" <<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span><br>
<span class="m-3252641158768971784m-7912342312953494768gmail-"><b>Cc: </b>"llvm-dev" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>, "Xinliang David Li" <<a href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>></span><br>
<b>Sent: </b>Tuesday, November 1, 2016 8:24:30 PM<o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:"Helvetica","sans-serif";color:black"><br>
<b>Subject: </b>Re: [llvm-dev] (RFC) Encoding code duplication factor in discriminator<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">On Tue, Nov 1, 2016 at 5:56 PM, Hal Finkel
<span class="gmailmsg"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p> </o:p></span></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">
<hr size="3" width="100%" align="center" id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349zwchr">
</span></div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-"><b><span style="font-family:"Helvetica","sans-serif";color:black">From:
</span></b></span><span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-"><span style="font-family:"Helvetica","sans-serif";color:black">"Dehao Chen" <<a href="mailto:dehao@google.com" target="_blank">dehao@google.com</a>></span></span><span style="font-family:"Helvetica","sans-serif";color:black"><br>
<span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-"><b>To:
</b>"Hal Finkel" <<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span><br>
<span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-"><b>Cc:
</b>"llvm-dev" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>, "Xinliang David Li" <<a href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>></span><br>
<b>Sent: </b>Tuesday, November 1, 2016 6:41:29 PM<o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:"Helvetica","sans-serif";color:black"><br>
<b>Subject: </b>Re: [llvm-dev] (RFC) Encoding code duplication factor in discriminator<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">On Tue, Nov 1, 2016 at 2:36 PM, Hal Finkel
<span class="gmailmsg"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p> </o:p></span></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">
<hr size="3" width="100%" align="center" id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381zwchr">
</span></div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-family:"Helvetica","sans-serif";color:black">From:
</span></b><span style="font-family:"Helvetica","sans-serif";color:black">"Hal Finkel via llvm-dev" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>To: </b>"Dehao Chen" <<a href="mailto:dehao@google.com" target="_blank">dehao@google.com</a>><br>
<b>Cc: </b>"llvm-dev" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>, "Xinliang David Li" <<a href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>><br>
<b>Sent: </b>Tuesday, November 1, 2016 4:26:17 PM<br>
<span class="gmailmsg"><b>Subject: </b>Re: [llvm-dev] (RFC) Encoding code duplication factor in discriminator</span></span><span class="gmailmsg"><span style="font-family:"Helvetica","sans-serif""><o:p></o:p></span></span></p>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381DWT18126">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif""><o:p> </o:p></span></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">
<hr size="3" width="100%" align="center" id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381zwchr">
</span></div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-family:"Helvetica","sans-serif";color:black">From:
</span></b><span style="font-family:"Helvetica","sans-serif";color:black">"Dehao Chen" <<a href="mailto:dehao@google.com" target="_blank">dehao@google.com</a>><br>
<b>To: </b>"Hal Finkel" <<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>><br>
<b>Cc: </b>"Paul Robinson" <<a href="mailto:paul.robinson@sony.com" target="_blank">paul.robinson@sony.com</a>>, "Xinliang David Li" <<a href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>>, "llvm-dev" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Sent: </b>Tuesday, November 1, 2016 4:14:43 PM<br>
<b>Subject: </b>Re: [llvm-dev] (RFC) Encoding code duplication factor in discriminator<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">damn... my english is not readable at all when I try to write fast... trying to make some clarification below, hopefully can make it more readable...<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381DWT18125">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">On Tue, Nov 1, 2016 at 2:07 PM, Dehao Chen
<span class="gmailmsg"><<a href="mailto:dehao@google.com" target="_blank">dehao@google.com</a>></span> wrote:<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Oops... pressed the wrong button and sent out early...<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-m-810890770938607349gmail-m-1572076769796879342m-1389974181502797381gmail-"><span style="font-family:"Helvetica","sans-serif";color:black">On Tue, Nov
 1, 2016 at 2:01 PM, Dehao Chen </span></span><span class="gmailmsg"><span style="font-family:"Helvetica","sans-serif";color:black"><<a href="mailto:dehao@google.com" target="_blank">dehao@google.com</a>></span></span><span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-m-810890770938607349gmail-m-1572076769796879342m-1389974181502797381gmail-"><span style="font-family:"Helvetica","sans-serif";color:black">
 wrote:</span><o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">If Hal's proposal is for SamplePGO purpose, let me clarify some design principles of SamplePGO.</span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">The profile for sample pgo uses source location as the key to map the execution count back to IR. This design is based on the principle that we do not want the profile to be
 tightly couple with compiler IR. Instead, profile is simple an attribute of the source code. We have been benefited  a lot from this design that the profile can easily be reused across different source versions and compiler versions, or even compilers.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">That being said, the design to encode more info into discriminator does not mean that we will change the profile. The encoded info in discriminator will be handled by the create_llvm_prof
 tool, which combines counts from different clones of the same source code and generate the combined profile data. The output profile will not have any cloning/dupliaction bits at all. So for the initial example profile I provided, the output profile will be:<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">#1: 10<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span class="gmailmsg"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">#3: 80</span></span><span style="font-family:"Helvetica","sans-serif";color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Not:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">#1: 10<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">#3.0x400: 70<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">#3.0x10400: 5<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">#3.0x20400: 3<o:p></o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381DWT18124">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">#3.0x30400: 2<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Also, how does this work for vectorization? For vectorization, you're going to multiply by the duplication factor first? The issue obviously is that each vector
 instruction counts for VF times as many scalar instructions, and so to get equivalent scalar counts, you need to multiply by VF. I had assumed this is what you were saying when I read the initial e-mail, but if you're also using the same duplication scheme
 for unrolling, then I think we need some way to differentiate.<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349DWT24637">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">In my original proposal, I only record VF*UF if the clone is both unrolled and vectorized. I did not distinguish between unroll and vectorization because I the unroll/vectorize
 decision only depends on the trip count, which can be derived from the duplication factor. If more profile info can be used for better unroll/vectorize decision making, we can definitely add it.<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">I'm still missing something here. In your proposed system, does the tool collecting the profiling information *interpret* the duplication factor encoded in the
 descriminators at all?<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582DWT1034">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Yes it does.<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Okay. I'm still missing something. Can you please write out an example using your notation below for a vectorized loop?<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal">Sure. Original code:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">for (int i = 0; i < N; i++)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  a[i] = b[i];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Transformed code:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">for (int i = 0; i < N / 4; i++)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  vectorized_assign_4(&a[i * 4], &b[i * 4]); // discriminator 0x400, sample count 20<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">for (int i = N & ~3; i < N; i++)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  a[i] = b[i];       // discriminator 0x10000, sample count 10<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The derived sample count for original a[i] = b[i] is: 20 * 4 + 10 = 90<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span class="m-3252641158768971784m-7912342312953494768gmail-"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p> </o:p></span></span></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"> </span><span style="font-family:"Helvetica","sans-serif""><o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">If it does, it seems like this should be specific to vectorization. For unrolling, you still have the same number of instructions, and so you just need to make
 the different instructions from the different loop iterations carry different discriminator values (so they they'll sum together, instead of using the maximum, as you explained in your original proposal).<o:p></o:p></span></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Let's take a look at the original loop unroll example. My proposed discriminator assignment is: <o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">for (i = 0; i < N & 3; i+= 4) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();  // discriminator: 0x400<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();  // discriminator: 0x400<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();  // discriminator: 0x400<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();  // discriminator: 0x400<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">}<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">if (i++ < N) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();   // discriminator: 0x10000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  if (i++ < N) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">    foo(); // discriminator: 0x20000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">    if (i++ < N) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">      foo();  // discriminator: 0x30000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">    }<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  }<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">}<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582DWT1026">
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">IIRC, your proposed discriminator assignment is:<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">To be clear, I don't think that I've proposed any assignment scheme at all. Regardless, I was asking this question purely in the context of your proposal.<o:p></o:p></span></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Oh I used this example to show my understanding of your reply "<span class="gmailmsg"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">For unrolling, you still have the same number of instructions, and so you
 just need to make the different instructions from the different loop iterations carry different discriminator values (so they they'll sum together, instead of using the maximum, as you explained in your original proposal)." Please let me know if my understanding
 is incorrect.</span></span><o:p></o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span class="gmailmsg"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Thanks,</span></span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span class="gmailmsg"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Dehao</span></span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><br>
Thanks again,<br>
Hal<o:p></o:p></span></p>
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">for (i = 0; i < N & 3; i+= 4) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();  // discriminator: 0x10000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();  // discriminator: 0x20000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();  // discriminator: 0x30000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();  // discriminator: 0x40000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">}<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">if (i++ < N) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  foo();   // discriminator: 0x50000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  if (i++ < N) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">    foo(); // discriminator: 0x60000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">    if (i++ < N) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">      foo();  // discriminator: 0x70000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">    }<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">  }<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">}<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:"Helvetica","sans-serif";color:black">I think my method can save discriminator space because all clones share the same discriminator. Consider that if a loop is unrolled 100 times, then with your
 algorithm, we may end up having 100 different discriminators, which seem not good for debug info size.<o:p></o:p></span></p>
</div>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-"><span style="font-size:10.0pt;font-family:"Arial","sans-serif""><o:p> </o:p></span></span></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"> </span><span style="font-family:"Helvetica","sans-serif""><o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#888888"><br>
<br>
<span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-m-810890770938607349gmail-m-1572076769796879342hoenzb"> -Hal</span></span><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p></o:p></span></p>
<div>
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">The goal of the proposed change, is to make profile more accurately represent the attribute of the source.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">The non-goal of the proposed change, is to provide more context in the profile to present the behavior of program in the context of different context.<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381DWT14535">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">The non-goal of the proposed change, is to provide more context in the profile to present the behavior of program in different contexts.'<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Okay, but why? The information will be present in the profiles, why not encode it in the metadata and let the optimizer decide when to sum it up? We should even
 provide some utility functions that make this transparent for passes that don't care about the distinction.<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">I see, you are proposing encoding these profile in the metadata. I agree that this can work, but from implementation's perspective, it could could lead to great complexity.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349DWT24638">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Sample PGO pass first read in the source->count map, use it to get basic_block->count map, and then use heuristics to propagate and get branch->probability count. So we don't
 have Metadata to store the raw count, but only the branch probability is stored after sample pgo pass. <o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">I think that, as you indicate below, we'd need to change this to {source, disc}->count map --> {BB, disc}->count map --> {branch, disc}->prob map. The idea being
 that the total probability for the branch is the sum of the probabilities associated with it for each discriminator value. Most users will just sum them up, but some passes will want the breakdowns.<o:p></o:p></span></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Agree. Note that this would add some complexity to BFI/BPI <o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<div>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"> <o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">If we are pursuing more context-sensitive profile, that would be a very different design. In this design, we will need to read profile multiple times, and have the profile tightly
 coupled with the compiler IR/pass manager. That is doable, but I don't think that probably better suits instrumentation based PGO's domain. Comments?<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381DWT14536">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">If we are pursuing more context-sensitive profile, that would be a very different design in which we need to read in profiles multiple times, and have the profile tightly coupled
 with the compiler IR/pass manager. That is doable, but that probably better suits instrumentation based PGO's domain. Comments? <o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">I don't understand why you say we'd need to read the profile multiple times. Can you please explain? I also don't think it needs to be that tightly coupled; we
 just need each pass that generates multiple copies of things to have some way to generate a unique id for what it's doing. It's all per source location, so I don't even think we need any kind of complicated hashing scheme.<o:p></o:p></span></p>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">As explained above, we only have branch probability. Yes, we can record more instruction/basicblock count context info in additional metadata. But when you use it in optimizer,
 I suppose you will need to convert it to branch probability too?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Let me take an example to demonstrate my understanding of your use of context-sensitive profile.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">original code:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">for ()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  stmt1;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">optimized code:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">if (cond1)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">    stmt1;  //100 samples<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">else if (cond2)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">    stmt1;  // 0 samples<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">else<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">    stmt1; // 50 samples<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">The loop was multi-versioned by cond1 and cond2. With my proposal, the profile for stmt1 will be combined as 150 samples. If we use this profile to optimize the orginal source,
 after annotation, the code becomes:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  stmt1 // 150 samples<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Later when it comes to the mulit-version optimization, it will transform the code to:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">if (cond1)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">    stmt1;  //50 samples<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">else if (cond2)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">    stmt1;  // 50 samples<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">else<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">    stmt1; // 50 samples<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">The 150 samples are evenly distributed to 3 clones as we do not have context info.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">With your proposal, after annotation, the original code becomes:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  stmt1 // 150 samples (M1:100, M2:0, M3:50)<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Then during mutli-version optimization, the optimizer reads the metadata and find M2 is never taken, so it will transform the code to:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">if (cond1)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">    stmt1;  // 100 samples<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">else<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">  for()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">    stmt1; // 50 samples<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">There are two major parts that can benefit from the extra metadata recorded for each copy.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">1. It can demonstrate that cond2 is always false and there is no need to create that version.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">2. It can correctly attribute samples to cloned copy (i.e. 100, 50 respectively in this case)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349DWT24640">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">I think the most important benefit is #1. For #2, my guess is scaled count is already good enough.<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">By what are you scaling the count?<o:p></o:p></span></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">It's random. Or most likely, each branch will be 50% taken.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"> <o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span class="m-3252641158768971784m-7912342312953494768gmail-m489185109948393582gmail-"><span style="font-size:10.0pt;font-family:"Arial","sans-serif""><o:p> </o:p></span></span></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif""><o:p> </o:p></span></p>
</div>
<div id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349DWT24639">
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Here comes the problem: cond1 and cond2 are both generated by compiler. Then how do we map the metadata back to them? Using uid or special encoding seems fragile because when
 upstream optimization changes, compiler may choose to put cond2 in front of cond1 so the uid will change accordingly. How would we handle cases like this?<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Exactly for this reason, I don't think we can rely on the ordering to generate the identifiers; they need to have semantic meaning. I agree that this is tricky
 in general. However, for the cases I have in mind (unrolling, vectorization, etc.) these passes don't generate arbitrary conditionals, but rather, specific conditionals related to runtime overlap checks, trip-count thresholds, and I think that it should be
 easy to encode a discriminator value which can be unambiguously inverted.<o:p></o:p></span></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">I'm still not quite clear how to do this. Needs to think more thoroughly. But one thing I want to note is that, we want to encode the context info only when it will be useful
 for the optimization. For vectorization/unroll, I think accurate trip count is already good enough. So do we want to record its context?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Thanks,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Dehao<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"> <o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><br>
Thanks again,<br>
Hal<o:p></o:p></span></p>
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Dehao<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><br>
Thanks again,<br>
Hal<o:p></o:p></span></p>
<div>
<div>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Thanks,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">Dehao<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black">On Tue, Nov 1, 2016 at 1:04 PM, Hal Finkel
<span class="gmailmsg"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><o:p> </o:p></span></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">
<hr size="3" width="100%" align="center" id="m_-3252641158768971784m_-7912342312953494768gmail-m_489185109948393582gmail-m_-810890770938607349gmail-m_-1572076769796879342m_-1389974181502797381gmail-m_-1621770862889340260gmail-m_22964723159565198m_8666766791862472595zwchr">
</span></div>
<blockquote style="border:none;border-left:solid #1010FF 1.5pt;padding:0in 0in 0in 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-family:"Helvetica","sans-serif";color:black">From:
</span></b><span style="font-family:"Helvetica","sans-serif";color:black">"Paul Robinson" <<a href="mailto:paul.robinson@sony.com" target="_blank">paul.robinson@sony.com</a>><br>
<b>To: </b>"Dehao Chen" <<a href="mailto:dehao@google.com" target="_blank">dehao@google.com</a>>, "Hal Finkel" <<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>><br>
<b>Cc: </b>"Xinliang David Li" <<a href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>>,
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<b>Sent: </b>Tuesday, November 1, 2016 2:15:38 PM<br>
<b>Subject: </b>RE: [llvm-dev] (RFC) Encoding code duplication factor in        discriminator</span><span class="gmailmsg"><span style="font-family:"Helvetica","sans-serif""><o:p></o:p></span></span></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in">
<span class="gmailmsg"><span style="font-family:"Helvetica","sans-serif";color:black">As illustrated in the above example, it is not like "vectorization has a distinct bit". All different optimizations make clones of code which will be labeled by UIDs represented
 by N (e.g. 8) bits. In this way, the space will be capped by the number of clones all optimizations have made, instead of # of optimizations that has applied. And it will be capped at 2^N-1. The cons of using uid is that you will not know if a clone is coming
 from vectorization or unroll or loop distribution.</span></span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.5in">
<span class="gmailmsg"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Okay, but that kind of semantic mapping is important. How should we encode/recover that information? To be clear, I'm not saying that we need to implement that
 up front, but there needs to be a clear path to an implementation, because I don't want to have two disjoint schemes.</span></span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:5.35pt">
<span style="color:black">You mean that you want to know which optimization created the clone? How would you use that info? Looks to me this will expose compiler implementation detail in debug info.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:5.35pt">
<span style="color:black">This is still doable, assume we have 15 interesting optimizations to track, we can use 4 bits to encode the optimization type that created the clone. But this becomes nasty if the a clone is created by more than one optimizations.
 In that way, discriminator may not be fit for this purpose.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span></span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a name="m_-3252641158768971784_m_-79123423129534"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">My understanding was that
 the encoding scheme would allow the profiling analysis to correctly map execution data back to the original source construct, while preserving the property that each distinct basic block would have its own discriminator value.  That is, the execution data
 would be attributed back to the original source construct, not whatever each individual optimization had done to it, and the data for the original source construct would correctly reflect the execution (e.g. profiling says you got 82 hits on the original loop,
 rather than reporting 20 hits on the unrolled-by-4 loop plus 1 each on 2 of the trailing copies).</span></span></a><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span></span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">It sounds like Hal is thinking that the per-discriminator execution info would
 be preserved down to the point where an individual optimization could look at the profile for each piece, and make decisions on that basis.</span></span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span></span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I'm not clear how that would be possible, as the optimization would have to
 first do the transform (or predict how it would do the transform) in order to see which individual-discriminator counts mapped to which actual blocks, and then make some kind of decision about whether to do the transform differently based on that information. 
 Then, if the optimization did choose to do the transform differently, then that leaves the IR in a state where the individual discriminators *cannot* map back to it.  (Say you unroll by 2 instead of 4; then you have only 1 trailing copy, not 3, and a discriminator
 that maps to the second trailing copy now maps to nothing.  The individual-discriminator data becomes useless.)</span></span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span></span><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Am I expressing this well enough to show that what Hal is looking for is not
 feasible?</span></span><span style="color:black"><o:p></o:p></span></p>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Yes, it will need to predict how the transformation would affect the blocks produced. That does not seem problematic (at least at a coarse level). Yes, if transformations
 made earlier in the pipeline make different decisions, then that will invalidate later fine-grained data (at least potentially). I don't see how any of this makes this infeasible. We just need a way for the profiling counts, per descriminator, to remain available,
 and for the transformations themselves to know which discriminators (loop ids, or whatever) to consider.<br>
<br>
 -Hal<o:p></o:p></span></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span class="gmailmsg"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">--paulr</span></span><span style="color:black"><o:p></o:p></span></p>
<div style="border:none;border-left:solid windowtext 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="color:black"> <o:p></o:p></span></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><br>
<br>
<br>
<span class="gmailmsg">-- </span></span><span class="gmailmsg"><span style="font-size:10.0pt;font-family:"Arial","sans-serif""><o:p></o:p></span></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory</span><o:p></o:p></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><br>
<br>
<br>
-- <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span class="gmailmsg"><span style="font-family:"Helvetica","sans-serif";color:black">_______________________________________________</span></span><span style="font-family:"Helvetica","sans-serif";color:black"><br>
<span class="gmailmsg">LLVM Developers mailing list</span><br>
<span class="gmailmsg"><a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a></span><br>
<span class="gmailmsg"><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a></span><o:p></o:p></span></p>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><br>
<br>
<br>
<span class="gmailmsg">-- </span></span><span class="gmailmsg"><span style="font-size:10.0pt;font-family:"Arial","sans-serif""><o:p></o:p></span></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory</span><o:p></o:p></p>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><br>
<br>
<br>
-- <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif";color:black"><o:p> </o:p></span></p>
</div>
</div>
</blockquote>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black"><br>
<br>
<br>
-- <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:black">Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</div>
</body>
</html>