Skip to content

Commit 6767588

Browse files
committed
[SYCL][LIBCLC] Use half builtins for generic math functions
`__builtin_<name>()` without a suffix is equivalent to the C math function `<name>()`, these functions take and return `double` values. Instead of using these use the `f16` suffixed builtins which take and return `half` values. On CPU targets these will be usually lowered to the single precision library calls (with promotion/truncation). On other targets (for example GPUs) the half builtins might be lowered directly to hardware instructions. Some of the builtins are not available for half precision, in these cases use the `f` suffixed builtins (which take and return `float`s).
1 parent 854e71e commit 6767588

24 files changed

+26
-26
lines changed

libclc/libspirv/lib/generic/math/acosh.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_acosh, double)
118118

119119
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
120120

121-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_acosh, __builtin_acosh, half)
121+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_acosh, __builtin_acoshf, half)
122122

123123
#endif

libclc/libspirv/lib/generic/math/asinh.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_asinh, double)
366366

367367
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
368368

369-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_asinh, __builtin_asinh, half)
369+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_asinh, __builtin_asinhf, half)
370370

371371
#endif

libclc/libspirv/lib/generic/math/atan.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_atan, double);
178178

179179
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
180180

181-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_atan, __builtin_atan, half)
181+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_atan, __builtin_atanf16, half)
182182

183183
#endif

libclc/libspirv/lib/generic/math/atan2.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,6 @@ _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_atan2, double,
250250

251251
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
252252

253-
_CLC_DEFINE_BINARY_BUILTIN(half, __spirv_ocl_atan2, __builtin_atan2, half, half)
253+
_CLC_DEFINE_BINARY_BUILTIN(half, __spirv_ocl_atan2, __builtin_atan2f16, half, half)
254254

255255
#endif

libclc/libspirv/lib/generic/math/cbrt.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_cbrt, double)
149149

150150
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
151151

152-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_cbrt, __builtin_cbrt, half)
152+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_cbrt, __builtin_cbrtf, half)
153153

154154
#endif

libclc/libspirv/lib/generic/math/clc_exp10.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,6 @@ _CLC_UNARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, double, __clc_exp10, double)
166166

167167
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
168168

169-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __clc_exp10, __builtin_exp10, half)
169+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __clc_exp10, __builtin_exp10f16, half)
170170

171171
#endif

libclc/libspirv/lib/generic/math/clc_fmod.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,6 @@ _CLC_BINARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, double, __clc_fmod, double,
171171

172172
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
173173

174-
_CLC_DEFINE_BINARY_BUILTIN(half, __clc_fmod, __builtin_fmod, half, half)
174+
_CLC_DEFINE_BINARY_BUILTIN(half, __clc_fmod, __builtin_fmodf16, half, half)
175175

176176
#endif

libclc/libspirv/lib/generic/math/clc_hypot.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,6 @@ _CLC_BINARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, double, __clc_hypot, double,
9595

9696
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
9797

98-
_CLC_DEFINE_BINARY_BUILTIN(half, __clc_hypot, __builtin_hypot, half, half)
98+
_CLC_DEFINE_BINARY_BUILTIN(half, __clc_hypot, __builtin_hypotf, half, half)
9999

100100
#endif

libclc/libspirv/lib/generic/math/clc_remainder.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ _CLC_BINARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, double, __clc_remainder, double,
207207

208208
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
209209

210-
_CLC_DEFINE_BINARY_BUILTIN(half, __clc_remainder, __builtin_remainder, half,
210+
_CLC_DEFINE_BINARY_BUILTIN(half, __clc_remainder, __builtin_remainderf, half,
211211
half)
212212

213213
#endif

libclc/libspirv/lib/generic/math/cos.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_cos, double);
6767

6868
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
6969

70-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_cos, __builtin_cos, half)
70+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_cos, __builtin_cosf16, half)
7171

7272
#endif

libclc/libspirv/lib/generic/math/cosh.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_cosh, double)
214214

215215
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
216216

217-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_cosh, __builtin_cosh, half)
217+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_cosh, __builtin_coshf16, half)
218218

219219
#endif

