<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style='font-size: 10pt; font-family: Verdana,Geneva,sans-serif'>
<p>On 2017-10-11 03:07, Kyle Butt wrote:</p>
<blockquote type="cite" style="padding: 0 0.4em; border-left: #1010ff 2px solid; margin: 0">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div>Eli's right. </div>
<div>Gaël, do you think you could patch ifconversion to remove the instructions rather than relying on removeBranch?</div>
</div>
</div>
</div>
</blockquote>
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div> </div>
<div> </div>
<div>In fact, the BB has a IsBrAnalyzable attribute set to true (=analyzeBranch() returned false) but the TrueBB and FalseBB of the diamond have both IsBrAnalyzable set to false (=anayzeBranch() returned true). But it is still detected as a valid diamond and later during the processing of the diamond, the branches are removed without looking at IsBrAnalyzable attribute (which does not work because indirect branches are not supported by removeBranch())...</div>
<div> </div>
<div>The thing is that I don't understand IfConversion MachinePass enough to know what I should modify. Does indirect branches in TrueBB and FalseBB should be supported as a diamond (a comment says that TailBB can be empty, does that means it is a "good" diamond shape with indirect branches?  Does a valid diamond must have <span>analyzeBranch() returning false for TrueBB and FalseBB as well?</span> </div>
<div> </div>
<div>From my point of view, when each TrueBB and FalseBB contain an indirect branch, it cannot be a diamond since they can jump to anywhere. My conservative approach would be to add a check inside ValidDiamond to detect this case and return false to avoid the conversion.</div>
<div> </div>
<div>Any idea?</div>
</div>
</div>
</div>

</body></html>