Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SPIR-V] Enabling SPIR-V builtin lookup in device SYCL mode #1384

Merged
merged 5 commits into from Mar 26, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions clang/lib/Driver/ToolChains/Clang.cpp
Expand Up @@ -4086,6 +4086,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// We want to compile sycl kernels.
CmdArgs.push_back("-fsycl");
CmdArgs.push_back("-fsycl-is-device");
CmdArgs.push_back("-fdeclare-spirv-builtins");
Naghasan marked this conversation as resolved.
Show resolved Hide resolved
// Pass the triple of host when doing SYCL
auto AuxT = llvm::Triple(llvm::sys::getProcessTriple());
std::string NormalizedTriple = AuxT.normalize();
Expand Down
6 changes: 3 additions & 3 deletions clang/lib/Sema/SPIRVBuiltins.td
Expand Up @@ -286,16 +286,16 @@ class ConstOCLSPVBuiltin<string _Name, list<Type> _Signature> :

// OpenCL v1.0/1.2/2.0 s6.1.1: Built-in Scalar Data Types.
def Bool : IntType<"bool", QualType<"BoolTy">, 1>;
def TrueChar : IntType<"char", QualType<"CharTy", 0, 1>, 8>;
def TrueChar : IntType<"char", QualType<"CharTy", 0, 1>, 8>;
def Char : IntType<"schar", QualType<"SignedCharTy", 0, 1>, 8>;
def SChar : IntType<"schar", QualType<"SignedCharTy", 0, 1>, 8>;
def UChar : UIntType<"uchar", QualType<"UnsignedCharTy">, 8>;
def Short : IntType<"short", QualType<"ShortTy", 0, 1>, 16>;
def UShort : UIntType<"ushort", QualType<"UnsignedShortTy">, 16>;
def Int : IntType<"int", QualType<"IntTy", 0, 1>, 32>;
def UInt : UIntType<"uint", QualType<"UnsignedIntTy">, 32>;
def Long : IntType<"long", QualType<"LongTy", 0, 1>, 64>;
def ULong : UIntType<"ulong", QualType<"UnsignedLongTy">, 64>;
def Long : IntType<"long", QualType<"getIntTypeForBitwidth(64, true)", 0, 1>, 64>;
def ULong : UIntType<"ulong", QualType<"getIntTypeForBitwidth(64, false)">, 64>;
def Float : FPType<"float", QualType<"FloatTy">, 32>;
def Double : FPType<"double", QualType<"DoubleTy">, 64>;
def Half : FPType<"half", QualType<"Float16Ty">, 16>;
Expand Down
1 change: 1 addition & 0 deletions libclc/generic/include/func.h
Expand Up @@ -5,5 +5,6 @@
#define _CLC_DECL
#define _CLC_DEF __attribute__((always_inline))
#define _CLC_INLINE __attribute__((always_inline)) inline
#define _CLC_CONVERGENT __attribute__((convergent))

#endif // CLC_FUNC
Expand Up @@ -6,11 +6,7 @@
//
//===----------------------------------------------------------------------===//