libclc/libspirv/lib/generic/math/erf.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_erf, double);
545545

546546
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
547547

548-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_erf, __builtin_erf, half)
548+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_erf, __builtin_erff, half)
549549

550550
#endif

libclc/libspirv/lib/generic/math/erfc.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_erfc, double);
554554

555555
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
556556

557-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_erfc, __builtin_erfc, half)
557+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_erfc, __builtin_erfcf, half)
558558

559559
#endif

libclc/libspirv/lib/generic/math/exp.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_exp, double)
8080

8181
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
8282

83-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_exp, __builtin_exp, half)
83+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_exp, __builtin_expf16, half)
8484

8585
#endif

libclc/libspirv/lib/generic/math/exp2.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_exp2, double)
7575

7676
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
7777

78-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_exp2, __builtin_exp2, half)
78+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_exp2, __builtin_exp2f16, half)
7979

8080
#endif

libclc/libspirv/lib/generic/math/expm1.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_expm1, double)
154154

155155
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
156156

157-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_expm1, __builtin_expm1, half)
157+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_expm1, __builtin_expm1f, half)
158158

159159
#endif

libclc/libspirv/lib/generic/math/fdim.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919

2020
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
2121

22-
_CLC_DEFINE_BINARY_BUILTIN(half, __spirv_ocl_fdim, __builtin_fdim, half, half)
22+
_CLC_DEFINE_BINARY_BUILTIN(half, __spirv_ocl_fdim, __builtin_fdimf, half, half)
2323

2424
#endif

libclc/libspirv/lib/generic/math/frexp.cl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@
4242
return BUILTIN(x, y); \
4343
}
4444

45-
_CLC_DEFINE_NO_VEC(half, __spirv_ocl_frexp, __builtin_frexp, half, global int *)
45+
_CLC_DEFINE_NO_VEC(half, __spirv_ocl_frexp, __builtin_frexpf16, half, global int *)
4646
_CLC_V_V_VP_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, half, __spirv_ocl_frexp, half, global, int)
47-
_CLC_DEFINE_NO_VEC(half, __spirv_ocl_frexp, __builtin_frexp, half, local int *)
47+
_CLC_DEFINE_NO_VEC(half, __spirv_ocl_frexp, __builtin_frexpf16, half, local int *)
4848
_CLC_V_V_VP_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, half, __spirv_ocl_frexp, half, local, int)
49-
_CLC_DEFINE_NO_VEC(half, __spirv_ocl_frexp, __builtin_frexp, half, int *)
49+
_CLC_DEFINE_NO_VEC(half, __spirv_ocl_frexp, __builtin_frexpf16, half, int *)
5050
_CLC_V_V_VP_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, half, __spirv_ocl_frexp, half, , int)
5151

5252
#endif

libclc/libspirv/lib/generic/math/log.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_log, double);
3737

3838
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
3939

40-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_log, __builtin_log, half)
40+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_log, __builtin_logf16, half)
4141

4242
#endif

libclc/libspirv/lib/generic/math/log10.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_log10, double);
2929

3030
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
3131

32-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_log10, __builtin_log10, half)
32+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_log10, __builtin_log10f16, half)
3333

3434
#endif

libclc/libspirv/lib/generic/math/log1p.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_log1p, double);
171171

172172
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
173173

174-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_log1p, __builtin_log1p, half)
174+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_log1p, __builtin_log1pf, half)
175175

176176
#endif

libclc/libspirv/lib/generic/math/log2.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_log2, double);
2929

3030
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
3131

32-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_log2, __builtin_log2, half)
32+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_log2, __builtin_log2f16, half)
3333

3434
#endif

libclc/libspirv/lib/generic/math/logb.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_logb, double)
4343

4444
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
4545

46-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_logb, __builtin_logb, half)
46+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_logb, __builtin_logbf, half)
4747

4848
#endif

libclc/libspirv/lib/generic/math/sin.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,6 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __spirv_ocl_sin, double);
6969

7070
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
7171

72-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_sin, __builtin_sin, half)
72+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __spirv_ocl_sin, __builtin_sinf16, half)
7373

7474
#endif

0 commit comments

Comments
 (0)