Skip to content

Commit 86716c5

Browse files
authored
[SYCL] Support stdlib function abs, labs, llabs in device library (#3364)
Signed-off-by: haonanya <[email protected]>
1 parent 83b4b75 commit 86716c5

File tree

5 files changed

+35
-0
lines changed

5 files changed

+35
-0
lines changed

libdevice/cmath_wrapper.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@
99
#include "device_math.h"
1010

1111
#ifdef __SPIR__
12+
13+
DEVICE_EXTERN_C
14+
int abs(int x) { return __devicelib_abs(x); }
15+
16+
DEVICE_EXTERN_C
17+
long int labs(long int x) { return __devicelib_labs(x); }
18+
19+
DEVICE_EXTERN_C
20+
long long int llabs(long long int x) { return __devicelib_llabs(x); }
21+
1222
DEVICE_EXTERN_C
1323
div_t div(int x, int y) { return __devicelib_div(x, y); }
1424

libdevice/device_math.h

+9
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@
1313
#ifdef __SPIR__
1414
#include <cstdlib>
1515

16+
DEVICE_EXTERN_C
17+
int __devicelib_abs(int x);
18+
19+
DEVICE_EXTERN_C
20+
long int __devicelib_labs(long int x);
21+
22+
DEVICE_EXTERN_C
23+
long long int __devicelib_llabs(long long int x);
24+
1625
DEVICE_EXTERN_C
1726
div_t __devicelib_div(int x, int y);
1827

libdevice/fallback-cmath.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@
1616
// TODO: generate the DeviceLibFuncMap in sycl-post-link.cpp automatically
1717
// during the build based on libdevice to avoid manually sync.
1818

19+
DEVICE_EXTERN_C
20+
int __devicelib_abs(int x) { return x < 0 ? -x : x; }
21+
22+
DEVICE_EXTERN_C
23+
long int __devicelib_labs(long int x) { return x < 0 ? -x : x; }
24+
25+
DEVICE_EXTERN_C
26+
long long int __devicelib_llabs(long long int x) { return x < 0 ? -x : x; }
27+
1928
DEVICE_EXTERN_C
2029
div_t __devicelib_div(int x, int y) { return {x / y, x % y}; }
2130

llvm/tools/sycl-post-link/SYCLDeviceLibReqMask.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ namespace {
2424
// Please update SDLMap if any item is added to or removed from
2525
// fallback device libraries in libdevice.
2626
SYCLDeviceLibFuncMap SDLMap = {
27+
{"__devicelib_abs", DeviceLibExt::cl_intel_devicelib_math},
2728
{"__devicelib_acosf", DeviceLibExt::cl_intel_devicelib_math},
2829
{"__devicelib_acoshf", DeviceLibExt::cl_intel_devicelib_math},
2930
{"__devicelib_asinf", DeviceLibExt::cl_intel_devicelib_math},
@@ -46,9 +47,11 @@ SYCLDeviceLibFuncMap SDLMap = {
4647
{"__devicelib_frexpf", DeviceLibExt::cl_intel_devicelib_math},
4748
{"__devicelib_hypotf", DeviceLibExt::cl_intel_devicelib_math},
4849
{"__devicelib_ilogbf", DeviceLibExt::cl_intel_devicelib_math},
50+
{"__devicelib_labs", DeviceLibExt::cl_intel_devicelib_math},
4951
{"__devicelib_ldiv", DeviceLibExt::cl_intel_devicelib_math},
5052
{"__devicelib_ldexpf", DeviceLibExt::cl_intel_devicelib_math},
5153
{"__devicelib_lgammaf", DeviceLibExt::cl_intel_devicelib_math},
54+
{"__devicelib_llabs", DeviceLibExt::cl_intel_devicelib_math},
5255
{"__devicelib_lldiv", DeviceLibExt::cl_intel_devicelib_math},
5356
{"__devicelib_log10f", DeviceLibExt::cl_intel_devicelib_math},
5457
{"__devicelib_log1pf", DeviceLibExt::cl_intel_devicelib_math},

sycl/include/CL/sycl/builtins.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,10 @@ detail::enable_if_t<detail::is_genfloatf<T>::value, T> tan(T x) __NOEXC {
15451545

15461546
#ifdef __SYCL_DEVICE_ONLY__
15471547
extern "C" {
1548+
extern SYCL_EXTERNAL int abs(int x);
1549+
extern SYCL_EXTERNAL long int labs(long int x);
1550+
extern SYCL_EXTERNAL long long int llabs(long long int x);
1551+
15481552
extern SYCL_EXTERNAL div_t div(int x, int y);
15491553
extern SYCL_EXTERNAL ldiv_t ldiv(long int x, long int y);
15501554
extern SYCL_EXTERNAL lldiv_t lldiv(long long int x, long long int y);

0 commit comments

Comments
 (0)