#define FN_NAME __CLC_XCONCAT(_Z22__spirv_GroupAsyncCopyI, __SPIRV_GENTYPE_MANGLED, E9ocl_eventN5__spv5ScopeEPU3, __SPIRV_DST_ADDR_SPACE_MANGLED, T_PU3, __SPIRV_SRC_ADDR_SPACE_MANGLED, S3_mmS0_)
_CLC_DECL event_t FN_NAME (
enum Scope scope,
__SPIRV_DST_ADDR_SPACE __SPIRV_GENTYPE *dst,
const __SPIRV_SRC_ADDR_SPACE __SPIRV_GENTYPE *src,
size_t num_elements,
size_t stride,
event_t event);
_CLC_OVERLOAD _CLC_DECL event_t __spirv_GroupAsyncCopy(
unsigned int scope, __SPIRV_DST_ADDR_SPACE __SPIRV_GENTYPE *dst,
const __SPIRV_SRC_ADDR_SPACE __SPIRV_GENTYPE *src, size_t num_elements,
size_t stride, event_t event);
6 changes: 3 additions & 3 deletions libclc/generic/include/spirv/async/wait_group_events.h
Expand Up @@ -6,6 +6,6 @@
//
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
_CLC_DEF void _Z23__spirv_GroupWaitEventsN5__spv5ScopeEjP9ocl_event(
enum Scope scope, int num_events, event_t *event_list);
_CLC_OVERLOAD _CLC_DEF void __spirv_GroupWaitEvents(unsigned int scope,
int num_events,
event_t *event_list);
48 changes: 32 additions & 16 deletions libclc/generic/include/spirv/atomic/atomic_cmpxchg.h
Expand Up @@ -7,22 +7,38 @@
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
_CLC_DECL int _Z29__spirv_AtomicCompareExchangePU3AS3iN5__spv5ScopeENS1_19MemorySemanticsMaskES3_ii(
volatile local int *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, int, int);
_CLC_DECL int _Z29__spirv_AtomicCompareExchangePU3AS1iN5__spv5ScopeENS1_19MemorySemanticsMaskES3_ii(
volatile global int *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, int, int);
_CLC_DECL uint _Z29__spirv_AtomicCompareExchangePU3AS3jN5__spv5ScopeENS1_19MemorySemanticsMaskES3_jj(
volatile local uint *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, uint, uint);
_CLC_DECL uint _Z29__spirv_AtomicCompareExchangePU3AS1jN5__spv5ScopeENS1_19MemorySemanticsMaskES3_jj(
volatile global uint *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, uint, uint);
_CLC_DECL int
_Z29__spirv_AtomicCompareExchangePU3AS3iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_ii(
volatile local int *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, int, int);
_CLC_DECL int
_Z29__spirv_AtomicCompareExchangePU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_ii(
volatile global int *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, int, int);
_CLC_DECL uint
_Z29__spirv_AtomicCompareExchangePU3AS3jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_jj(
volatile local uint *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, uint, uint);
_CLC_DECL uint
_Z29__spirv_AtomicCompareExchangePU3AS1jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_jj(
volatile global uint *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, uint, uint);

#ifdef cl_khr_int64_base_atomics
_CLC_DECL long _Z29__spirv_AtomicCompareExchangePU3AS3lN5__spv5ScopeENS1_19MemorySemanticsMaskES3_ll(
volatile local long *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, long, long);
_CLC_DECL long _Z29__spirv_AtomicCompareExchangePU3AS1lN5__spv5ScopeENS1_19MemorySemanticsMaskES3_ll(
volatile global long *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, long, long);
_CLC_DECL unsigned long _Z29__spirv_AtomicCompareExchangePU3AS3mN5__spv5ScopeENS1_19MemorySemanticsMaskES3_mm(
volatile local unsigned long *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, unsigned long, unsigned long);
_CLC_DECL unsigned long _Z29__spirv_AtomicCompareExchangePU3AS1mN5__spv5ScopeENS1_19MemorySemanticsMaskES3_mm(
volatile global unsigned long *, enum Scope, enum MemorySemanticsMask, enum MemorySemanticsMask, unsigned long, unsigned long);
_CLC_DECL long
_Z29__spirv_AtomicCompareExchangePU3AS3lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_ll(
volatile local long *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, long, long);
_CLC_DECL long
_Z29__spirv_AtomicCompareExchangePU3AS1lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_ll(
volatile global long *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, long, long);
_CLC_DECL unsigned long
_Z29__spirv_AtomicCompareExchangePU3AS3mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_mm(
volatile local unsigned long *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, unsigned long, unsigned long);
_CLC_DECL unsigned long
_Z29__spirv_AtomicCompareExchangePU3AS1mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES3_mm(
volatile global unsigned long *, enum Scope, enum MemorySemanticsMask,
enum MemorySemanticsMask, unsigned long, unsigned long);
#endif
24 changes: 16 additions & 8 deletions libclc/generic/include/spirv/atomic/atomic_dec.h
Expand Up @@ -6,22 +6,30 @@
//
//===----------------------------------------------------------------------===//

