<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 24, 2015 at 3:40 PM, Duncan P. N. Exon Smith <span dir="ltr"><<a href="mailto:dexonsmith@apple.com" target="_blank" class="cremed">dexonsmith@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5"><br>
</div></div>What does -analyze -branch-prob give?<br></blockquote><div><br></div><div>Similar indication of hotness. Both loops appear equally hot.</div><div><br></div><div><font face="monospace, monospace">$ bin/opt -analyze -branch-prob -S unbiased-branches.ll </font></div><div><font face="monospace, monospace">Printing analysis 'Branch Probability Analysis' for function 'bar':</font></div><div><font face="monospace, monospace">---- Branch Probabilities ----</font></div><div><font face="monospace, monospace">Printing analysis 'Branch Probability Analysis' for function 'main':</font></div><div><font face="monospace, monospace">---- Branch Probabilities ----</font></div><div><font face="monospace, monospace">  edge entry -> for.cond probability is 16 / 16 = 100% [HOT edge]</font></div><div><font face="monospace, monospace">  edge for.cond -> for.body probability is 2147483647 / 2147483649 = 100% [HOT edge]</font></div><div><font face="monospace, monospace">  edge for.cond -> for.end probability is 2 / 2147483649 = 9.31323e-08%</font></div><div><font face="monospace, monospace">  edge for.body -> for.inc probability is 16 / 16 = 100% [HOT edge]</font></div><div><font face="monospace, monospace">  edge for.inc -> for.cond probability is 124 / 124 = 100% [HOT edge]</font></div><div><font face="monospace, monospace">  edge for.end -> for.cond1 probability is 16 / 16 = 100% [HOT edge]</font></div><div><font face="monospace, monospace">  edge for.cond1 -> for.body3 probability is 2147483647 / 2147483649 = 100% [HOT edge]</font></div><div><font face="monospace, monospace">  edge for.cond1 -> for.end6 probability is 2 / 2147483649 = 9.31323e-08%</font></div><div><font face="monospace, monospace">  edge for.body3 -> for.inc4 probability is 16 / 16 = 100% [HOT edge]</font></div><div><font face="monospace, monospace">  edge for.inc4 -> for.cond1 probability is 124 / 124 = 100% [HOT edge] </font></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
But certainly there *is* a limit.  We can't store a ratio of larger<br>
than ~4B:1.  Is this really a problem?  I understand that you can't<br>
tell which loop is hotter, but why does that matter?  Is there some<br>
optimization that will do the wrong thing?  Which one?<br></blockquote><div><br></div><div>It will matter for cost analysis in the inliner, for instance.  I don't think this matters in the few places that profile is used now.  But long term, we want to make sure that we have a good measure of relative temperatures within a CFG and across CFGs.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
Regarding changing branch weights to 64-bits, I think we should be<br>
sure it's valuable before we change it.  I imagine it's doable, but<br>
it'll complicate logic in a few places that don't currently have to<br>
worry about overflowing `uint64_t`.</blockquote></div><br></div><div class="gmail_extra">Sure, OK. I'll see about making sure we scale things properly during frequency computation.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Diego.</div></div>