From 6e64ea6fa79c265ebadf2260b7cc1ad05befd801 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Sun, 3 Jul 2016 15:05:18 -0700 Subject: [PATCH] Add likely/unlikely() branch hint macros. These are useful for hot code paths. Because it's easy to guess wrongly about likelihood, and because such likelihoods change over time, they should be used sparingly. --- src/include/c.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/include/c.h b/src/include/c.h index 4ab3f8027a..3a77107e60 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -939,6 +939,22 @@ typedef NameData *Name; #endif +/* + * Hints to the compiler about the likelihood of a branch. Both likely() and + * unlikely() return the boolean value of the contained expression. + * + * These should only be used sparingly, in very hot code paths. It's very easy + * to mis-estimate likelihoods. + */ +#if __GNUC__ >= 3 +#define likely(x) __builtin_expect((x) != 0, 1) +#define unlikely(x) __builtin_expect((x) != 0, 0) +#else +#define likely(x) ((x) != 0) +#define unlikely(x) ((x) != 0) +#endif + + /* ---------------------------------------------------------------- * Section 8: random stuff * ---------------------------------------------------------------- -- 2.39.5