Skip to content

Commit 316418d

Browse files
authored
[SYCL] Move Subgroup*INTEL SPIR-V built-in declarations to clang SPIRVBuiltins.td (#17732)
Motivation is similar to c040f9a : unify with SPV-IR mangling. SubgroupBlockReadINTEL is not handled in this PR. SPV-IR appends return type to mangled function name. It might be simpler for SYCL header to keep current mangling.
1 parent ba90882 commit 316418d

File tree

10 files changed

+913
-323
lines changed

10 files changed

+913
-323
lines changed

clang/lib/Sema/SPIRVBuiltins.td

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,42 @@ foreach name = ["GroupLogicalAndKHR", "GroupLogicalOrKHR"] in {
984984
def : SPVBuiltin<name, [Bool, Int, Int, Bool], Attr.Convergent>;
985985
}
986986

987+
def SubgroupShuffleINTELVecType
988+
: GenericType<"SubgroupShuffleINTELVecType",
989+
TypeList<[Char, UChar, Short, UShort, Int, UInt, Float]>,
990+
VecNoScalar>;
991+
992+
foreach name = ["SubgroupShuffleINTEL", "SubgroupShuffleXorINTEL"] in {
993+
def : SPVBuiltin<name, [AGenType1, AGenType1, UInt]>;
994+
def : SPVBuiltin<name, [SubgroupShuffleINTELVecType,
995+
SubgroupShuffleINTELVecType, UInt]>;
996+
}
997+
998+
foreach name = ["SubgroupShuffleUpINTEL", "SubgroupShuffleDownINTEL"] in {
999+
def : SPVBuiltin<name, [AGenType1, AGenType1, AGenType1, UInt]>;
1000+
def : SPVBuiltin<name, [SubgroupShuffleINTELVecType,
1001+
SubgroupShuffleINTELVecType,
1002+
SubgroupShuffleINTELVecType, UInt]>;
1003+
}
1004+
1005+
foreach name = ["SubgroupBlockWriteINTEL"] in {
1006+
foreach AS = [GlobalAS, LocalAS] in {
1007+
foreach Ty = TLUnsignedInts.List in {
1008+
def : SPVBuiltin<name, [Void, PointerType<Ty, AS>, Ty]>;
1009+
}
1010+
foreach Ty = [UChar, UShort] in {
1011+
foreach v = [2, 4, 8, 16] in {
1012+
def : SPVBuiltin<name, [Void, PointerType<Ty, AS>, VectorType<Ty, v>]>;
1013+
}
1014+
}
1015+
foreach Ty = [UInt, ULong] in {
1016+
foreach v = [2, 4, 8] in {
1017+
def : SPVBuiltin<name, [Void, PointerType<Ty, AS>, VectorType<Ty, v>]>;
1018+
}
1019+
}
1020+
}
1021+
}
1022+
9871023
// 3.56.24. Non-Uniform Instructions
9881024

9891025
foreach name = ["GroupNonUniformElect"] in {

clang/test/CodeGenSPIRV/spirv-builtin-lookup-intel-subgroup.cpp

Lines changed: 252 additions & 0 deletions
Large diffs are not rendered by default.

libclc/libspirv/lib/amdgcn-amdhsa/group/collectives.cl

Lines changed: 92 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -38,27 +38,6 @@ __clc__get_group_scratch_float() __asm("__clc__get_group_scratch_float");
3838
__local double *
3939
__clc__get_group_scratch_double() __asm("__clc__get_group_scratch_double");
4040

41-
#define __CLC_DECLARE_SHUFFLES(TYPE, TYPE_MANGLED) \
42-
_CLC_DECL TYPE _Z28__spirv_SubgroupShuffleINTELI##TYPE_MANGLED##ET_S0_j( \
43-
TYPE, int); \
44-
_CLC_DECL TYPE \
45-
_Z30__spirv_SubgroupShuffleUpINTELI##TYPE_MANGLED##ET_S0_S0_j( \
46-
TYPE, TYPE, unsigned int);
47-
48-
__CLC_DECLARE_SHUFFLES(char, a);
49-
__CLC_DECLARE_SHUFFLES(unsigned char, h);
50-
__CLC_DECLARE_SHUFFLES(short, s);
51-
__CLC_DECLARE_SHUFFLES(unsigned short, t);
52-
__CLC_DECLARE_SHUFFLES(int, i);
53-
__CLC_DECLARE_SHUFFLES(unsigned int, j);
54-
__CLC_DECLARE_SHUFFLES(half, DF16_);
55-
__CLC_DECLARE_SHUFFLES(float, f);
56-
__CLC_DECLARE_SHUFFLES(long, l);
57-
__CLC_DECLARE_SHUFFLES(unsigned long, m);
58-
__CLC_DECLARE_SHUFFLES(double, d);
59-
60-
#undef __CLC_DECLARE_SHUFFLES
61-
6241
#define __CLC_APPEND(NAME, SUFFIX) NAME##SUFFIX
6342

