Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/clang/lib/Headers/__clang_spirv_builtins.h
213766 views
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
54
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_num_workgroups) __size_t
55
__spirv_NumWorkgroups(int);
56
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_workgroup_size) __size_t
57
__spirv_WorkgroupSize(int);
58
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_workgroup_id) __size_t
59
__spirv_WorkgroupId(int);
60
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_local_invocation_id) __size_t
61
__spirv_LocalInvocationId(int);
62
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_invocation_id) __size_t
63
__spirv_GlobalInvocationId(int);
64
65
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_size) __size_t
66
__spirv_GlobalSize(int);
67
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_offset) __size_t
68
__spirv_GlobalOffset(int);
69
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_size) __uint32_t
70
__spirv_SubgroupSize();
71
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_max_size) __uint32_t
72
__spirv_SubgroupMaxSize();
73
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_num_subgroups) __uint32_t
74
__spirv_NumSubgroups();
75
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_id) __uint32_t
76
__spirv_SubgroupId();
77
extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_local_invocation_id)
78
__uint32_t __spirv_SubgroupLocalInvocationId();
79
80
// OpGenericCastToPtrExplicit
81
82
extern __SPIRV_overloadable
83
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
84
__global void *__spirv_GenericCastToPtrExplicit_ToGlobal(__generic void *,
85
int) __SPIRV_NOEXCEPT;
86
extern __SPIRV_overloadable
87
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
88
__global const void *
89
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic const void *,
90
int) __SPIRV_NOEXCEPT;
91
extern __SPIRV_overloadable
92
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
93
__global volatile void *
94
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic volatile void *,
95
int) __SPIRV_NOEXCEPT;
96
extern __SPIRV_overloadable
97
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
98
__global const volatile void *
99
__spirv_GenericCastToPtrExplicit_ToGlobal(__generic const volatile void *,
100
int) __SPIRV_NOEXCEPT;
101
extern __SPIRV_overloadable
102
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
103
__local void *__spirv_GenericCastToPtrExplicit_ToLocal(__generic void *,
104
int) __SPIRV_NOEXCEPT;
105
extern __SPIRV_overloadable
106
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
107
__local const void *
108
__spirv_GenericCastToPtrExplicit_ToLocal(__generic const void *,
109
int) __SPIRV_NOEXCEPT;
110
extern __SPIRV_overloadable
111
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
112
__local volatile void *
113
__spirv_GenericCastToPtrExplicit_ToLocal(__generic volatile void *,
114
int) __SPIRV_NOEXCEPT;
115
extern __SPIRV_overloadable
116
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
117
__local const volatile void *
118
__spirv_GenericCastToPtrExplicit_ToLocal(__generic const volatile void *,
119
int) __SPIRV_NOEXCEPT;
120
extern __SPIRV_overloadable
121
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
122
__private void *
123
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic void *,
124
int) __SPIRV_NOEXCEPT;
125
extern __SPIRV_overloadable
126
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
127
__private const void *
128
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic const void *,
129
int) __SPIRV_NOEXCEPT;
130
extern __SPIRV_overloadable
131
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
132
__private volatile void *
133
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic volatile void *,
134
int) __SPIRV_NOEXCEPT;
135
extern __SPIRV_overloadable
136
__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)
137
__private const volatile void *
138
__spirv_GenericCastToPtrExplicit_ToPrivate(__generic const volatile void *,
139
int) __SPIRV_NOEXCEPT;
140
141
// OpGenericCastToPtr
142
143
static __SPIRV_overloadable __SPIRV_inline __global void *
144
__spirv_GenericCastToPtr_ToGlobal(__generic void *p, int) __SPIRV_NOEXCEPT {
145
return (__global void *)p;
146
}
147
static __SPIRV_overloadable __SPIRV_inline __global const void *
148
__spirv_GenericCastToPtr_ToGlobal(__generic const void *p,
149
int) __SPIRV_NOEXCEPT {
150
return (__global const void *)p;
151
}
152
static __SPIRV_overloadable __SPIRV_inline __global volatile void *
153
__spirv_GenericCastToPtr_ToGlobal(__generic volatile void *p,
154
int) __SPIRV_NOEXCEPT {
155
return (__global volatile void *)p;
156
}
157
static __SPIRV_overloadable __SPIRV_inline __global const volatile void *
158
__spirv_GenericCastToPtr_ToGlobal(__generic const volatile void *p,
159
int) __SPIRV_NOEXCEPT {
160
return (__global const volatile void *)p;
161
}
162
static __SPIRV_overloadable __SPIRV_inline __local void *
163
__spirv_GenericCastToPtr_ToLocal(__generic void *p, int) __SPIRV_NOEXCEPT {
164
return (__local void *)p;
165
}
166
static __SPIRV_overloadable __SPIRV_inline __local const void *
167
__spirv_GenericCastToPtr_ToLocal(__generic const void *p,
168
int) __SPIRV_NOEXCEPT {
169
return (__local const void *)p;
170
}
171
static __SPIRV_overloadable __SPIRV_inline __local volatile void *
172
__spirv_GenericCastToPtr_ToLocal(__generic volatile void *p,
173
int) __SPIRV_NOEXCEPT {
174
return (__local volatile void *)p;
175
}
176
static __SPIRV_overloadable __SPIRV_inline __local const volatile void *
177
__spirv_GenericCastToPtr_ToLocal(__generic const volatile void *p,
178
int) __SPIRV_NOEXCEPT {
179
return (__local const volatile void *)p;
180
}
181
static __SPIRV_overloadable __SPIRV_inline __private void *
182
__spirv_GenericCastToPtr_ToPrivate(__generic void *p, int) __SPIRV_NOEXCEPT {
183
return (__private void *)p;
184
}
185
static __SPIRV_overloadable __SPIRV_inline __private const void *
186
__spirv_GenericCastToPtr_ToPrivate(__generic const void *p,
187
int) __SPIRV_NOEXCEPT {
188
return (__private const void *)p;
189
}
190
static __SPIRV_overloadable __SPIRV_inline __private volatile void *
191
__spirv_GenericCastToPtr_ToPrivate(__generic volatile void *p,
192
int) __SPIRV_NOEXCEPT {
193
return (__private volatile void *)p;
194
}
195
static __SPIRV_overloadable __SPIRV_inline __private const volatile void *
196
__spirv_GenericCastToPtr_ToPrivate(__generic const volatile void *p,
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 */
218
219