[llvm-dev] Ignored branch predictor hints

Dávid Bolvanský via llvm-dev llvm-dev at lists.llvm.org
Wed May 9 10:57:33 PDT 2018


Hello,

#define likely(x)       __builtin_expect((x),1)

// switch like
char * b(int e) {
    if (likely(e == 0))
        return "0";
    else if (e == 1)
        return "1";
    else return "f";
}

GCC correctly prefers the first case:

b(int):
  mov eax, OFFSET FLAT:.LC0
  test edi, edi
  jne .L7
  ret

But Clang seems to ignore _builtin_expect hints in this case.

b(int): # @b(int)
  cmp edi, 1
  mov eax, offset .L.str.1
  mov ecx, offset .L.str.2
  cmove rcx, rax
  test edi, edi
  mov eax, offset .L.str
  cmovne rax, rcx
  ret

https://godbolt.org/g/tuAVT7
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180509/2e5eaa99/attachment.html>


More information about the llvm-dev mailing list