6443
#define __CLC_ADD(x, y) (x + y)
@@ -71,22 +50,19 @@ __CLC_DECLARE_SHUFFLES(double, d);
7150
#define __CLC_LOGICAL_OR(x, y) (x || y)
7251
#define __CLC_LOGICAL_AND(x, y) (x && y)
7352

74-
#define __CLC_SUBGROUP_COLLECTIVE_BODY(OP, TYPE, TYPE_MANGLED, IDENTITY) \
53+
#define __CLC_SUBGROUP_COLLECTIVE_BODY(OP, TYPE, IDENTITY) \
7554
uint sg_lid = __spirv_SubgroupLocalInvocationId(); \
7655
/* Can't use XOR/butterfly shuffles; some lanes may be inactive */ \
7756
for (int o = 1; o < __spirv_SubgroupMaxSize(); o *= 2) { \
78-
TYPE contribution = \
79-
_Z30__spirv_SubgroupShuffleUpINTELI##TYPE_MANGLED##ET_S0_S0_j(x, x, \
80-
o); \
57+
TYPE contribution = __spirv_SubgroupShuffleUpINTEL(x, x, o); \
8158
bool inactive = (sg_lid < o); \
8259
contribution = (inactive) ? IDENTITY : contribution; \
8360
x = OP(x, contribution); \
8461
} \
8562
/* For Reduce, broadcast result from highest active lane */ \
8663
TYPE result; \
8764
if (op == Reduce) { \
88-
result = _Z28__spirv_SubgroupShuffleINTELI##TYPE_MANGLED##ET_S0_j( \
89-
x, __spirv_SubgroupSize() - 1); \
65+
result = __spirv_SubgroupShuffleINTEL(x, __spirv_SubgroupSize() - 1); \
9066
*carry = result; \
9167
} /* For InclusiveScan, use results as computed */ \
9268
else if (op == InclusiveScan) { \
@@ -95,101 +71,100 @@ __CLC_DECLARE_SHUFFLES(double, d);
9571
} /* For ExclusiveScan, shift and prepend identity */ \
9672
else if (op == ExclusiveScan) { \
9773
*carry = x; \
98-
result = _Z30__spirv_SubgroupShuffleUpINTELI##TYPE_MANGLED##ET_S0_S0_j( \
99-
x, x, 1); \
74+
result = __spirv_SubgroupShuffleUpINTEL(x, x, 1); \
10075
if (sg_lid == 0) { \
10176
result = IDENTITY; \
10277
} \
10378
} \
10479
return result;
10580

106-
#define __CLC_SUBGROUP_COLLECTIVE(NAME, OP, TYPE, TYPE_MANGLED, IDENTITY) \
81+
#define __CLC_SUBGROUP_COLLECTIVE(NAME, OP, TYPE, IDENTITY) \
10782
_CLC_DEF _CLC_OVERLOAD _CLC_CONVERGENT TYPE __CLC_APPEND( \
10883
__clc__Subgroup, NAME)(uint op, TYPE x, TYPE * carry) { \
109-
__CLC_SUBGROUP_COLLECTIVE_BODY(OP, TYPE, TYPE_MANGLED, IDENTITY) \
84+
__CLC_SUBGROUP_COLLECTIVE_BODY(OP, TYPE, IDENTITY) \
11085
}
11186

