Skip to content

Commit 601222a

Browse files
authored
[NFC][libspirv] Re-use clc shuffle/shuffle2 implementations for __spirv_ocl_shuffle/shuffle2 (#18553)
llvm-diff on libspirv-amdgcn--amdhsa.bc and libspirv-nvptx64--nvidiacl.bc only shows __clc_get_el_* symbols are removed.
1 parent 1e62398 commit 601222a

File tree

7 files changed

+58
-325
lines changed

7 files changed

+58
-325
lines changed

libclc/clc/lib/generic/misc/clc_shuffle.cl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@
138138
_CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 16, MASKTYPE)
139139

140140
_CLC_VECTOR_SHUFFLE_INSIZE(char, uchar)
141+
_CLC_VECTOR_SHUFFLE_INSIZE(schar, uchar)
141142
_CLC_VECTOR_SHUFFLE_INSIZE(short, ushort)
142143
_CLC_VECTOR_SHUFFLE_INSIZE(int, uint)
143144
_CLC_VECTOR_SHUFFLE_INSIZE(long, ulong)

libclc/clc/lib/generic/misc/clc_shuffle2.cl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
_CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 16, MASKTYPE)
141141

142142
_CLC_VECTOR_SHUFFLE_INSIZE(char, uchar)
143+
_CLC_VECTOR_SHUFFLE_INSIZE(schar, uchar)
143144
_CLC_VECTOR_SHUFFLE_INSIZE(short, ushort)
144145
_CLC_VECTOR_SHUFFLE_INSIZE(int, uint)
145146
_CLC_VECTOR_SHUFFLE_INSIZE(long, ulong)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//===----------------------------------------------------------------------===//
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+
#define __CLC_FUNCTION __spirv_ocl_shuffle
10+
11+
// Integer-type decls
12+
#define __CLC_BODY <clc/misc/shuffle_decl.inc>
13+
#include <clc/integer/gentype.inc>
14+
15+
// Floating-point decls
16+
#define __CLC_BODY <clc/misc/shuffle_decl.inc>
17+
#include <clc/math/gentype.inc>
18+
19+
#undef __CLC_FUNCTION
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//===----------------------------------------------------------------------===//
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+
#define __CLC_FUNCTION __spirv_ocl_shuffle2
10+
11+
// Integer-type decls
12+
#define __CLC_BODY <clc/misc/shuffle2_decl.inc>
13+
#include <clc/integer/gentype.inc>
14+
15+
// Floating-point decls
16+
#define __CLC_BODY <clc/misc/shuffle2_decl.inc>
17+
#include <clc/math/gentype.inc>
18+
19+
#undef __CLC_FUNCTION

libclc/libspirv/include/libspirv/spirv.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@
7474
#include <libspirv/image/image.h>
7575
#include <libspirv/image/image_defines.h>
7676

77+
/* 6.15.13. Miscellaneous Vector Functions */
78+
#include <libspirv/misc/shuffle.h>
79+
#include <libspirv/misc/shuffle2.h>
80+
7781
/* Pointer Conversion */
7882
#include <libspirv/conversion/GenericCastToPtrExplicit.h>
7983

libclc/libspirv/lib/generic/misc/shuffle.cl

Lines changed: 7 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -6,169 +6,14 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9+
#include <clc/misc/clc_shuffle.h>
910
#include <libspirv/spirv.h>
1011

11-
#define _CLC_ELEMENT_CASES2(VAR) \
12-
case 0: \
13-
return VAR.s0; \
14-
case 1: \
15-
return VAR.s1;
12+
#define FUNCTION __spirv_ocl_shuffle
13+
#define __CLC_FUNCTION(x) __clc_shuffle
1614

17-
#define _CLC_ELEMENT_CASES4(VAR) \
18-
_CLC_ELEMENT_CASES2(VAR) \
19-
case 2: \
20-
return VAR.s2; \
21-
case 3: \
22-
return VAR.s3;
15+
#define __CLC_BODY <clc/misc/shuffle_def.inc>
16+
#include <clc/integer/gentype.inc>
2317

