Skip to content

Commit 42ff9c2

Browse files
authored
[SYCL][LIBCLC] Use half builtins for generic math functions (#17163)
`__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 95ee1e3 commit 42ff9c2

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
@@ -165,6 +165,6 @@ _CLC_UNARY_VECTORIZE(_CLC_DEF _CLC_OVERLOAD, double, __clc_exp10, double)
165165

166166
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
167167

168-
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __clc_exp10, __builtin_exp10, half)
168+
_CLC_DEFINE_UNARY_BUILTIN_SCALARIZE(half, __clc_exp10, __builtin_exp10f16, half)
169169

170170
#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

0 commit comments

Comments
 (0)