Go to the documentation of this file.
18 #ifndef viskores_internal_Assume_h
19 #define viskores_internal_Assume_h
35 #define VISKORES_ASSUME(cond) \
36 VISKORES_SWALLOW_SEMICOLON_PRE_BLOCK \
38 const bool c = cond; \
39 VISKORES_ASSERT("Bad assumption in VISKORES_ASSUME: " #cond&& c); \
40 VISKORES_ASSUME_IMPL(c); \
43 VISKORES_SWALLOW_SEMICOLON_POST_BLOCK
46 #if defined(VISKORES_CUDA_DEVICE_PASS)
49 #define VISKORES_ASSUME_IMPL(cond) (void)0
52 #if defined(VISKORES_MSVC)
53 #define VISKORES_ASSUME_IMPL(cond) __assume(cond)
54 #elif defined(VISKORES_ICC) && !defined(__GNUC__)
55 #define VISKORES_ASSUME_IMPL(cond) __assume(cond)
56 #elif (defined(VISKORES_GCC) || defined(VISKORES_ICC)) && \
57 (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
59 #define VISKORES_ASSUME_IMPL(cond) \
61 __builtin_unreachable()
62 #elif defined(VISKORES_CLANG)
63 #define VISKORES_ASSUME_IMPL(cond) \
65 __builtin_unreachable()
67 #define VISKORES_ASSUME_IMPL(cond) (void)0
72 #endif // viskores_internal_Assume_h