<div dir="ltr"><div>And there's no PHI node after this that depends on the condition?<br><br>--<br></div>Mats<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 9 February 2016 at 19:30, Taewook Oh via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@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">




<div>
<div style="direction:ltr;font-family:Tahoma;color:#000000;font-size:10pt">
<p><span>Hello, </span></p>
<p><span></span><br>
</p>
<p><span>I found that GVN doesn't promote identical sequence of instructions in if and else branch to their common predecessors. For example, for the following code snippet</span></p>
<p><span></span><br>
</p>
<p><span>pred:</span></p>
<p><span><span></span>…</span></p>
<p><span><span></span>br i1 %cmp, label %if, label %else</span></p>
<p><span>if:</span></p>
<p><span><span></span>%incdec.ptr.1 = getelementptr inbounds i8, i8* %ptr, i64 1</span></p>
<p><span><span></span>%cast1 = ptrtoint i8* %incdec.ptr.1 to i64</span></p>
<p><span>   <span> </span>…</span></p>
<p><span>else:</span></p>
<p><span><span></span>%incdec.ptr.2 = getelementptr inbounds i8, i8* %ptr, i64 1</span></p>
<p><span><span></span>%cast2 = ptrtoint i8* %incdec.ptr.2 to i64</span></p>
<p><span></span><br>
</p>
<p><span>GVN doesn't move instructions in 'if' and 'else' blocks to 'pred' block even though it knows that incdec.ptr.1/case1 has a same value number with incdec.ptr.2/cast2. I see a case where this kind of redundancy confuses following
 optimization passes and ends up generating suboptimal code. </span></p>
<p><span></span><br>
</p>
<p><span>From the GVN implementation, it seems that transformation is performed only when the "leader" value dominates the other value, so it cannot handle a case like the above example. I wonder if this is by design or just a missing
 feature. </span></p>
<p><span></span><br>
</p>
<p><span>Thanks,</span></p>
<p><span>Taewook</span></p>
</div>
</div>

<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>