From db0ea224863ae8ffe332b19b44526ad6ff045ea7 Mon Sep 17 00:00:00 2001 From: Yedidya Feldblum Date: Tue, 26 Dec 2017 17:17:08 -0800 Subject: [PATCH] Namespacing and comments in folly/Likely.h Summary: [Folly] Namespacing and comments in `folly/Likely.h`. This adds `FOLLY_LIKELY` and `FOLLY_UNLIKELY`. Reviewed By: Orvid Differential Revision: D6636136 fbshipit-source-id: da93220201cabca91b4477ab98269a0febb735db --- folly/Likely.h | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/folly/Likely.h b/folly/Likely.h index 5c7da5e4..bdab72b8 100644 --- a/folly/Likely.h +++ b/folly/Likely.h @@ -1,5 +1,5 @@ /* - * Copyright 2017 Facebook, Inc. + * Copyright 2012-present Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,19 +14,33 @@ * limitations under the License. */ -/** - * Compiler hints to indicate the fast path of an "if" branch: whether - * the if condition is likely to be true or false. - * - * @author Tudor Bosman (tudorb@fb.com) - */ - #pragma once +#if __GNUC__ +#define FOLLY_DETAIL_BUILTIN_EXPECT(b, t) (__builtin_expect(b, t)) +#else +#define FOLLY_DETAIL_BUILTIN_EXPECT(b, t) b +#endif + +// Likeliness annotations +// +// Useful when the author has better knowledge than the compiler of whether +// the branch condition is overwhelmingly likely to take a specific value. +// +// Useful when the author has better knowledge than the compiler of which code +// paths are designed as the fast path and which are designed as the slow path, +// and to force the compiler to optimize for the fast path, even when it is not +// overwhelmingly likely. + +#define FOLLY_LIKELY(x) FOLLY_DETAIL_BUILTIN_EXPECT((x), 1) +#define FOLLY_UNLIKELY(x) FOLLY_DETAIL_BUILTIN_EXPECT((x), 0) + +// Un-namespaced annotations + #undef LIKELY #undef UNLIKELY -#if defined(__GNUC__) && __GNUC__ >= 4 +#if defined(__GNUC__) #define LIKELY(x) (__builtin_expect((x), 1)) #define UNLIKELY(x) (__builtin_expect((x), 0)) #else -- 2.34.1