<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 10, 2017 at 2:31 AM, Peter A Jonsson <span dir="ltr"><<a href="mailto:pj@sics.se" target="_blank" class="cremed">pj@sics.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Kyle,<br>
<br>
my apologies for mailing you directly but it seems new user creation is disabled on the llvm bugzilla.<br>
<br>
We sometime lose edges during IfConversion of diamonds and it’s not obvious how to reproduce on an upstream target. The documentation for HasFallThrough says *may* fallthrough which I interpret as “this will be true whenever we aren’t sure” but IfConverter::AnalyzeBranches() contains the code:<br>
<br>
BBI.HasFallThrough = BBI.IsBrAnalyzable && BBI.FalseBB == nullptr;<br></blockquote><div><br></div><div>BBI.HasFallThrough really means "Has Analyzable fallthrough." So this line is correct.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
So HasFallThrough is false whenever IsBrAnalyzable is false. That is common because IsBrAnalyzable is false when analyzeBranch() is true (its default implementation). Is it possible that HasFallThrough should also be true when IsBrAnalyzable is false? In other words, instead initialized as:<br>
<br>
BBI.HasFallThrough = !BBI.IsBrAnalyzable || BBI.FalseBB == nullptr;<br>
<br>
? That change makes my test pass so it would be wonderfully simple if that is all that it takes.</blockquote><div><br></div><div>I suspect there is a simple change, but you're looking in the wrong place. Can you let me know if the attached patch works for you?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Best Wishes,<br>
<br>
Peter<br>
<br>
—<br>
Peter A. Jonsson, Ph.D.<br>
Swedish Institute of Computer Science<br>
Box 1263, SE-164 29 Kista, Sweden</blockquote></div><br></div></div>