Path: blob/main/contrib/llvm-project/clang/lib/Headers/__clang_spirv_builtins.h
213766 views
/*===---- spirv_builtin_vars.h - SPIR-V built-in ---------------------------===1*2* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3* See https://llvm.org/LICENSE.txt for license information.4* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5*6*===-----------------------------------------------------------------------===7*/89#ifndef __SPIRV_BUILTIN_VARS_H10#define __SPIRV_BUILTIN_VARS_H1112#if __cplusplus >= 201103L13#define __SPIRV_NOEXCEPT noexcept14#else15#define __SPIRV_NOEXCEPT16#endif1718#pragma push_macro("__size_t")19#pragma push_macro("__uint32_t")20#pragma push_macro("__uint64_t")21#define __size_t __SIZE_TYPE__22#define __uint32_t __UINT32_TYPE__2324#define __SPIRV_overloadable __attribute__((overloadable))25#define __SPIRV_convergent __attribute__((convergent))26#define __SPIRV_inline __attribute__((always_inline))2728#define __global __attribute__((opencl_global))29#define __local __attribute__((opencl_local))30#define __private __attribute__((opencl_private))31#define __constant __attribute__((opencl_constant))32#ifdef __SYCL_DEVICE_ONLY__33#define __generic34#else35#define __generic __attribute__((opencl_generic))36#endif3738// Check if SPIR-V builtins are supported.39// As the translator doesn't use the LLVM intrinsics (which would be emitted if40// we use the SPIR-V builtins) we can't rely on the SPIRV32/SPIRV64 etc macros41// to establish if we can use the builtin alias. We disable builtin altogether42// if we do not intent to use the backend. So instead of use target macros, rely43// on a __has_builtin test.44#if (__has_builtin(__builtin_spirv_num_workgroups))45#define __SPIRV_BUILTIN_ALIAS(builtin) \46__attribute__((clang_builtin_alias(builtin)))47#else48#define __SPIRV_BUILTIN_ALIAS(builtin)49#endif5051// Builtin IDs and sizes5253extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_num_workgroups) __size_t54__spirv_NumWorkgroups(int);55extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_workgroup_size) __size_t56__spirv_WorkgroupSize(int);57extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_workgroup_id) __size_t58__spirv_WorkgroupId(int);59extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_local_invocation_id) __size_t60__spirv_LocalInvocationId(int);61extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_invocation_id) __size_t62__spirv_GlobalInvocationId(int);6364extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_size) __size_t65__spirv_GlobalSize(int);66extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_global_offset) __size_t67__spirv_GlobalOffset(int);68extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_size) __uint32_t69__spirv_SubgroupSize();70extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_max_size) __uint32_t71__spirv_SubgroupMaxSize();72extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_num_subgroups) __uint32_t73__spirv_NumSubgroups();74extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_id) __uint32_t75__spirv_SubgroupId();76extern __SPIRV_BUILTIN_ALIAS(__builtin_spirv_subgroup_local_invocation_id)77__uint32_t __spirv_SubgroupLocalInvocationId();7879// OpGenericCastToPtrExplicit8081extern __SPIRV_overloadable82__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)83__global void *__spirv_GenericCastToPtrExplicit_ToGlobal(__generic void *,84int) __SPIRV_NOEXCEPT;85extern __SPIRV_overloadable86__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)87__global const void *88__spirv_GenericCastToPtrExplicit_ToGlobal(__generic const void *,89int) __SPIRV_NOEXCEPT;90extern __SPIRV_overloadable91__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)92__global volatile void *93__spirv_GenericCastToPtrExplicit_ToGlobal(__generic volatile void *,94int) __SPIRV_NOEXCEPT;95extern __SPIRV_overloadable96__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)97__global const volatile void *98__spirv_GenericCastToPtrExplicit_ToGlobal(__generic const volatile void *,99int) __SPIRV_NOEXCEPT;100extern __SPIRV_overloadable101__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)102__local void *__spirv_GenericCastToPtrExplicit_ToLocal(__generic void *,103int) __SPIRV_NOEXCEPT;104extern __SPIRV_overloadable105__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)106__local const void *107__spirv_GenericCastToPtrExplicit_ToLocal(__generic const void *,108int) __SPIRV_NOEXCEPT;109extern __SPIRV_overloadable110__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)111__local volatile void *112__spirv_GenericCastToPtrExplicit_ToLocal(__generic volatile void *,113int) __SPIRV_NOEXCEPT;114extern __SPIRV_overloadable115__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)116__local const volatile void *117__spirv_GenericCastToPtrExplicit_ToLocal(__generic const volatile void *,118int) __SPIRV_NOEXCEPT;119extern __SPIRV_overloadable120__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)121__private void *122__spirv_GenericCastToPtrExplicit_ToPrivate(__generic void *,123int) __SPIRV_NOEXCEPT;124extern __SPIRV_overloadable125__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)126__private const void *127__spirv_GenericCastToPtrExplicit_ToPrivate(__generic const void *,128int) __SPIRV_NOEXCEPT;129extern __SPIRV_overloadable130__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)131__private volatile void *132__spirv_GenericCastToPtrExplicit_ToPrivate(__generic volatile void *,133int) __SPIRV_NOEXCEPT;134extern __SPIRV_overloadable135__SPIRV_BUILTIN_ALIAS(__builtin_spirv_generic_cast_to_ptr_explicit)136__private const volatile void *137__spirv_GenericCastToPtrExplicit_ToPrivate(__generic const volatile void *,138int) __SPIRV_NOEXCEPT;139140// OpGenericCastToPtr141142static __SPIRV_overloadable __SPIRV_inline __global void *143__spirv_GenericCastToPtr_ToGlobal(__generic void *p, int) __SPIRV_NOEXCEPT {144return (__global void *)p;145}146static __SPIRV_overloadable __SPIRV_inline __global const void *147__spirv_GenericCastToPtr_ToGlobal(__generic const void *p,148int) __SPIRV_NOEXCEPT {149return (__global const void *)p;150}151static __SPIRV_overloadable __SPIRV_inline __global volatile void *152__spirv_GenericCastToPtr_ToGlobal(__generic volatile void *p,153int) __SPIRV_NOEXCEPT {154return (__global volatile void *)p;155}156static __SPIRV_overloadable __SPIRV_inline __global const volatile void *157__spirv_GenericCastToPtr_ToGlobal(__generic const volatile void *p,158int) __SPIRV_NOEXCEPT {159return (__global const volatile void *)p;160}161static __SPIRV_overloadable __SPIRV_inline __local void *162__spirv_GenericCastToPtr_ToLocal(__generic void *p, int) __SPIRV_NOEXCEPT {163return (__local void *)p;164}165static __SPIRV_overloadable __SPIRV_inline __local const void *166__spirv_GenericCastToPtr_ToLocal(__generic const void *p,167int) __SPIRV_NOEXCEPT {168return (__local const void *)p;169}170static __SPIRV_overloadable __SPIRV_inline __local volatile void *171__spirv_GenericCastToPtr_ToLocal(__generic volatile void *p,172int) __SPIRV_NOEXCEPT {173return (__local volatile void *)p;174}175static __SPIRV_overloadable __SPIRV_inline __local const volatile void *176__spirv_GenericCastToPtr_ToLocal(__generic const volatile void *p,177int) __SPIRV_NOEXCEPT {178return (__local const volatile void *)p;179}180static __SPIRV_overloadable __SPIRV_inline __private void *181__spirv_GenericCastToPtr_ToPrivate(__generic void *p, int) __SPIRV_NOEXCEPT {182return (__private void *)p;183}184static __SPIRV_overloadable __SPIRV_inline __private const void *185__spirv_GenericCastToPtr_ToPrivate(__generic const void *p,186int) __SPIRV_NOEXCEPT {187return (__private const void *)p;188}189static __SPIRV_overloadable __SPIRV_inline __private volatile void *190__spirv_GenericCastToPtr_ToPrivate(__generic volatile void *p,191int) __SPIRV_NOEXCEPT {192return (__private volatile void *)p;193}194static __SPIRV_overloadable __SPIRV_inline __private const volatile void *195__spirv_GenericCastToPtr_ToPrivate(__generic const volatile void *p,196int) __SPIRV_NOEXCEPT {197return (__private const volatile void *)p;198}199200#pragma pop_macro("__size_t")201#pragma pop_macro("__uint32_t")202#pragma pop_macro("__uint64_t")203204#undef __SPIRV_overloadable205#undef __SPIRV_convergent206#undef __SPIRV_inline207208#undef __global209#undef __local210#undef __constant211#undef __generic212213#undef __SPIRV_BUILTIN_ALIAS214#undef __SPIRV_NOEXCEPT215216#endif /* __SPIRV_BUILTIN_VARS_H */217218219