← Back to context

Comment by anthonj

2 days ago

I think this call for something similar to "__builtin_expect" or linux' likely()/unlikely().

Not very clean, but better than inserting obscure optimisations in the source.

Assuming compilers are smart enough to insert an unnecessary branch to break the dependency.

  • That's what the hints are for. Expect/likely/unlikely are the programmer informing the compiler what it should expect and how it should optimize

That would be great, if only it worked as intended! From the perspective of an optimizing compiler, `a == b ? a : b` is worse than `b` regardless of the probability you assign to `a == b`.

ETA: someone on Lobsters (https://lobste.rs/s/1an425/quadrupling_code_performance_with...) noticed that `[[unlikely]]` actually works on LLVM (not on GCC, and with worse codegen on LLVM, but it's still good to know) -- updated the post.