All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
hints.h
Go to the documentation of this file.
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7#ifndef PXR_BASE_ARCH_HINTS_H
8#define PXR_BASE_ARCH_HINTS_H
9
10#include "pxr/base/arch/defines.h"
11
21
22#if defined(ARCH_COMPILER_GCC) || defined(ARCH_COMPILER_CLANG)
23
24#define ARCH_LIKELY(x) (__builtin_expect((bool)(x), true))
25#define ARCH_UNLIKELY(x) (__builtin_expect((bool)(x), false))
26
27#else
28
29#define ARCH_LIKELY(x) (x)
30#define ARCH_UNLIKELY(x) (x)
31
32#endif
33
49
50#if defined(ARCH_COMPILER_GCC) || \
51 defined(ARCH_COMPILER_CLANG) || \
52 defined(ARCH_COMPILER_ICC)
53
54// Intentionally using __builtin_unreachable on clang for consistency, since
55// __builtin_assume does not evaluate the expression, and our only option on gcc
56// is the __builtin_unreachable branch.
57
58#define ARCH_GUARANTEE_TO_COMPILER(x) \
59 if (static_cast<bool>(x)) { } else { __builtin_unreachable(); }
60
61#else
62
63#define ARCH_GUARANTEE_TO_COMPILER(x)
64
65#endif
66
67
68#endif // PXR_BASE_ARCH_HINTS_H