[llvm-dev] __builtin_expect hint ignored

Vedant Kumar via llvm-dev llvm-dev at lists.llvm.org
Mon Apr 24 14:41:05 PDT 2017


On x86-64, clang-trunk at least checks for the expected case first:

  https://godbolt.org/g/mEfQ4e.

What changed? Well bisection results show that this was fixed by r300440:

  [llvm] [mirror/master] [BPI] Use metadata info before any other heuristics

But the gcc 7 snapshot produces a lookup table. That might be better. CC'ing Marcello and Hans to comment, since IIRC they have both worked on switch lowering.

best
vedant

> On Apr 18, 2017, at 4:20 PM, Adam Nowacki via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> https://godbolt.org/g/VvrbFZ
> 
> For the code below generated assembly is the worst possible - test 1, else test 3, else test 2 with expected value of 2 last ... Whats going on?
> 
> long case_2();
> long case_3();
> long case_1();
> long case_else();
> long test(long a) {
>    switch (__builtin_expect(a, 2)) {
>        case 2: return case_2();
>        case 3: return case_3();
>        case 1: return case_1();
>        case 0: 
>        case 4: 
>        case 5: return case_else();
>        default: __builtin_unreachable();
>    }
> }
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list