_CLC_DECL int _Z24__spirv_AtomicIDecrementPU3AS3iN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL int
_Z24__spirv_AtomicIDecrementPU3AS3iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local int *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL int _Z24__spirv_AtomicIDecrementPU3AS1iN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL int
_Z24__spirv_AtomicIDecrementPU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global int *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL uint _Z24__spirv_AtomicIDecrementPU3AS3jN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL uint
_Z24__spirv_AtomicIDecrementPU3AS3jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local uint *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL uint _Z24__spirv_AtomicIDecrementPU3AS1jN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL uint
_Z24__spirv_AtomicIDecrementPU3AS1jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global uint *, enum Scope, enum MemorySemanticsMask);

#ifdef cl_khr_int64_base_atomics
_CLC_DECL long _Z24__spirv_AtomicIDecrementPU3AS3lN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL long
_Z24__spirv_AtomicIDecrementPU3AS3lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL long _Z24__spirv_AtomicIDecrementPU3AS1lN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL long
_Z24__spirv_AtomicIDecrementPU3AS1lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL unsigned long _Z24__spirv_AtomicIDecrementPU3AS3mN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL unsigned long
_Z24__spirv_AtomicIDecrementPU3AS3mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local unsigned long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL unsigned long _Z24__spirv_AtomicIDecrementPU3AS1mN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL unsigned long
_Z24__spirv_AtomicIDecrementPU3AS1mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global unsigned long *, enum Scope, enum MemorySemanticsMask);
#endif
8 changes: 6 additions & 2 deletions libclc/generic/include/spirv/atomic/atomic_decl.inc
Expand Up @@ -7,8 +7,12 @@
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
#define __CLC_DECLARE_ATOMIC(ADDRSPACE, ADDRSPACE_MANGLED, TYPE, TYPE_MANGLED, NAME, NAME_LEN) \
_CLC_DECL TYPE _Z##NAME_LEN##NAME##PU3##ADDRSPACE_MANGLED##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE##TYPE_MANGLED (volatile ADDRSPACE TYPE *, enum Scope, enum MemorySemanticsMask, TYPE);
#define __CLC_DECLARE_ATOMIC(ADDRSPACE, ADDRSPACE_MANGLED, TYPE, TYPE_MANGLED, \
NAME, NAME_LEN) \
_CLC_DECL TYPE \
_Z##NAME_LEN##NAME##PU3##ADDRSPACE_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
volatile ADDRSPACE TYPE *, enum Scope, enum MemorySemanticsMask, \
TYPE);

#define __CLC_DECLARE_ATOMIC_ADDRSPACE(TYPE, TYPE_MANGLED, NAME, NAME_LEN) \
__CLC_DECLARE_ATOMIC(global, AS1, TYPE, TYPE_MANGLED, NAME, NAME_LEN) \
Expand Down
24 changes: 16 additions & 8 deletions libclc/generic/include/spirv/atomic/atomic_inc.h
Expand Up @@ -6,22 +6,30 @@
//
//===----------------------------------------------------------------------===//

_CLC_DECL int _Z24__spirv_AtomicIIncrementPU3AS3iN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL int
_Z24__spirv_AtomicIIncrementPU3AS3iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local int *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL int _Z24__spirv_AtomicIIncrementPU3AS1iN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL int
_Z24__spirv_AtomicIIncrementPU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global int *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL uint _Z24__spirv_AtomicIIncrementPU3AS3jN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL uint
_Z24__spirv_AtomicIIncrementPU3AS3jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local uint *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL uint _Z24__spirv_AtomicIIncrementPU3AS1jN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL uint
_Z24__spirv_AtomicIIncrementPU3AS1jN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global uint *, enum Scope, enum MemorySemanticsMask);

