<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Aug 28, 2015 at 8:16 AM, Smith, Kevin B <span dir="ltr"><<a href="mailto:kevin.b.smith@intel.com" target="_blank">kevin.b.smith@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<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""> Sean Silva [mailto:<a href="mailto:chisophugis@gmail.com" target="_blank">chisophugis@gmail.com</a>]
<br>
<b>Sent:</b> Thursday, August 27, 2015 5:39 PM<br>
<b>To:</b> <a href="mailto:reviews%2BD12341%2Bpublic%2B5f663c68720e9677@reviews.llvm.org" target="_blank">reviews+D12341+public+5f663c68720e9677@reviews.llvm.org</a>; Smith, Kevin B<br>
<b>Cc:</b> Sanjay Patel; Chandler Carruth; Krzysztof Parzyszek; Hal Finkel; Bob Wilson; <a href="mailto:kubastaszak@gmail.com" target="_blank">kubastaszak@gmail.com</a>; llvm-commits<span class=""><br>
<b>Subject:</b> Re: [PATCH] D12341: add llvm.unpredictable intrinsic and lower it to metadata<u></u><u></u></span></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Thu, Aug 27, 2015 at 3:13 PM, Kevin B. Smith via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<u></u><u></u></p><span class="">
<p class="MsoNormal">kbsmith1 added a comment.<br>
<br>
No, I am not suggesting you have more history. I am suggesting that you only have a single number that represents the percentage of time that the direction is mispredicted. It would make a lot of sense for it to be a simple 0-100 value, and would represent
the percentage of mispredictions. Anything else takes more space, and is much too closely tied to the branch predictor.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#4f81bd">I have seen 2 independent bug reports recently where the simple annotation to the compiler "assume that this is completely unpredictable" would have been the solution. Some pieces of code very closely approximate
this, especially in decompression algorithms where by definition if the encoder is doing its job then the pattern cannot be guessed. Other data-driven branches can approximate this behavior as well.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#4f81bd"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#4f81bd">This is more a declaration about the actual pattern of the branch. A number indicating the percentage of mispredictions (or any empirically collected number) is not a generalization of this annotation.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#4f81bd"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#4f81bd">-- Sean Silva<u></u><u></u></span></p>
</div>
</span><div>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d">Sean – Yes, I agree this is about an inherent property of the branch, or condition. But percentage of mispredictions could easily be used<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d">to convey that information. Simply set the value to 100 to say that 100% of the time the branch/condition is mispredicted, and consider that<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d">the declaration about the actual pattern, rather than an actual number.</span></p></div></div></div></div></div></div></blockquote><div><br></div><div>I think this is a perfect example of why using such a percentage needs more thought (especially which kinds of optimizations we would hope to do based on the number). Think for a second about what it means for a branch to be 100% mispredicted. If I give you a 10 question T/F test with questions that you have no clue about, is it harder to get 10/10 or 0/10? (trick question).</div><div><br></div><div>Sanjay's patch is motivated by a specific use case (that has arisen in practice multiple times for us) where the user would like to inform the compiler that the branch should not be expected to be predictable in any way.</div><div><br></div><div>-- Sean Silva</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><div><div><div><div><p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d">To some extent this mimics __builtin_expect, which allows a specification of the probability of a condition having a certain value, but where in actual usage,
the user’s usage is likely to be always 0 or always 100 for hinting purposes.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d">This allows a single type of annotation to be used for both the user specified property, and also for HW feedback.<span class="HOEnZb"><font color="#888888"><u></u><u></u></font></span></span></p><span class="HOEnZb"><font color="#888888">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d">Kevin Smith<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
</font></span></div><span class="">
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal"><br>
ABAB can be perfectly predicted often, AABB can be perfectly predicted often. The number of transitions from true to false or vice-versa has a poor<br>
correlation to branch predictability, just as the branch probability has a poor correlation to branch predictability.<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><br>
<br>
<a href="http://reviews.llvm.org/D12341" target="_blank">http://reviews.llvm.org/D12341</a><br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><u></u><u></u></p>
</div>
</div>
</blockquote>
</span></div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>
</blockquote></div><br></div></div>