24-
#define _CLC_ELEMENT_CASES8(VAR) \
25-
_CLC_ELEMENT_CASES4(VAR) \
26-
case 4: \
27-
return VAR.s4; \
28-
case 5: \
29-
return VAR.s5; \
30-
case 6: \
31-
return VAR.s6; \
32-
case 7: \
33-
return VAR.s7;
34-
35-
#define _CLC_ELEMENT_CASES16(VAR) \
36-
_CLC_ELEMENT_CASES8(VAR) \
37-
case 8: \
38-
return VAR.s8; \
39-
case 9: \
40-
return VAR.s9; \
41-
case 10: \
42-
return VAR.sA; \
43-
case 11: \
44-
return VAR.sB; \
45-
case 12: \
46-
return VAR.sC; \
47-
case 13: \
48-
return VAR.sD; \
49-
case 14: \
50-
return VAR.sE; \
51-
case 15: \
52-
return VAR.sF;
53-
54-
#define _CLC_GET_ELEMENT_DEFINE(ARGTYPE, ARGSIZE, IDXTYPE) \
55-
inline ARGTYPE __clc_get_el_##ARGTYPE##ARGSIZE##_##IDXTYPE( \
56-
ARGTYPE##ARGSIZE x, IDXTYPE idx) { \
57-
switch (idx) { _CLC_ELEMENT_CASES##ARGSIZE(x) default : return 0; } \
58-
}
59-
60-
#define _CLC_SHUFFLE_SET_ONE_ELEMENT(ARGTYPE, ARGSIZE, INDEX, MASKTYPE) \
61-
ret_val.s##INDEX = \
62-
__clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s##INDEX);
63-
64-
#define _CLC_SHUFFLE_SET_2_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
65-
ret_val.s0 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s0); \
66-
ret_val.s1 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s1);
67-
68-
#define _CLC_SHUFFLE_SET_4_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
69-
_CLC_SHUFFLE_SET_2_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
70-
ret_val.s2 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s2); \
71-
ret_val.s3 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s3);
72-
73-
#define _CLC_SHUFFLE_SET_8_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
74-
_CLC_SHUFFLE_SET_4_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
75-
ret_val.s4 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s4); \
76-
ret_val.s5 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s5); \
77-
ret_val.s6 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s6); \
78-
ret_val.s7 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s7);
79-
80-
#define _CLC_SHUFFLE_SET_16_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
81-
_CLC_SHUFFLE_SET_8_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
82-
ret_val.s8 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s8); \
83-
ret_val.s9 = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.s9); \
84-
ret_val.sA = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sA); \
85-
ret_val.sB = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sB); \
86-
ret_val.sC = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sC); \
87-
ret_val.sD = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sD); \
88-
ret_val.sE = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sE); \
89-
ret_val.sF = __clc_get_el_##ARGTYPE##ARGSIZE##_##MASKTYPE(x, mask.sF);
90-
91-
#define _CLC_SHUFFLE_DEFINE2(ARGTYPE, ARGSIZE, MASKTYPE) \
92-
_CLC_DEF _CLC_OVERLOAD ARGTYPE##2 __spirv_ocl_shuffle(ARGTYPE##ARGSIZE x, \
93-
MASKTYPE##2 mask) { \
94-
ARGTYPE##2 ret_val; \
95-
mask &= (MASKTYPE##2)(ARGSIZE - 1); \
96-
_CLC_SHUFFLE_SET_2_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
97-
return ret_val; \
98-
}
99-
100-
#define _CLC_SHUFFLE_DEFINE4(ARGTYPE, ARGSIZE, MASKTYPE) \
101-
_CLC_DEF _CLC_OVERLOAD ARGTYPE##4 __spirv_ocl_shuffle(ARGTYPE##ARGSIZE x, \
102-
MASKTYPE##4 mask) { \
103-
ARGTYPE##4 ret_val; \
104-
mask &= (MASKTYPE##4)(ARGSIZE - 1); \
105-
_CLC_SHUFFLE_SET_4_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
106-
return ret_val; \
107-
}
108-
109-
#define _CLC_SHUFFLE_DEFINE8(ARGTYPE, ARGSIZE, MASKTYPE) \
110-
_CLC_DEF _CLC_OVERLOAD ARGTYPE##8 __spirv_ocl_shuffle(ARGTYPE##ARGSIZE x, \
111-
MASKTYPE##8 mask) { \
112-
ARGTYPE##8 ret_val; \
113-
mask &= (MASKTYPE##8)(ARGSIZE - 1); \
114-
_CLC_SHUFFLE_SET_8_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
115-
return ret_val; \
116-
}
117-
118-
#define _CLC_SHUFFLE_DEFINE16(ARGTYPE, ARGSIZE, MASKTYPE) \
119-
_CLC_DEF _CLC_OVERLOAD ARGTYPE##16 __spirv_ocl_shuffle(ARGTYPE##ARGSIZE x, \
120-
MASKTYPE##16 mask) { \
121-
ARGTYPE##16 ret_val; \
122-
mask &= (MASKTYPE##16)(ARGSIZE - 1); \
123-
_CLC_SHUFFLE_SET_16_ELEMENTS(ARGTYPE, ARGSIZE, MASKTYPE) \
124-
return ret_val; \
125-
}
126-
127-
#define _CLC_VECTOR_SHUFFLE_MASKSIZE(INTYPE, ARGSIZE, MASKTYPE) \
128-
_CLC_GET_ELEMENT_DEFINE(INTYPE, ARGSIZE, MASKTYPE) \
129-
_CLC_SHUFFLE_DEFINE2(INTYPE, ARGSIZE, MASKTYPE) \
130-
_CLC_SHUFFLE_DEFINE4(INTYPE, ARGSIZE, MASKTYPE) \
131-
_CLC_SHUFFLE_DEFINE8(INTYPE, ARGSIZE, MASKTYPE) \
132-
_CLC_SHUFFLE_DEFINE16(INTYPE, ARGSIZE, MASKTYPE)
133-
134-
#define _CLC_VECTOR_SHUFFLE_INSIZE(TYPE, MASKTYPE) \
135-
_CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 2, MASKTYPE) \
136-
_CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 4, MASKTYPE) \
137-
_CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 8, MASKTYPE) \
138-
_CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, 16, MASKTYPE)
139-
140-
_CLC_VECTOR_SHUFFLE_INSIZE(char, uchar)
141-
_CLC_VECTOR_SHUFFLE_INSIZE(schar, uchar)
142-
_CLC_VECTOR_SHUFFLE_INSIZE(short, ushort)
143-
_CLC_VECTOR_SHUFFLE_INSIZE(int, uint)
144-
_CLC_VECTOR_SHUFFLE_INSIZE(long, ulong)
145-
_CLC_VECTOR_SHUFFLE_INSIZE(uchar, uchar)
146-
_CLC_VECTOR_SHUFFLE_INSIZE(ushort, ushort)
147-
_CLC_VECTOR_SHUFFLE_INSIZE(uint, uint)
148-
_CLC_VECTOR_SHUFFLE_INSIZE(ulong, ulong)
149-
_CLC_VECTOR_SHUFFLE_INSIZE(float, uint)
150-
#ifdef cl_khr_fp64
151-
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
152-
_CLC_VECTOR_SHUFFLE_INSIZE(double, ulong)
153-
#endif
154-
#ifdef cl_khr_fp16
155-
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
156-
_CLC_VECTOR_SHUFFLE_INSIZE(half, ushort)
157-
#endif
158-
159-
#undef _CLC_ELEMENT_CASES2
160-
#undef _CLC_ELEMENT_CASES4
161-
#undef _CLC_ELEMENT_CASES8
162-
#undef _CLC_ELEMENT_CASES16
163-
#undef _CLC_GET_ELEMENT_DEFINE
164-
#undef _CLC_SHUFFLE_SET_ONE_ELEMENT
165-
#undef _CLC_SHUFFLE_SET_2_ELEMENTS
166-
#undef _CLC_SHUFFLE_SET_4_ELEMENTS
167-
#undef _CLC_SHUFFLE_SET_8_ELEMENTS
168-
#undef _CLC_SHUFFLE_SET_16_ELEMENTS
169-
#undef _CLC_SHUFFLE_DEFINE2
170-
#undef _CLC_SHUFFLE_DEFINE4
171-
#undef _CLC_SHUFFLE_DEFINE8
172-
#undef _CLC_SHUFFLE_DEFINE16
173-
#undef _CLC_VECTOR_SHUFFLE_MASKSIZE
174-
#undef _CLC_VECTOR_SHUFFLE_INSIZE
18+
#define __CLC_BODY <clc/misc/shuffle_def.inc>
19+
#include <clc/math/gentype.inc>

0 commit comments

Comments
 (0)