<div dir="ltr">In most of the cases, BFI can rebuild BB weights from probability (plus entry count) correctly, but there are exceptions including 1) functions with irreducible loops; and 2) lossy profile data in AutoFDO case.  <div><br></div><div>For the example CFG, without Cong's patch, BFI can recover the BB2's weight -- but this is not by design but based on the assumption that the weight of backedge is not scaled (and still keep the original value of the sample count). However since BFI will force BB2->BB3 to have have weight 1, the iteration count of the loop will be 1000 which might be lower than actual.  With Cong's patch, the weight of BB2 recomputed can be way higher than actual (as it is using probability 1's nominator value).</div><div><br></div><div>I think AutoFDO code needs to consider the limitation of BFI when annotating loops -- basically if a loop has only single exit -- the exit edge's weight can not be zero.</div><div><br></div><div>David</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 15, 2015 at 10:22 AM, Dehao Chen via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">For the following CFG:<br>
<br>
BB1(weight:100)<br>
BB2(weight:1000)<br>
BB3(weight:100)<br>
<br>
BB1->BB2(probability: 0%)<br>
BB1->BB3(probability: 100%)<br>
BB2->BB2(probability: 100%)<br>
BB2->BB3(probability: 0%)<br>
<br>
Is there a way we can rebuild BB weights from probability?<br>
Dehao<br>
<div class="HOEnZb"><div class="h5"><br>
On Mon, Dec 14, 2015 at 9:58 PM, David Li <<a href="mailto:davidxl@google.com">davidxl@google.com</a>> wrote:<br>
> davidxl added a comment.<br>
><br>
> Ok.  This is a case where loop exit edge is 'never' taken where the loop backedge is executed. With instrumentation based PGO, even without FE fix up of the 0 weight edge, such as scenario (aka, bad meta data) will never occur, so whatever output of BFI will be fine.<br>
><br>
> However, with AutoFDO, such MD_prof data can actually be generated . For instance, the function has a single BB loop, and only the BB in the loop has some samples but the entry/exit BB has none.<br>
><br>
> The BFI result before this patch will most likely under-estimate the loop trip count, while with this patch, it will most likely over-estimate it. I think neither results are ideal, and AutoFDO needs to do something (apply some heuristic) to prevent such case from being generated.  +dehao and +dnovillo for comments.<br>
><br>
><br>
> <a href="http://reviews.llvm.org/D15489" rel="noreferrer" target="_blank">http://reviews.llvm.org/D15489</a><br>
><br>
><br>
><br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>