#ifdef cl_khr_int64_base_atomics
_CLC_DECL long _Z24__spirv_AtomicIIncrementPU3AS3lN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL long
_Z24__spirv_AtomicIIncrementPU3AS3lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL long _Z24__spirv_AtomicIIncrementPU3AS1lN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL long
_Z24__spirv_AtomicIIncrementPU3AS1lN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL unsigned long _Z24__spirv_AtomicIIncrementPU3AS3mN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL unsigned long
_Z24__spirv_AtomicIIncrementPU3AS3mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile local unsigned long *, enum Scope, enum MemorySemanticsMask);
_CLC_DECL unsigned long _Z24__spirv_AtomicIIncrementPU3AS1mN5__spv5ScopeENS1_19MemorySemanticsMaskE(
_CLC_DECL unsigned long
_Z24__spirv_AtomicIIncrementPU3AS1mN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE(
volatile global unsigned long *, enum Scope, enum MemorySemanticsMask);
#endif
7 changes: 4 additions & 3 deletions libclc/generic/include/spirv/atomic/atomic_load.h
Expand Up @@ -7,9 +7,10 @@
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
#define DECL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_DECL TYPE _Z18__spirv_AtomicLoadPU3##AS_MANGLED##K##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE( \
volatile AS const TYPE *, enum Scope, enum MemorySemanticsMask);
#define DECL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_DECL TYPE \
_Z18__spirv_AtomicLoadPU3##AS_MANGLED##K##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE( \
volatile AS const TYPE *, enum Scope, enum MemorySemanticsMask);

#define DECL_AS(TYPE, TYPE_MANGLED) \
DECL(TYPE, TYPE_MANGLED, global, AS1) \
Expand Down
7 changes: 4 additions & 3 deletions libclc/generic/include/spirv/atomic/atomic_store.h
Expand Up @@ -7,9 +7,10 @@
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
#define DECL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_DECL void _Z19__spirv_AtomicStorePU3##AS_MANGLED##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE##TYPE_MANGLED( \
volatile AS TYPE *, enum Scope, enum MemorySemanticsMask, TYPE);
#define DECL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_DECL void \
_Z19__spirv_AtomicStorePU3##AS_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
volatile AS TYPE *, enum Scope, enum MemorySemanticsMask, TYPE);

