|
Compiler hints. More...
Go to the source code of this file.
Macros | |
#define | ARCH_LIKELY(x) (x) |
#define | ARCH_UNLIKELY(x) (x) |
#define | ARCH_GUARANTEE_TO_COMPILER(x) |
ARCH_GUARANTEE_TO_COMPILER (bool-expr) informs the compiler about value constraints to help it make better optimizations. | |
Compiler hints.
ARCH_LIKELY
(bool-expr) and ARCH_UNLIKELY
(bool-expr) will evaluate to the value of bool-expr but will also emit compiler intrinsics providing hints for branch prediction if the compiler has such intrinsics. It is advised that you only use these in cases where you empirically know the outcome of bool-expr to a very high degree of certainty. For example, fatal-error cases, invariants, first-time initializations, etc.
Definition in file hints.h.
#define ARCH_GUARANTEE_TO_COMPILER | ( | x | ) |
ARCH_GUARANTEE_TO_COMPILER
(bool-expr) informs the compiler about value constraints to help it make better optimizations.
It is of critical importance that the guarantee is in fact always 100% true, otherwise the compiler may generate invalid code.
This can be useful, for example, when an out-of-line function call could potentially change a value previously known to compiler, but does not, based on code invariants.
This hint is best used after investigating generated assembly code and seeing useless/unreachable code being generated that can be prevented with this hint. This hint is often times not necessary, and should never be inserted on a whim. The compiler will run with the promises we make it to the ends of the earth, and this can lead to surprising results (e.g. undefined behavior) if we are not careful.