<div dir="ltr"><pre class="gmail-bz_comment_text" id="gmail-comment_text_3" style="white-space:pre-wrap;width:50em;color:rgb(0,0,0)">Hello,</pre><pre class="gmail-bz_comment_text" id="gmail-comment_text_3" style="white-space:pre-wrap;width:50em;color:rgb(0,0,0)"><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="gmail-bz_comment_text" id="gmail-comment_text_3" style="white-space:pre-wrap;width:50em;color:rgb(0,0,0)">GCC correctly prefers the first case:</pre><pre class="gmail-bz_comment_text" id="gmail-comment_text_3" style="white-space:pre-wrap;width:50em;color:rgb(0,0,0)"><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="gmail-bz_comment_text" id="gmail-comment_text_3" style="white-space:pre-wrap;width:50em;color:rgb(0,0,0)">But Clang seems to ignore _builtin_expect hints in this case.</pre><pre class="gmail-bz_comment_text" id="gmail-comment_text_3" style="white-space:pre-wrap;width:50em;color:rgb(0,0,0)"><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="gmail-bz_comment_text" id="gmail-comment_text_3" style="white-space:pre-wrap;width:50em;color:rgb(0,0,0)"><a href="https://godbolt.org/g/tuAVT7">https://godbolt.org/g/tuAVT7</a></pre></div>