112-
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, char, a, 0)
113-
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, uchar, h, 0)
114-
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, short, s, 0)
115-
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, ushort, t, 0)
116-
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, int, i, 0)
117-
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, uint, j, 0)
118-
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, long, l, 0)
119-
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, ulong, m, 0)
120-
__CLC_SUBGROUP_COLLECTIVE(FAdd, __CLC_ADD, half, DF16_, 0)
121-
__CLC_SUBGROUP_COLLECTIVE(FAdd, __CLC_ADD, float, f, 0)
122-
__CLC_SUBGROUP_COLLECTIVE(FAdd, __CLC_ADD, double, d, 0)
123-
124-
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, char, a, 1)
125-
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, uchar, h, 1)
126-
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, short, s, 1)
127-
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, ushort, t, 1)
128-
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, int, i, 1)
129-
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, uint, j, 1)
130-
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, long, l, 1)
131-
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, ulong, m, 1)
132-
__CLC_SUBGROUP_COLLECTIVE(FMulKHR, __CLC_MUL, half, DF16_, 1)
133-
__CLC_SUBGROUP_COLLECTIVE(FMulKHR, __CLC_MUL, float, f, 1)
134-
__CLC_SUBGROUP_COLLECTIVE(FMulKHR, __CLC_MUL, double, d, 1)
135-
136-
__CLC_SUBGROUP_COLLECTIVE(SMin, __CLC_MIN, char, a, CHAR_MAX)
137-
__CLC_SUBGROUP_COLLECTIVE(UMin, __CLC_MIN, uchar, h, UCHAR_MAX)
138-
__CLC_SUBGROUP_COLLECTIVE(SMin, __CLC_MIN, short, s, SHRT_MAX)
139-
__CLC_SUBGROUP_COLLECTIVE(UMin, __CLC_MIN, ushort, t, USHRT_MAX)
140-
__CLC_SUBGROUP_COLLECTIVE(SMin, __CLC_MIN, int, i, INT_MAX)
141-
__CLC_SUBGROUP_COLLECTIVE(UMin, __CLC_MIN, uint, j, UINT_MAX)
142-
__CLC_SUBGROUP_COLLECTIVE(SMin, __CLC_MIN, long, l, LONG_MAX)
143-
__CLC_SUBGROUP_COLLECTIVE(UMin, __CLC_MIN, ulong, m, ULONG_MAX)
144-
__CLC_SUBGROUP_COLLECTIVE(FMin, __CLC_MIN, half, DF16_, INFINITY)
145-
__CLC_SUBGROUP_COLLECTIVE(FMin, __CLC_MIN, float, f, INFINITY)
146-
__CLC_SUBGROUP_COLLECTIVE(FMin, __CLC_MIN, double, d, INFINITY)
147-
148-
__CLC_SUBGROUP_COLLECTIVE(SMax, __CLC_MAX, char, a, CHAR_MIN)
149-
__CLC_SUBGROUP_COLLECTIVE(UMax, __CLC_MAX, uchar, h, 0)
150-
__CLC_SUBGROUP_COLLECTIVE(SMax, __CLC_MAX, short, s, SHRT_MIN)
151-
__CLC_SUBGROUP_COLLECTIVE(UMax, __CLC_MAX, ushort, t, 0)
152-
__CLC_SUBGROUP_COLLECTIVE(SMax, __CLC_MAX, int, i, INT_MIN)
153-
__CLC_SUBGROUP_COLLECTIVE(UMax, __CLC_MAX, uint, j, 0)
154-
__CLC_SUBGROUP_COLLECTIVE(SMax, __CLC_MAX, long, l, LONG_MIN)
155-
__CLC_SUBGROUP_COLLECTIVE(UMax, __CLC_MAX, ulong, m, 0)
156-
__CLC_SUBGROUP_COLLECTIVE(FMax, __CLC_MAX, half, DF16_, -INFINITY)
157-
__CLC_SUBGROUP_COLLECTIVE(FMax, __CLC_MAX, float, f, -INFINITY)
158-
__CLC_SUBGROUP_COLLECTIVE(FMax, __CLC_MAX, double, d, -INFINITY)
159-
160-
__CLC_SUBGROUP_COLLECTIVE(All, __CLC_AND, bool, a, true)
161-
__CLC_SUBGROUP_COLLECTIVE(Any, __CLC_OR, bool, a, false)
162-
163-
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, uchar, h, ~0)
164-
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, uchar, h, 0)
165-
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, uchar, h, 0)
166-
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, char, a, ~0)
167-
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, char, a, 0)
168-
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, char, a, 0)
169-
170-
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, ushort, t, ~0)
171-
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, ushort, t, 0)
172-
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, ushort, t, 0)
173-
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, short, s, ~0)
174-
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, short, s, 0)
175-
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, short, s, 0)
176-
177-
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, uint, j, ~0)
178-
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, uint, j, 0)
179-
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, uint, j, 0)
180-
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, int, i, ~0)
181-
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, int, i, 0)
182-
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, int, i, 0)
183-
184-
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, ulong, m, ~0l)
185-
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, ulong, m, 0l)
186-
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, ulong, m, 0l)
187-
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, long, l, ~0l)
188-
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, long, l, 0l)
189-
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, long, l, 0l)
190-
191-
__CLC_SUBGROUP_COLLECTIVE(LogicalOrKHR, __CLC_LOGICAL_OR, bool, a, false)
192-
__CLC_SUBGROUP_COLLECTIVE(LogicalAndKHR, __CLC_LOGICAL_AND, bool, a, true)
87+
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, char, 0)
88+
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, uchar, 0)
89+
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, short, 0)
90+
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, ushort, 0)
91+
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, int, 0)
92+
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, uint, 0)
93+
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, long, 0)
94+
__CLC_SUBGROUP_COLLECTIVE(IAdd, __CLC_ADD, ulong, 0)
95+
__CLC_SUBGROUP_COLLECTIVE(FAdd, __CLC_ADD, half, 0)
96+
__CLC_SUBGROUP_COLLECTIVE(FAdd, __CLC_ADD, float, 0)
97+
__CLC_SUBGROUP_COLLECTIVE(FAdd, __CLC_ADD, double, 0)
98+
99+
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, char, 1)
100+
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, uchar, 1)
101+
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, short, 1)
102+
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, ushort, 1)
103+
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, int, 1)
104+
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, uint, 1)
105+
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, long, 1)
106+
__CLC_SUBGROUP_COLLECTIVE(IMulKHR, __CLC_MUL, ulong, 1)
107+
__CLC_SUBGROUP_COLLECTIVE(FMulKHR, __CLC_MUL, half, 1)
108+
__CLC_SUBGROUP_COLLECTIVE(FMulKHR, __CLC_MUL, float, 1)
109+
__CLC_SUBGROUP_COLLECTIVE(FMulKHR, __CLC_MUL, double, 1)
110+
111+
__CLC_SUBGROUP_COLLECTIVE(SMin, __CLC_MIN, char, CHAR_MAX)
112+
__CLC_SUBGROUP_COLLECTIVE(UMin, __CLC_MIN, uchar, UCHAR_MAX)
113+
__CLC_SUBGROUP_COLLECTIVE(SMin, __CLC_MIN, short, SHRT_MAX)
114+
__CLC_SUBGROUP_COLLECTIVE(UMin, __CLC_MIN, ushort, USHRT_MAX)
115+
__CLC_SUBGROUP_COLLECTIVE(SMin, __CLC_MIN, int, INT_MAX)
116+
__CLC_SUBGROUP_COLLECTIVE(UMin, __CLC_MIN, uint, UINT_MAX)
117+
__CLC_SUBGROUP_COLLECTIVE(SMin, __CLC_MIN, long, LONG_MAX)
118+
__CLC_SUBGROUP_COLLECTIVE(UMin, __CLC_MIN, ulong, ULONG_MAX)
119+
__CLC_SUBGROUP_COLLECTIVE(FMin, __CLC_MIN, half, INFINITY)
120+
__CLC_SUBGROUP_COLLECTIVE(FMin, __CLC_MIN, float, INFINITY)
121+
__CLC_SUBGROUP_COLLECTIVE(FMin, __CLC_MIN, double, INFINITY)
122+
123+
__CLC_SUBGROUP_COLLECTIVE(SMax, __CLC_MAX, char, CHAR_MIN)
124+
__CLC_SUBGROUP_COLLECTIVE(UMax, __CLC_MAX, uchar, 0)
125+
__CLC_SUBGROUP_COLLECTIVE(SMax, __CLC_MAX, short, SHRT_MIN)
126+
__CLC_SUBGROUP_COLLECTIVE(UMax, __CLC_MAX, ushort, 0)
127+
__CLC_SUBGROUP_COLLECTIVE(SMax, __CLC_MAX, int, INT_MIN)
128+
__CLC_SUBGROUP_COLLECTIVE(UMax, __CLC_MAX, uint, 0)
129+
__CLC_SUBGROUP_COLLECTIVE(SMax, __CLC_MAX, long, LONG_MIN)
130+
__CLC_SUBGROUP_COLLECTIVE(UMax, __CLC_MAX, ulong, 0)
131+
__CLC_SUBGROUP_COLLECTIVE(FMax, __CLC_MAX, half, -INFINITY)
132+
__CLC_SUBGROUP_COLLECTIVE(FMax, __CLC_MAX, float, -INFINITY)
133+
__CLC_SUBGROUP_COLLECTIVE(FMax, __CLC_MAX, double, -INFINITY)
134+
135+
__CLC_SUBGROUP_COLLECTIVE(All, __CLC_AND, bool, true)
136+
__CLC_SUBGROUP_COLLECTIVE(Any, __CLC_OR, bool, false)
137+
138+
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, uchar, ~0)
139+
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, uchar, 0)
140+
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, uchar, 0)
141+
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, char, ~0)
142+
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, char, 0)
143+
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, char, 0)
144+
145+
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, ushort, ~0)
146+
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, ushort, 0)
147+
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, ushort, 0)
148+
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, short, ~0)
149+
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, short, 0)
150+
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, short, 0)
151+
152+
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, uint, ~0)
153+
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, uint, 0)
154+
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, uint, 0)
155+
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, int, ~0)
156+
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, int, 0)
157+
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, int, 0)
158+
159+
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, ulong, ~0l)
160+
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, ulong, 0l)
161+
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, ulong, 0l)
162+
__CLC_SUBGROUP_COLLECTIVE(BitwiseAndKHR, __CLC_AND, long, ~0l)
163+
__CLC_SUBGROUP_COLLECTIVE(BitwiseOrKHR, __CLC_OR, long, 0l)
164+
__CLC_SUBGROUP_COLLECTIVE(BitwiseXorKHR, __CLC_XOR, long, 0l)
165+
166+
__CLC_SUBGROUP_COLLECTIVE(LogicalOrKHR, __CLC_LOGICAL_OR, bool, false)
167+
__CLC_SUBGROUP_COLLECTIVE(LogicalAndKHR, __CLC_LOGICAL_AND, bool, true)
193168

