DPC++ Runtime
Runtime libraries for oneAPI DPC++
defines.hpp
Go to the documentation of this file.
1 //==---------- defines.hpp ----- Preprocessor directives -------------------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #pragma once
10 
11 #include <sycl/detail/defines_elementary.hpp> // for __SYCL_ID_QUERIES_FIT_...
12 
13 #if __SYCL_ID_QUERIES_FIT_IN_INT__ && __has_builtin(__builtin_assume)
14 #include <climits>
15 #define __SYCL_ASSUME_INT(x) __builtin_assume((x) <= INT_MAX)
16 #else
17 #define __SYCL_ASSUME_INT(x)
18 #if __SYCL_ID_QUERIES_FIT_IN_INT__ && !__has_builtin(__builtin_assume)
19 #warning "No assumptions will be emitted due to no __builtin_assume available"
20 #endif
21 #endif
22 
23 // FIXME Check for __SYCL_DEVICE_ONLY__ can be removed if implementation of
24 // __has_attribute is fixed to consider LangOpts when generating attributes in
25 // tablegen.
26 #if __has_attribute(sycl_special_class) && (defined __SYCL_DEVICE_ONLY__)
27 #define __SYCL_SPECIAL_CLASS __attribute__((sycl_special_class))
28 #else
29 #define __SYCL_SPECIAL_CLASS
30 #endif
31 
32 // FIXME Check for __SYCL_DEVICE_ONLY__ can be removed if implementation of
33 // __has_attribute is fixed to consider LangOpts when generating attributes in
34 // tablegen.
35 #if __has_cpp_attribute(__sycl_detail__::sycl_type) && \
36  (defined __SYCL_DEVICE_ONLY__)
37 #define __SYCL_TYPE(x) [[__sycl_detail__::sycl_type(x)]]
38 #else
39 #define __SYCL_TYPE(x)
40 #endif
41 
42 #if __has_cpp_attribute(clang::builtin_alias)
43 #define __SYCL_BUILTIN_ALIAS(x) [[clang::builtin_alias(x)]]
44 #else
45 #define __SYCL_BUILTIN_ALIAS(x)
46 #endif