#define DECL_AS(TYPE, TYPE_MANGLED) \
DECL(TYPE, TYPE_MANGLED, global, AS1) \
Expand Down
6 changes: 4 additions & 2 deletions libclc/generic/include/spirv/atomic/atomic_xchg.h
Expand Up @@ -13,8 +13,10 @@
#define __SPIRV_INT64_BASE

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
_CLC_DECL float _Z22__spirv_AtomicExchangePU3AS3fN5__spv5ScopeENS1_19MemorySemanticsMaskEf(
_CLC_DECL float
_Z22__spirv_AtomicExchangePU3AS3fN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagEf(
volatile local float *, enum Scope, enum MemorySemanticsMask, float);
_CLC_DECL float _Z22__spirv_AtomicExchangePU3AS1fN5__spv5ScopeENS1_19MemorySemanticsMaskEf(
_CLC_DECL float
_Z22__spirv_AtomicExchangePU3AS1fN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagEf(
volatile global float *, enum Scope, enum MemorySemanticsMask, float);
#include <spirv/atomic/atomic_decl.inc>
8 changes: 5 additions & 3 deletions libclc/generic/include/spirv/synchronization/barrier.h
Expand Up @@ -6,6 +6,8 @@
//
//===----------------------------------------------------------------------===//

// TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling.
_CLC_DECL void _Z22__spirv_ControlBarrierN5__spv5ScopeES0_j(enum Scope scope, enum Scope memory, unsigned int semantics);
_CLC_DECL void _Z21__spirv_MemoryBarrierN5__spv5ScopeEj(enum Scope scope, unsigned int semantics);
_CLC_OVERLOAD _CLC_DECL void __spirv_ControlBarrier(unsigned int scope,
unsigned int memory,
unsigned int semantics);
_CLC_OVERLOAD _CLC_DECL void __spirv_MemoryBarrier(unsigned int scope,
unsigned int semantics);
6 changes: 4 additions & 2 deletions libclc/generic/lib/async/async_work_group_strided_copy.inc
Expand Up @@ -8,7 +8,8 @@ _CLC_OVERLOAD _CLC_DEF event_t async_work_group_strided_copy(
size_t stride,
event_t event) {

return __CLC_XCONCAT(_Z22__spirv_GroupAsyncCopyI, __CLC_GENTYPE_MANGLED, E9ocl_eventN5__spv5ScopeEPU3AS1T_PU3AS3S3_mmS0_)(Workgroup, dst, src, num_gentypes, stride, event);
return __spirv_GroupAsyncCopy(Workgroup, dst, src, num_gentypes, stride,
event);
}

_CLC_OVERLOAD _CLC_DEF event_t async_work_group_strided_copy(
Expand All @@ -17,7 +18,8 @@ _CLC_OVERLOAD _CLC_DEF event_t async_work_group_strided_copy(
size_t num_gentypes,
size_t stride,
event_t event) {
return __CLC_XCONCAT(_Z22__spirv_GroupAsyncCopyI, __CLC_GENTYPE_MANGLED, E9ocl_eventN5__spv5ScopeEPU3AS3T_PU3AS1S3_mmS0_)(Workgroup, dst, src, num_gentypes, stride, event);
return __spirv_GroupAsyncCopy(Workgroup, dst, src, num_gentypes, stride,
event);
}

#undef __CLC_XCONCAT
Expand Down
2 changes: 1 addition & 1 deletion libclc/generic/lib/async/wait_group_events.cl
Expand Up @@ -2,5 +2,5 @@
#include <clc/clc.h>

_CLC_DEF void wait_group_events(int num_events, event_t *event_list) {
_Z23__spirv_GroupWaitEventsN5__spv5ScopeEjP9ocl_event(Workgroup, num_events, event_list);
__spirv_GroupWaitEvents(Workgroup, num_events, event_list);
}
13 changes: 7 additions & 6 deletions libclc/generic/lib/atomic/atomic_add.cl
@@ -1,12 +1,13 @@
#include <clc/clc.h>
#include <spirv/spirv.h>

#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_OVERLOAD _CLC_DEF TYPE atomic_add(volatile AS TYPE *p, TYPE val) { \
/* TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling. */ \
return _Z18__spirv_AtomicIAddPU3##AS_MANGLED##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE##TYPE_MANGLED( \
p, Device, SequentiallyConsistent, val); \
}
#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_OVERLOAD _CLC_DEF TYPE atomic_add(volatile AS TYPE *p, TYPE val) { \
/* TODO: Stop manually mangling this name. Need C++ namespaces to get the \
* exact mangling. */ \
return _Z18__spirv_AtomicIAddPU3##AS_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
p, Device, SequentiallyConsistent, val); \
}

IMPL(int, i, global, AS1)
IMPL(unsigned int, j, global, AS1)
Expand Down
13 changes: 7 additions & 6 deletions libclc/generic/lib/atomic/atomic_and.cl
@@ -1,12 +1,13 @@
#include <clc/clc.h>
#include <spirv/spirv.h>

#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_OVERLOAD _CLC_DEF TYPE atomic_and(volatile AS TYPE *p, TYPE val) { \
/* TODO: Stop manually mangling this name. Need C++ namespaces to get the exact mangling. */ \
return _Z17__spirv_AtomicAndPU3##AS_MANGLED##TYPE_MANGLED##N5__spv5ScopeENS1_19MemorySemanticsMaskE##TYPE_MANGLED( \
p, Device, SequentiallyConsistent, val); \
}
#define IMPL(TYPE, TYPE_MANGLED, AS, AS_MANGLED) \
_CLC_OVERLOAD _CLC_DEF TYPE atomic_and(volatile AS TYPE *p, TYPE val) { \
/* TODO: Stop manually mangling this name. Need C++ namespaces to get the \
* exact mangling. */ \
return _Z17__spirv_AtomicAndPU3##AS_MANGLED##TYPE_MANGLED##N5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagE##TYPE_MANGLED( \
p, Device, SequentiallyConsistent, val); \
}

IMPL(int, i, global, AS1)
IMPL(unsigned int, j, global, AS1)
Expand Down