194169
#undef __CLC_SUBGROUP_COLLECTIVE_BODY
195170
#undef __CLC_SUBGROUP_COLLECTIVE
@@ -380,10 +355,9 @@ long __clc__3d_to_linear_local_id(ulong3 id) {
380355

381356
#define __CLC_GROUP_BROADCAST(TYPE, TYPE_MANGLED) \
382357
_CLC_DEF _CLC_OVERLOAD _CLC_CONVERGENT TYPE __spirv_GroupBroadcast( \
383-
int scope, TYPE x, ulong local_id) { \
358+
int scope, TYPE x, ulong local_id) { \
384359
if (scope == Subgroup) { \
385-
return _Z28__spirv_SubgroupShuffleINTELI##TYPE_MANGLED##ET_S0_j( \
386-
x, local_id); \
360+
return __spirv_SubgroupShuffleINTEL(x, local_id); \
387361
} \
388362
bool source = (__spirv_LocalInvocationIndex() == local_id); \
389363
__local TYPE *scratch = __CLC_APPEND(__clc__get_group_scratch_, TYPE)(); \
@@ -396,17 +370,17 @@ long __clc__3d_to_linear_local_id(ulong3 id) {
396370
return result; \
397371
} \
398372
_CLC_DEF _CLC_OVERLOAD _CLC_CONVERGENT TYPE __spirv_GroupBroadcast( \
399-
int scope, TYPE x, ulong2 local_id) { \
373+
int scope, TYPE x, ulong2 local_id) { \
400374
ulong linear_local_id = __clc__2d_to_linear_local_id(local_id); \
401375
return __spirv_GroupBroadcast(scope, x, linear_local_id); \
402376
} \
403377
_CLC_DEF _CLC_OVERLOAD _CLC_CONVERGENT TYPE __spirv_GroupBroadcast( \
404-
int scope, TYPE x, ulong3 local_id) { \
378+
int scope, TYPE x, ulong3 local_id) { \
405379
ulong linear_local_id = __clc__3d_to_linear_local_id(local_id); \
406380
return __spirv_GroupBroadcast(scope, x, linear_local_id); \
407381
} \
408382
_CLC_DEF _CLC_OVERLOAD _CLC_CONVERGENT TYPE __spirv_GroupBroadcast( \
409-
int scope, TYPE x, uint local_id) { \
383+
int scope, TYPE x, uint local_id) { \
410384
return __spirv_GroupBroadcast(scope, x, (ulong)local_id); \
411385
}
412386
__CLC_GROUP_BROADCAST(char, a);

0 commit comments

Comments
 (0)