<div dir="ltr">I did <div><a href="https://bugs.llvm.org/show_bug.cgi?id=37368">https://bugs.llvm.org/show_bug.cgi?id=37368</a><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-05-09 20:33 GMT+02:00 Dávid Bolvanský <span dir="ltr"><<a href="mailto:david.bolvansky@gmail.com" target="_blank">david.bolvansky@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I did <div><br></div><div><a href="https://bugs.llvm.org/show_bug.cgi?id=37368" target="_blank">https://bugs.llvm.org/show_<wbr>bug.cgi?id=37368</a><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2018-05-09 20:29 GMT+02:00 David Zarzycki <span dir="ltr"><<a href="mailto:dave@znu.io" target="_blank">dave@znu.io</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space">I’d wager that the if-else chain is being converted to a "switch statement” during an optimization pass and the __builtin_expect() hint is lost. Can you file a bug? <a href="https://bugs.llvm.org" target="_blank">https://bugs.llvm.org</a><div><br><div><br><blockquote type="cite"><div><div class="m_-1029147839546973149h5"><div>On May 9, 2018, at 1:57 PM, Dávid Bolvanský via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="m_-1029147839546973149m_-4663867852525589497Apple-interchange-newline"></div></div><div><div><div class="m_-1029147839546973149h5"><div dir="ltr"><pre class="m_-1029147839546973149m_-4663867852525589497gmail-bz_comment_text" id="m_-1029147839546973149m_-4663867852525589497gmail-comment_text_3" style="white-space:pre-wrap;width:50em">Hello,</pre><pre class="m_-1029147839546973149m_-4663867852525589497gmail-bz_comment_text" id="m_-1029147839546973149m_-4663867852525589497gmail-comment_text_3" style="white-space:pre-wrap;width:50em"><div style="background-color:rgb(255,255,254)"><div><span style="color:rgb(0,0,255)">#define</span> likely(x)       __builtin_expect((x),<span style="color:rgb(9,136,90)">1</span>)</div><br><div><span style="color:rgb(0,128,0)">// switch like</span></div><div><span style="color:rgb(0,0,255)">char</span> * b(<span style="color:rgb(0,0,255)">int</span> e) {</div><div>    <span style="color:rgb(0,0,255)">if</span> (likely(e == <span style="color:rgb(9,136,90)">0</span>))</div><div>        <span style="color:rgb(0,0,255)">return</span> <span style="color:rgb(163,21,21)">"0"</span>;</div><div>    <span style="color:rgb(0,0,255)">else</span> <span style="color:rgb(0,0,255)">if</span> (e == <span style="color:rgb(9,136,90)">1</span>)</div><div>        <span style="color:rgb(0,0,255)">return</span> <span style="color:rgb(163,21,21)">"1"</span>;</div><div>    <span style="color:rgb(0,0,255)">else</span> <span style="color:rgb(0,0,255)">return</span> <span style="color:rgb(163,21,21)">"f"</span>;</div><div>}</div></div></pre><pre class="m_-1029147839546973149m_-4663867852525589497gmail-bz_comment_text" id="m_-1029147839546973149m_-4663867852525589497gmail-comment_text_3" style="white-space:pre-wrap;width:50em">GCC correctly prefers the first case:</pre><pre class="m_-1029147839546973149m_-4663867852525589497gmail-bz_comment_text" id="m_-1029147839546973149m_-4663867852525589497gmail-comment_text_3" style="white-space:pre-wrap;width:50em"><div style="background-color:rgb(255,255,254)"><div><div><div><span style="color:rgb(0,128,128)">b(int):</span></div><div>  <span style="color:rgb(0,0,255)">mov</span> <span style="color:rgb(72,100,170)">eax</span>, <span style="color:rgb(0,128,128)">OFFSET</span> <span style="color:rgb(0,128,128)">FLAT</span>:<span style="color:rgb(0,128,128)">.LC0</span></div><div>  <span style="color:rgb(0,0,255)">test</span> <span style="color:rgb(72,100,170)">edi</span>, <span style="color:rgb(72,100,170)">edi</span></div><div>  <span style="color:rgb(0,0,255)">jne</span> <span style="color:rgb(0,128,128)">.L7</span></div><div>  <span style="color:rgb(0,0,255)">ret</span></div></div></div><div><br></div></div></pre><pre class="m_-1029147839546973149m_-4663867852525589497gmail-bz_comment_text" id="m_-1029147839546973149m_-4663867852525589497gmail-comment_text_3" style="white-space:pre-wrap;width:50em">But Clang seems to ignore _builtin_expect hints in this case.</pre><pre class="m_-1029147839546973149m_-4663867852525589497gmail-bz_comment_text" id="m_-1029147839546973149m_-4663867852525589497gmail-comment_text_3" style="white-space:pre-wrap;width:50em"><div style="background-color:rgb(255,255,254)"><div><span style="color:rgb(0,128,128)">b(int):</span> <span style="color:rgb(0,128,0)"># @b(int)</span></div><div>  <span style="color:rgb(0,0,255)">cmp</span> <span style="color:rgb(72,100,170)">edi</span>, <span style="color:rgb(9,136,90)">1</span></div><div>  <span style="color:rgb(0,0,255)">mov</span> <span style="color:rgb(72,100,170)">eax</span>, <span style="color:rgb(0,128,128)">offset</span> <span style="color:rgb(0,128,128)">.L.str.1</span></div><div>  <span style="color:rgb(0,0,255)">mov</span> <span style="color:rgb(72,100,170)">ecx</span>, <span style="color:rgb(0,128,128)">offset</span> <span style="color:rgb(0,128,128)">.L.str.2</span></div><div>  <span style="color:rgb(0,0,255)">cmove</span> <span style="color:rgb(72,100,170)">rcx</span>, <span style="color:rgb(72,100,170)">rax</span></div><div>  <span style="color:rgb(0,0,255)">test</span> <span style="color:rgb(72,100,170)">edi</span>, <span style="color:rgb(72,100,170)">edi</span></div><div>  <span style="color:rgb(0,0,255)">mov</span> <span style="color:rgb(72,100,170)">eax</span>, <span style="color:rgb(0,128,128)">offset</span> <span style="color:rgb(0,128,128)">.L.str</span></div><div>  <span style="color:rgb(0,0,255)">cmovne</span> <span style="color:rgb(72,100,170)">rax</span>, <span style="color:rgb(72,100,170)">rcx</span></div><div>  <span style="color:rgb(0,0,255)">ret</span></div></div></pre><pre class="m_-1029147839546973149m_-4663867852525589497gmail-bz_comment_text" id="m_-1029147839546973149m_-4663867852525589497gmail-comment_text_3" style="white-space:pre-wrap;width:50em"><a href="https://godbolt.org/g/tuAVT7" target="_blank">https://godbolt.org/g/tuAVT7</a></pre></div></div></div>
______________________________<wbr>_________________<br>LLVM Developers mailing list<br><a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br></div></blockquote></div><br></div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>