clang 22.0.0git
__clang_spirv_builtins.h
Go to the documentation of this file.
1/*===---- spirv_builtin_vars.h - SPIR-V built-in ---------------------------===
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
10#ifndef __SPIRV_BUILTIN_VARS_H
11#define __SPIRV_BUILTIN_VARS_H
12
13#if __cplusplus >= 201103L
14#define __SPIRV_NOEXCEPT noexcept
15#else
16#define __SPIRV_NOEXCEPT
17#endif
18
19#pragma push_macro("__size_t")
20#pragma push_macro("__uint32_t")
21#pragma push_macro("__uint64_t")
22#define __size_t __SIZE_TYPE__
23#define __uint32_t __UINT32_TYPE__
24
25#define __SPIRV_overloadable __attribute__((overloadable))
26#define __SPIRV_convergent __attribute__((convergent))
27#define __SPIRV_inline __attribute__((always_inline))
28
29#define __global __attribute__((opencl_global))
30#define __local __attribute__((opencl_local))
31#define __private __attribute__((opencl_private))
32#define __constant __attribute__((opencl_constant))
33#ifdef __SYCL_DEVICE_ONLY__
34#define __generic
35#else
36#define __generic __attribute__((opencl_generic))
37#endif
38
39// Check if SPIR-V builtins are supported.
40// As the translator doesn't use the LLVM intrinsics (which would be emitted if
41// we use the SPIR-V builtins) we can't rely on the SPIRV32/SPIRV64 etc macros
42// to establish if we can use the builtin alias. We disable builtin altogether
43// if we do not intent to use the backend. So instead of use target macros, rely
44// on a __has_builtin test.
45#if (__has_builtin(__builtin_spirv_num_workgroups))
46#define __SPIRV_BUILTIN_ALIAS(builtin) \
47 __attribute__((clang_builtin_alias(builtin)))
48#else
49#define __SPIRV_BUILTIN_ALIAS(builtin)
50#endif
51
52// Builtin IDs and sizes
53
54extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_num_workgroups) __size_t
55 __spirv_BuiltInNumWorkgroups(int);
56extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_workgroup_size) __size_t
57 __spirv_BuiltInWorkgroupSize(int);
58extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_workgroup_id) __size_t
59 __spirv_BuiltInWorkgroupId(int);
60extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_local_invocation_id) __size_t
61 __spirv_BuiltInLocalInvocationId(int);
62extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_invocation_id) __size_t
63 __spirv_BuiltInGlobalInvocationId(int);
64
65extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_size) __size_t
66 __spirv_BuiltInGlobalSize(int);
67extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_offset) __size_t
68 __spirv_BuiltInGlobalOffset(int);
69extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_size) __uint32_t
70 __spirv_BuiltInSubgroupSize();
71extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_max_size) __uint32_t
72 __spirv_BuiltInSubgroupMaxSize();
73extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_num_subgroups) __uint32_t
74 __spirv_BuiltInNumSubgroups();
75extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_id) __uint32_t
76 __spirv_BuiltInSubgroupId();
77extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_local_invocation_id)
78 __uint32_t __spirv_BuiltInSubgroupLocalInvocationId();
79
80// OpGenericCastToPtrExplicit
81
83__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
87__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
88__global const void *
92__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
93__global volatile void *
97__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
98__global const volatile void *
100 int) __SPIRV_NOEXCEPT;
102__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
104 int) __SPIRV_NOEXCEPT;
106__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
107__local const void *
109 int) __SPIRV_NOEXCEPT;
111__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
112__local volatile void *
114 int) __SPIRV_NOEXCEPT;
116__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
117__local const volatile void *
119 int) __SPIRV_NOEXCEPT;
121__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
122__private void *
124 int) __SPIRV_NOEXCEPT;
126__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
127__private const void *
129 int) __SPIRV_NOEXCEPT;
131__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
132__private volatile void *
134 int) __SPIRV_NOEXCEPT;
136__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
137__private const volatile void *
139 int) __SPIRV_NOEXCEPT;
140
141// OpGenericCastToPtr
142
145 return (__global void *)p;
146}
149 int) __SPIRV_NOEXCEPT {
150 return (__global const void *)p;
151}
152static __SPIRV_overloadable __SPIRV_inline __global volatile void *
154 int) __SPIRV_NOEXCEPT {
155 return (__global volatile void *)p;
156}
157static __SPIRV_overloadable __SPIRV_inline __global const volatile void *
159 int) __SPIRV_NOEXCEPT {
160 return (__global const volatile void *)p;
161}
164 return (__local void *)p;
165}
168 int) __SPIRV_NOEXCEPT {
169 return (__local const void *)p;
170}
171static __SPIRV_overloadable __SPIRV_inline __local volatile void *
173 int) __SPIRV_NOEXCEPT {
174 return (__local volatile void *)p;
175}
176static __SPIRV_overloadable __SPIRV_inline __local const volatile void *
178 int) __SPIRV_NOEXCEPT {
179 return (__local const volatile void *)p;
180}
183 return (__private void *)p;
184}
187 int) __SPIRV_NOEXCEPT {
188 return (__private const void *)p;
189}
190static __SPIRV_overloadable __SPIRV_inline __private volatile void *
192 int) __SPIRV_NOEXCEPT {
193 return (__private volatile void *)p;
194}
195static __SPIRV_overloadable __SPIRV_inline __private const volatile void *
197 int) __SPIRV_NOEXCEPT {
198 return (__private const volatile void *)p;
199}
200
201#pragma pop_macro("__size_t")
202#pragma pop_macro("__uint32_t")
203#pragma pop_macro("__uint64_t")
204
205#undef __SPIRV_overloadable
206#undef __SPIRV_convergent
207#undef __SPIRV_inline
208
209#undef __global
210#undef __local
211#undef __constant
212#undef __generic
213
214#undef __SPIRV_BUILTIN_ALIAS
215#undef __SPIRV_NOEXCEPT
216
217#endif /* __SPIRV_BUILTIN_VARS_H */
#define __global
#define __SPIRV_BUILTIN_ALIAS(builtin)
#define __local
__SPIRV_overloadable __global void * __spirv_GenericCastToPtrExplicit_ToGlobal(__generic void *, int) __SPIRV_NOEXCEPT
#define __generic
#define __SPIRV_inline
#define __private
#define __uint32_t
static __SPIRV_overloadable __SPIRV_inline __private void * __spirv_GenericCastToPtr_ToPrivate(__generic void *p, int) __SPIRV_NOEXCEPT
__SPIRV_overloadable __private void * __spirv_GenericCastToPtrExplicit_ToPrivate(__generic void *, int) __SPIRV_NOEXCEPT
#define __SPIRV_NOEXCEPT
__SPIRV_overloadable __local void * __spirv_GenericCastToPtrExplicit_ToLocal(__generic void *, int) __SPIRV_NOEXCEPT
static __SPIRV_overloadable __SPIRV_inline __local void * __spirv_GenericCastToPtr_ToLocal(__generic void *p, int) __SPIRV_NOEXCEPT
#define __SPIRV_overloadable
#define __size_t
static __SPIRV_overloadable __SPIRV_inline __global void * __spirv_GenericCastToPtr_ToGlobal(__generic void *p, int) __SPIRV_NOEXCEPT