From aa0ec6bce448bee677911ce616fd71ca8916f964 Mon Sep 17 00:00:00 2001 From: Vyacheslav Zakharin Date: Fri, 28 Feb 2020 13:00:57 -0800 Subject: [PATCH 1/6] Move SYCL devicelib to toplevel. Signed-off-by: Vyacheslav Zakharin --- buildbot/configure.py | 6 +- .../devicelib => libdevice}/CMakeLists.txt | 100 +++++++++--------- .../devicelib => libdevice}/cmath_wrapper.cpp | 11 +- .../cmath_wrapper_fp64.cpp | 11 +- .../complex_wrapper.cpp | 11 +- .../complex_wrapper_fp64.cpp | 10 +- .../devicelib => libdevice}/device_complex.h | 10 +- .../devicelib => libdevice}/device_math.h | 6 +- .../fallback-cassert.cpp | 0 .../fallback-cmath-fp64.cpp | 9 +- .../fallback-cmath.cpp | 9 +- .../fallback-complex-fp64.cpp | 8 +- .../fallback-complex.cpp | 7 +- .../devicelib => libdevice}/glibc_wrapper.cpp | 1 - .../devicelib => libdevice}/msvc_wrapper.cpp | 5 +- .../detail/devicelib => libdevice}/wrapper.h | 7 +- sycl/source/CMakeLists.txt | 1 - 17 files changed, 130 insertions(+), 82 deletions(-) rename {sycl/source/detail/devicelib => libdevice}/CMakeLists.txt (65%) rename {sycl/source/detail/devicelib => libdevice}/cmath_wrapper.cpp (97%) rename {sycl/source/detail/devicelib => libdevice}/cmath_wrapper_fp64.cpp (97%) rename {sycl/source/detail/devicelib => libdevice}/complex_wrapper.cpp (96%) rename {sycl/source/detail/devicelib => libdevice}/complex_wrapper_fp64.cpp (96%) rename {sycl/source/detail/devicelib => libdevice}/device_complex.h (95%) rename {sycl/source/detail/devicelib => libdevice}/device_math.h (98%) rename {sycl/source/detail/devicelib => libdevice}/fallback-cassert.cpp (100%) rename {sycl/source/detail/devicelib => libdevice}/fallback-cmath-fp64.cpp (96%) rename {sycl/source/detail/devicelib => libdevice}/fallback-cmath.cpp (96%) rename {sycl/source/detail/devicelib => libdevice}/fallback-complex-fp64.cpp (99%) rename {sycl/source/detail/devicelib => libdevice}/fallback-complex.cpp (99%) rename {sycl/source/detail/devicelib => libdevice}/glibc_wrapper.cpp (99%) rename {sycl/source/detail/devicelib => libdevice}/msvc_wrapper.cpp (96%) rename {sycl/source/detail/devicelib => libdevice}/wrapper.h (84%) diff --git a/buildbot/configure.py b/buildbot/configure.py index 60f6c97160e29..fdc570895273f 100644 --- a/buildbot/configure.py +++ b/buildbot/configure.py @@ -11,10 +11,11 @@ def do_configure(args): sycl_dir = os.path.join(args.src_dir, "sycl") spirv_dir = os.path.join(args.src_dir, "llvm-spirv") xpti_dir = os.path.join(args.src_dir, "xpti") + libdevice_dir = os.path.join(args.src_dir, "libdevice") ocl_header_dir = os.path.join(args.obj_dir, "OpenCL-Headers") icd_loader_lib = os.path.join(args.obj_dir, "OpenCL-ICD-Loader", "build") llvm_targets_to_build = 'X86' - llvm_enable_projects = 'clang;llvm-spirv;sycl;opencl-aot;xpti' + llvm_enable_projects = 'clang;llvm-spirv;sycl;opencl-aot;xpti;libdevice' libclc_targets_to_build = '' sycl_build_pi_cuda = 'OFF' llvm_enable_assertions = 'ON' @@ -49,10 +50,11 @@ def do_configure(args): "-DCMAKE_BUILD_TYPE={}".format(args.build_type), "-DLLVM_ENABLE_ASSERTIONS={}".format(llvm_enable_assertions), "-DLLVM_TARGETS_TO_BUILD={}".format(llvm_targets_to_build), - "-DLLVM_EXTERNAL_PROJECTS=sycl;llvm-spirv;opencl-aot;xpti", + "-DLLVM_EXTERNAL_PROJECTS=sycl;llvm-spirv;opencl-aot;xpti;libdevice", "-DLLVM_EXTERNAL_SYCL_SOURCE_DIR={}".format(sycl_dir), "-DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR={}".format(spirv_dir), "-DLLVM_EXTERNAL_XPTI_SOURCE_DIR={}".format(xpti_dir), + "-DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR={}".format(libdevice_dir), "-DLLVM_ENABLE_PROJECTS={}".format(llvm_enable_projects), "-DLIBCLC_TARGETS_TO_BUILD={}".format(libclc_targets_to_build), "-DSYCL_BUILD_PI_CUDA={}".format(sycl_build_pi_cuda), diff --git a/sycl/source/detail/devicelib/CMakeLists.txt b/libdevice/CMakeLists.txt similarity index 65% rename from sycl/source/detail/devicelib/CMakeLists.txt rename to libdevice/CMakeLists.txt index 84bc9f6225bef..25b3c52f7f332 100644 --- a/sycl/source/detail/devicelib/CMakeLists.txt +++ b/libdevice/CMakeLists.txt @@ -1,42 +1,42 @@ -# Place device libraries near the libsycl.so library in a build -# directory +# Utility project providing various functionalities for SPIR-V devices +# without native support of these functionalities. + if (WIN32) - set(binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") + set(binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") else() - set(binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") + set(binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") endif() set(clang $) set(compile_opts - # suppress an error about SYCL_EXTERNAL - -Wno-sycl-strict - # for CL/__spirv/spirv_vars.hpp - -I${sycl_inc_dir}) + # suppress an error about SYCL_EXTERNAL being used for + # a function with a raw pointer parameter. + -Wno-sycl-strict + ) if (WIN32) - set(devicelib-obj-file ${binary_dir}/libsycl-msvc.o) - add_custom_command(OUTPUT ${devicelib-obj-file} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/msvc_wrapper.cpp - -o ${devicelib-obj-file} - MAIN_DEPENDENCY msvc_wrapper.cpp - DEPENDS wrapper.h clang - VERBATIM) + set(devicelib-obj-file ${binary_dir}/libsycl-msvc.o) + add_custom_command(OUTPUT ${devicelib-obj-file} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/msvc_wrapper.cpp + -o ${devicelib-obj-file} + MAIN_DEPENDENCY msvc_wrapper.cpp + DEPENDS wrapper.h device.h clang + VERBATIM) else() - set(devicelib-obj-file ${binary_dir}/libsycl-glibc.o) - add_custom_command(OUTPUT ${devicelib-obj-file} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/glibc_wrapper.cpp - -o ${devicelib-obj-file} - MAIN_DEPENDENCY glibc_wrapper.cpp - DEPENDS wrapper.h clang - VERBATIM) + set(devicelib-obj-file ${binary_dir}/libsycl-glibc.o) + add_custom_command(OUTPUT ${devicelib-obj-file} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/glibc_wrapper.cpp + -o ${devicelib-obj-file} + MAIN_DEPENDENCY glibc_wrapper.cpp + DEPENDS wrapper.h device.h clang + VERBATIM) endif() - set(devicelib-obj-complex ${binary_dir}/libsycl-complex.o) add_custom_command(OUTPUT ${devicelib-obj-complex} COMMAND ${clang} -fsycl -c @@ -44,7 +44,7 @@ add_custom_command(OUTPUT ${devicelib-obj-complex} ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper.cpp -o ${devicelib-obj-complex} MAIN_DEPENDENCY complex_wrapper.cpp - DEPENDS device_complex.h clang + DEPENDS device_complex.h device.h clang VERBATIM) set(devicelib-obj-complex-fp64 ${binary_dir}/libsycl-complex-fp64.o) @@ -54,7 +54,7 @@ add_custom_command(OUTPUT ${devicelib-obj-complex-fp64} ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper_fp64.cpp -o ${devicelib-obj-complex-fp64} MAIN_DEPENDENCY complex_wrapper_fp64.cpp - DEPENDS device_complex.h clang + DEPENDS device_complex.h device.h clang VERBATIM) set(devicelib-obj-cmath ${binary_dir}/libsycl-cmath.o) @@ -64,7 +64,7 @@ add_custom_command(OUTPUT ${devicelib-obj-cmath} ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper.cpp -o ${devicelib-obj-cmath} MAIN_DEPENDENCY cmath_wrapper.cpp - DEPENDS device_complex.h clang + DEPENDS device_math.h device.h clang VERBATIM) set(devicelib-obj-cmath-fp64 ${binary_dir}/libsycl-cmath-fp64.o) @@ -74,7 +74,7 @@ add_custom_command(OUTPUT ${devicelib-obj-cmath-fp64} ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper_fp64.cpp -o ${devicelib-obj-cmath-fp64} MAIN_DEPENDENCY cmath_wrapper_fp64.cpp - DEPENDS device_math.h clang + DEPENDS device_math.h device.h clang VERBATIM) add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cassert.spv @@ -83,7 +83,7 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cassert.spv ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cassert.cpp -o ${binary_dir}/libsycl-fallback-cassert.spv MAIN_DEPENDENCY fallback-cassert.cpp - DEPENDS wrapper.h clang llvm-spirv + DEPENDS wrapper.h device.h clang llvm-spirv VERBATIM) add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex.spv @@ -92,7 +92,7 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex.spv ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex.cpp -o ${binary_dir}/libsycl-fallback-complex.spv MAIN_DEPENDENCY fallback-complex.cpp - DEPENDS device_math.h device_complex.h clang llvm-spirv + DEPENDS device_math.h device_complex.h device.h clang llvm-spirv VERBATIM) add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex-fp64.spv @@ -101,7 +101,7 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex-fp64.spv ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex-fp64.cpp -o ${binary_dir}/libsycl-fallback-complex-fp64.spv MAIN_DEPENDENCY fallback-complex-fp64.cpp - DEPENDS device_math.h device_complex.h clang llvm-spirv + DEPENDS device_math.h device_complex.h device.h clang llvm-spirv VERBATIM) add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath.spv @@ -110,7 +110,7 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath.spv ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath.cpp -o ${binary_dir}/libsycl-fallback-cmath.spv MAIN_DEPENDENCY fallback-cmath.cpp - DEPENDS device_math.h clang llvm-spirv + DEPENDS device_math.h device.h clang llvm-spirv VERBATIM) add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath-fp64.spv @@ -119,22 +119,26 @@ add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath-fp64.spv ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath-fp64.cpp -o ${binary_dir}/libsycl-fallback-cmath-fp64.spv MAIN_DEPENDENCY fallback-cmath-fp64.cpp - DEPENDS device_math.h clang llvm-spirv + DEPENDS device_math.h device.h clang llvm-spirv VERBATIM) -add_custom_target(devicelib-obj DEPENDS ${devicelib-obj-file} - ${devicelib-obj-complex} - ${devicelib-obj-complex-fp64} - ${devicelib-obj-cmath} - ${devicelib-obj-cmath-fp64}) -add_custom_target(devicelib-spv DEPENDS ${binary_dir}/libsycl-fallback-cassert.spv - ${binary_dir}/libsycl-fallback-complex.spv - ${binary_dir}/libsycl-fallback-complex-fp64.spv - ${binary_dir}/libsycl-fallback-cmath.spv - ${binary_dir}/libsycl-fallback-cmath-fp64.spv) -add_dependencies(sycl devicelib-obj devicelib-spv) +add_custom_target(libsycldevice-obj DEPENDS + ${devicelib-obj-file} + ${devicelib-obj-complex} + ${devicelib-obj-complex-fp64} + ${devicelib-obj-cmath} + ${devicelib-obj-cmath-fp64} +) +add_custom_target(libsycldevice-spv DEPENDS + ${binary_dir}/libsycl-fallback-cassert.spv + ${binary_dir}/libsycl-fallback-complex.spv + ${binary_dir}/libsycl-fallback-complex-fp64.spv + ${binary_dir}/libsycl-fallback-cmath.spv + ${binary_dir}/libsycl-fallback-cmath-fp64.spv +) +add_dependencies(sycl libsycldevice-obj libsycldevice-spv) if (MSVC) - add_dependencies(sycld devicelib-obj devicelib-spv) + add_dependencies(sycld libsycldevice-obj libsycldevice-spv) endif() # Place device libraries near the libsycl.so library in an install diff --git a/sycl/source/detail/devicelib/cmath_wrapper.cpp b/libdevice/cmath_wrapper.cpp similarity index 97% rename from sycl/source/detail/devicelib/cmath_wrapper.cpp rename to libdevice/cmath_wrapper.cpp index b76a103c80359..c2f818d286f67 100644 --- a/sycl/source/detail/devicelib/cmath_wrapper.cpp +++ b/libdevice/cmath_wrapper.cpp @@ -5,9 +5,13 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// + #ifdef __SYCL_DEVICE_ONLY__ #include "device_math.h" + +#ifdef __cplusplus extern "C" { +#endif // __cplusplus SYCL_EXTERNAL float __attribute__((weak)) scalbnf(float x, int n) { return __devicelib_scalbnf(x, n); @@ -207,5 +211,8 @@ SYCL_EXTERNAL float __attribute__((weak)) atanhf(float x) { return __devicelib_atanhf(x); } -} -#endif + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus +#endif // __SYCL_DEVICE_ONLY__ diff --git a/sycl/source/detail/devicelib/cmath_wrapper_fp64.cpp b/libdevice/cmath_wrapper_fp64.cpp similarity index 97% rename from sycl/source/detail/devicelib/cmath_wrapper_fp64.cpp rename to libdevice/cmath_wrapper_fp64.cpp index 87665aa727388..9fc094ca03730 100644 --- a/sycl/source/detail/devicelib/cmath_wrapper_fp64.cpp +++ b/libdevice/cmath_wrapper_fp64.cpp @@ -5,9 +5,13 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// + #ifdef __SYCL_DEVICE_ONLY__ #include "device_math.h" + +#ifdef __cplusplus extern "C" { +#endif // __cplusplus // All exported functions in math and complex device libraries are weak // reference. If users provide their own math or complex functions(with // the prototype), functions in device libraries will be ignored and @@ -206,5 +210,8 @@ SYCL_EXTERNAL double __attribute__((weak)) atanh(double x) { return __devicelib_atanh(x); } -} -#endif + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus +#endif // __SYCL_DEVICE_ONLY__ diff --git a/sycl/source/detail/devicelib/complex_wrapper.cpp b/libdevice/complex_wrapper.cpp similarity index 96% rename from sycl/source/detail/devicelib/complex_wrapper.cpp rename to libdevice/complex_wrapper.cpp index f84874a5ede11..94b4f1d2f9d62 100644 --- a/sycl/source/detail/devicelib/complex_wrapper.cpp +++ b/libdevice/complex_wrapper.cpp @@ -5,9 +5,13 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// + #ifdef __SYCL_DEVICE_ONLY__ #include "device_complex.h" + +#ifdef __cplusplus extern "C" { +#endif // __cplusplus SYCL_EXTERNAL float __attribute__((weak)) cimagf(float __complex__ z) { return __devicelib_cimagf(z); @@ -134,5 +138,8 @@ float __complex__ __attribute__((weak)) __divsc3(float __a, float __b, float __c, float __d) { return __devicelib___divsc3(__a, __b, __c, __d); } -} -#endif + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus +#endif // __SYCL_DEVICE_ONLY__ diff --git a/sycl/source/detail/devicelib/complex_wrapper_fp64.cpp b/libdevice/complex_wrapper_fp64.cpp similarity index 96% rename from sycl/source/detail/devicelib/complex_wrapper_fp64.cpp rename to libdevice/complex_wrapper_fp64.cpp index f02dd6f18a203..cd158075f981f 100644 --- a/sycl/source/detail/devicelib/complex_wrapper_fp64.cpp +++ b/libdevice/complex_wrapper_fp64.cpp @@ -5,9 +5,13 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// + #ifdef __SYCL_DEVICE_ONLY__ #include "device_complex.h" + +#ifdef __cplusplus extern "C" { +#endif // __cplusplus SYCL_EXTERNAL double __attribute__((weak)) cimag(double __complex__ z) { return __devicelib_cimag(z); @@ -135,5 +139,7 @@ double __complex__ __attribute__((weak)) __divdc3(double __a, double __b, return __devicelib___divdc3(__a, __b, __c, __d); } -} -#endif +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus +#endif // __SYCL_DEVICE_ONLY__ diff --git a/sycl/source/detail/devicelib/device_complex.h b/libdevice/device_complex.h similarity index 95% rename from sycl/source/detail/devicelib/device_complex.h rename to libdevice/device_complex.h index 51a2610394f5f..60d0f7a5de2ea 100644 --- a/sycl/source/detail/devicelib/device_complex.h +++ b/libdevice/device_complex.h @@ -5,17 +5,17 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //==------------------------------------------------------------------------==// -#ifndef __SYCL_COMPLEX_WRAPPER_H_ -#define __SYCL_COMPLEX_WRAPPER_H_ +#ifndef __LIBDEVICE_DEVICE_COMPLEX_H_ +#define __LIBDEVICE_DEVICE_COMPLEX_H_ // TODO: This needs to be more robust. // clang doesn't recognize the c11 CMPLX macro, but it does have // its own syntax extension for initializing a complex as a struct. #ifndef CMPLX -#define CMPLX(r, i) ((double __complex__){ (double)r, (double)i }) +#define CMPLX(r, i) ((double __complex__){ (double)(r), (double)(i) }) #endif #ifndef CMPLXF -#define CMPLXF(r, i) ((float __complex__){ (float)r, (float)i }) +#define CMPLXF(r, i) ((float __complex__){ (float)(r), (float)(i) }) #endif SYCL_EXTERNAL @@ -167,4 +167,4 @@ extern "C" double __complex__ __devicelib___divdc3(double a, double b, SYCL_EXTERNAL extern "C" float __complex__ __devicelib___divsc3(float a, float b, float c, float d); -#endif +#endif // __LIBDEVICE_DEVICE_COMPLEX_H_ diff --git a/sycl/source/detail/devicelib/device_math.h b/libdevice/device_math.h similarity index 98% rename from sycl/source/detail/devicelib/device_math.h rename to libdevice/device_math.h index 89ddcdc37f4b3..f1df9a406f034 100644 --- a/sycl/source/detail/devicelib/device_math.h +++ b/libdevice/device_math.h @@ -6,8 +6,8 @@ // //==------------------------------------------------------------------------==// -#ifndef __SYCL_CMATH_WRAPPER_H__ -#define __SYCL_CMATH_WRAPPER_H__ +#ifndef __LIBDEVICE_DEVICE_CMATH_H__ +#define __LIBDEVICE_DEVICE_CMATH_H__ SYCL_EXTERNAL double __spirv_ocl_log(double); SYCL_EXTERNAL double __spirv_ocl_sin(double); @@ -353,4 +353,4 @@ extern "C" float __devicelib_logbf(float x); SYCL_EXTERNAL extern "C" float __devicelib_scalbnf(float x, int n); -#endif +#endif // __LIBDEVICE_DEVICE_CMATH_H__ diff --git a/sycl/source/detail/devicelib/fallback-cassert.cpp b/libdevice/fallback-cassert.cpp similarity index 100% rename from sycl/source/detail/devicelib/fallback-cassert.cpp rename to libdevice/fallback-cassert.cpp diff --git a/sycl/source/detail/devicelib/fallback-cmath-fp64.cpp b/libdevice/fallback-cmath-fp64.cpp similarity index 96% rename from sycl/source/detail/devicelib/fallback-cmath-fp64.cpp rename to libdevice/fallback-cmath-fp64.cpp index a30fc2a9d831a..59fb803e2c122 100644 --- a/sycl/source/detail/devicelib/fallback-cmath-fp64.cpp +++ b/libdevice/fallback-cmath-fp64.cpp @@ -7,7 +7,10 @@ //===----------------------------------------------------------------------===// #ifdef __SYCL_DEVICE_ONLY__ #include "device_math.h" + +#ifdef __cplusplus extern "C" { +#endif // __cplusplus SYCL_EXTERNAL double __devicelib_log(double x) { return __spirv_ocl_log(x); @@ -202,5 +205,7 @@ SYCL_EXTERNAL double __devicelib_atanh(double x) { return __spirv_ocl_atanh(x); } -} -#endif +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus +#endif // __SYCL_DEVICE_ONLY__ diff --git a/sycl/source/detail/devicelib/fallback-cmath.cpp b/libdevice/fallback-cmath.cpp similarity index 96% rename from sycl/source/detail/devicelib/fallback-cmath.cpp rename to libdevice/fallback-cmath.cpp index 24a4ebf23c4f2..f707f5efca964 100644 --- a/sycl/source/detail/devicelib/fallback-cmath.cpp +++ b/libdevice/fallback-cmath.cpp @@ -7,7 +7,10 @@ //===----------------------------------------------------------------------===// #ifdef __SYCL_DEVICE_ONLY__ #include "device_math.h" + +#ifdef __cplusplus extern "C" { +#endif // __cplusplus SYCL_EXTERNAL float __devicelib_scalbnf(float x, int n) { return __spirv_ocl_ldexp(x, n); @@ -207,5 +210,7 @@ SYCL_EXTERNAL float __devicelib_atanhf(float x) { return __spirv_ocl_atanh(x); } -} -#endif +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus +#endif // __SYCL_DEVICE_ONLY__ diff --git a/sycl/source/detail/devicelib/fallback-complex-fp64.cpp b/libdevice/fallback-complex-fp64.cpp similarity index 99% rename from sycl/source/detail/devicelib/fallback-complex-fp64.cpp rename to libdevice/fallback-complex-fp64.cpp index a8d64afee711e..ae9dfa0ad2a17 100644 --- a/sycl/source/detail/devicelib/fallback-complex-fp64.cpp +++ b/libdevice/fallback-complex-fp64.cpp @@ -9,7 +9,10 @@ #include "device_math.h" #include "device_complex.h" #include + +#ifdef __cplusplus extern "C" { +#endif // __cplusplus SYCL_EXTERNAL double __devicelib_creal(double __complex__ z) { return __real__(z); @@ -433,6 +436,7 @@ double __complex__ __devicelib_catan(double __complex__ z) { __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } - +#ifdef __cplusplus } // extern "C" -#endif +#endif // __cplusplus +#endif // __SYCL_DEVICE_ONLY__ diff --git a/sycl/source/detail/devicelib/fallback-complex.cpp b/libdevice/fallback-complex.cpp similarity index 99% rename from sycl/source/detail/devicelib/fallback-complex.cpp rename to libdevice/fallback-complex.cpp index bb0620c3af6d0..30e8039d90c56 100644 --- a/sycl/source/detail/devicelib/fallback-complex.cpp +++ b/libdevice/fallback-complex.cpp @@ -9,7 +9,9 @@ #include "device_math.h" #include "device_complex.h" #include +#ifdef __cplusplus extern "C" { +#endif // __cplusplus SYCL_EXTERNAL float __devicelib_crealf(float __complex__ z) { return __real__(z); @@ -436,6 +438,7 @@ float __complex__ __devicelib_catanf(float __complex__ z) { __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } - +#ifdef __cplusplus } // extern "C" -#endif +#endif // __cplusplus +#endif // __SYCL_DEVICE_ONLY__ diff --git a/sycl/source/detail/devicelib/glibc_wrapper.cpp b/libdevice/glibc_wrapper.cpp similarity index 99% rename from sycl/source/detail/devicelib/glibc_wrapper.cpp rename to libdevice/glibc_wrapper.cpp index 4d3114013ff26..db77555537838 100644 --- a/sycl/source/detail/devicelib/glibc_wrapper.cpp +++ b/libdevice/glibc_wrapper.cpp @@ -8,7 +8,6 @@ #ifdef __SYCL_DEVICE_ONLY__ #include "wrapper.h" - #include // for __spirv_BuiltInGlobalInvocationId, // __spirv_BuiltInLocalInvocationId diff --git a/sycl/source/detail/devicelib/msvc_wrapper.cpp b/libdevice/msvc_wrapper.cpp similarity index 96% rename from sycl/source/detail/devicelib/msvc_wrapper.cpp rename to libdevice/msvc_wrapper.cpp index 686f504169d4e..b566145c014eb 100644 --- a/sycl/source/detail/devicelib/msvc_wrapper.cpp +++ b/libdevice/msvc_wrapper.cpp @@ -6,9 +6,8 @@ // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ +#if __SYCL_DEVICE_ONLY #include "wrapper.h" - #include // for __spirv_BuiltInGlobalInvocationId, // __spirv_BuiltInLocalInvocationId @@ -42,4 +41,4 @@ void _wassert(const wchar_t *wexpr, const wchar_t *wfile, unsigned line) { __spirv_LocalInvocationId_y(), __spirv_LocalInvocationId_z()); } -#endif // __SYCL_DEVICE_ONLY__ +#endif // __SYCL_DEVICE_ONLY diff --git a/sycl/source/detail/devicelib/wrapper.h b/libdevice/wrapper.h similarity index 84% rename from sycl/source/detail/devicelib/wrapper.h rename to libdevice/wrapper.h index b541cb9880c6c..1becc338ea19a 100644 --- a/sycl/source/detail/devicelib/wrapper.h +++ b/libdevice/wrapper.h @@ -6,11 +6,12 @@ // //===----------------------------------------------------------------------===// -#ifndef __SYCL_WRAPPERS_H__ -#define __SYCL_WRAPPERS_H__ +#ifndef __LIBDEVICE_WRAPPER_H__ +#define __LIBDEVICE_WRAPPER_H__ #include #include +#include "device.h" SYCL_EXTERNAL extern "C" void __devicelib_assert_fail( @@ -19,4 +20,4 @@ extern "C" void __devicelib_assert_fail( uint64_t gid0, uint64_t gid1, uint64_t gid2, uint64_t lid0, uint64_t lid1, uint64_t lid2); -#endif // __SYCL_WRAPPERS_H__ +#endif // __LIBDEVICE_WRAPPER_H__ diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt index 8c64509b4e0e6..ef94f3c4ec837 100644 --- a/sycl/source/CMakeLists.txt +++ b/sycl/source/CMakeLists.txt @@ -185,4 +185,3 @@ install(TARGETS ${SYCL_RT_LIBS} ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT sycl RUNTIME DESTINATION "bin" COMPONENT sycl) -add_subdirectory(detail/devicelib) From 705a9859d12bb26ad0894f0c0378bbf496c65c50 Mon Sep 17 00:00:00 2001 From: Vyacheslav Zakharin Date: Fri, 28 Feb 2020 16:13:56 -0800 Subject: [PATCH 2/6] Extract device specifics into device.h header file. Signed-off-by: Vyacheslav Zakharin --- libdevice/CMakeLists.txt | 282 +++++++------- libdevice/cmath_wrapper.cpp | 93 +++-- libdevice/cmath_wrapper_fp64.cpp | 91 +++-- libdevice/complex_wrapper.cpp | 61 ++- libdevice/complex_wrapper_fp64.cpp | 61 ++- libdevice/device.h | 36 ++ libdevice/device_complex.h | 194 +++++----- libdevice/device_math.h | 570 ++++++++++++++-------------- libdevice/fallback-cassert.cpp | 3 +- libdevice/fallback-cmath-fp64.cpp | 87 ++--- libdevice/fallback-cmath.cpp | 89 ++--- libdevice/fallback-complex-fp64.cpp | 61 ++- libdevice/fallback-complex.cpp | 62 ++- libdevice/glibc_wrapper.cpp | 8 +- libdevice/msvc_wrapper.cpp | 8 +- libdevice/wrapper.h | 6 +- 16 files changed, 856 insertions(+), 856 deletions(-) create mode 100644 libdevice/device.h diff --git a/libdevice/CMakeLists.txt b/libdevice/CMakeLists.txt index 25b3c52f7f332..1bb914663d1ea 100644 --- a/libdevice/CMakeLists.txt +++ b/libdevice/CMakeLists.txt @@ -9,155 +9,157 @@ endif() set(clang $) -set(compile_opts - # suppress an error about SYCL_EXTERNAL being used for - # a function with a raw pointer parameter. - -Wno-sycl-strict - ) +if (TARGET sycl) + set(compile_opts + # suppress an error about SYCL_EXTERNAL being used for + # a function with a raw pointer parameter. + -Wno-sycl-strict + ) + + if (WIN32) + set(devicelib-obj-file ${binary_dir}/libsycl-msvc.o) + add_custom_command(OUTPUT ${devicelib-obj-file} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/msvc_wrapper.cpp + -o ${devicelib-obj-file} + MAIN_DEPENDENCY msvc_wrapper.cpp + DEPENDS wrapper.h device.h clang + VERBATIM) + else() + set(devicelib-obj-file ${binary_dir}/libsycl-glibc.o) + add_custom_command(OUTPUT ${devicelib-obj-file} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/glibc_wrapper.cpp + -o ${devicelib-obj-file} + MAIN_DEPENDENCY glibc_wrapper.cpp + DEPENDS wrapper.h device.h clang + VERBATIM) + endif() + + set(devicelib-obj-complex ${binary_dir}/libsycl-complex.o) + add_custom_command(OUTPUT ${devicelib-obj-complex} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper.cpp + -o ${devicelib-obj-complex} + MAIN_DEPENDENCY complex_wrapper.cpp + DEPENDS device_complex.h device.h clang + VERBATIM) -if (WIN32) - set(devicelib-obj-file ${binary_dir}/libsycl-msvc.o) - add_custom_command(OUTPUT ${devicelib-obj-file} + set(devicelib-obj-complex-fp64 ${binary_dir}/libsycl-complex-fp64.o) + add_custom_command(OUTPUT ${devicelib-obj-complex-fp64} COMMAND ${clang} -fsycl -c ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/msvc_wrapper.cpp - -o ${devicelib-obj-file} - MAIN_DEPENDENCY msvc_wrapper.cpp - DEPENDS wrapper.h device.h clang + ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper_fp64.cpp + -o ${devicelib-obj-complex-fp64} + MAIN_DEPENDENCY complex_wrapper_fp64.cpp + DEPENDS device_complex.h device.h clang VERBATIM) -else() - set(devicelib-obj-file ${binary_dir}/libsycl-glibc.o) - add_custom_command(OUTPUT ${devicelib-obj-file} + + set(devicelib-obj-cmath ${binary_dir}/libsycl-cmath.o) + add_custom_command(OUTPUT ${devicelib-obj-cmath} COMMAND ${clang} -fsycl -c ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/glibc_wrapper.cpp - -o ${devicelib-obj-file} - MAIN_DEPENDENCY glibc_wrapper.cpp - DEPENDS wrapper.h device.h clang + ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper.cpp + -o ${devicelib-obj-cmath} + MAIN_DEPENDENCY cmath_wrapper.cpp + DEPENDS device_math.h device.h clang + VERBATIM) + + set(devicelib-obj-cmath-fp64 ${binary_dir}/libsycl-cmath-fp64.o) + add_custom_command(OUTPUT ${devicelib-obj-cmath-fp64} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper_fp64.cpp + -o ${devicelib-obj-cmath-fp64} + MAIN_DEPENDENCY cmath_wrapper_fp64.cpp + DEPENDS device_math.h device.h clang + VERBATIM) + + add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cassert.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cassert.cpp + -o ${binary_dir}/libsycl-fallback-cassert.spv + MAIN_DEPENDENCY fallback-cassert.cpp + DEPENDS wrapper.h device.h clang llvm-spirv + VERBATIM) + + add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex.cpp + -o ${binary_dir}/libsycl-fallback-complex.spv + MAIN_DEPENDENCY fallback-complex.cpp + DEPENDS device_math.h device_complex.h device.h clang llvm-spirv VERBATIM) -endif() -set(devicelib-obj-complex ${binary_dir}/libsycl-complex.o) -add_custom_command(OUTPUT ${devicelib-obj-complex} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper.cpp - -o ${devicelib-obj-complex} - MAIN_DEPENDENCY complex_wrapper.cpp - DEPENDS device_complex.h device.h clang - VERBATIM) - -set(devicelib-obj-complex-fp64 ${binary_dir}/libsycl-complex-fp64.o) -add_custom_command(OUTPUT ${devicelib-obj-complex-fp64} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper_fp64.cpp - -o ${devicelib-obj-complex-fp64} - MAIN_DEPENDENCY complex_wrapper_fp64.cpp - DEPENDS device_complex.h device.h clang - VERBATIM) - -set(devicelib-obj-cmath ${binary_dir}/libsycl-cmath.o) -add_custom_command(OUTPUT ${devicelib-obj-cmath} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper.cpp - -o ${devicelib-obj-cmath} - MAIN_DEPENDENCY cmath_wrapper.cpp - DEPENDS device_math.h device.h clang - VERBATIM) - -set(devicelib-obj-cmath-fp64 ${binary_dir}/libsycl-cmath-fp64.o) -add_custom_command(OUTPUT ${devicelib-obj-cmath-fp64} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper_fp64.cpp - -o ${devicelib-obj-cmath-fp64} - MAIN_DEPENDENCY cmath_wrapper_fp64.cpp - DEPENDS device_math.h device.h clang - VERBATIM) - -add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cassert.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cassert.cpp - -o ${binary_dir}/libsycl-fallback-cassert.spv - MAIN_DEPENDENCY fallback-cassert.cpp - DEPENDS wrapper.h device.h clang llvm-spirv - VERBATIM) - -add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex.cpp - -o ${binary_dir}/libsycl-fallback-complex.spv - MAIN_DEPENDENCY fallback-complex.cpp - DEPENDS device_math.h device_complex.h device.h clang llvm-spirv - VERBATIM) - -add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex-fp64.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex-fp64.cpp - -o ${binary_dir}/libsycl-fallback-complex-fp64.spv - MAIN_DEPENDENCY fallback-complex-fp64.cpp - DEPENDS device_math.h device_complex.h device.h clang llvm-spirv - VERBATIM) - -add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath.cpp - -o ${binary_dir}/libsycl-fallback-cmath.spv - MAIN_DEPENDENCY fallback-cmath.cpp - DEPENDS device_math.h device.h clang llvm-spirv - VERBATIM) - -add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath-fp64.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath-fp64.cpp - -o ${binary_dir}/libsycl-fallback-cmath-fp64.spv - MAIN_DEPENDENCY fallback-cmath-fp64.cpp - DEPENDS device_math.h device.h clang llvm-spirv - VERBATIM) - -add_custom_target(libsycldevice-obj DEPENDS - ${devicelib-obj-file} - ${devicelib-obj-complex} - ${devicelib-obj-complex-fp64} - ${devicelib-obj-cmath} - ${devicelib-obj-cmath-fp64} -) -add_custom_target(libsycldevice-spv DEPENDS - ${binary_dir}/libsycl-fallback-cassert.spv - ${binary_dir}/libsycl-fallback-complex.spv - ${binary_dir}/libsycl-fallback-complex-fp64.spv - ${binary_dir}/libsycl-fallback-cmath.spv - ${binary_dir}/libsycl-fallback-cmath-fp64.spv -) -add_dependencies(sycl libsycldevice-obj libsycldevice-spv) -if (MSVC) + add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex-fp64.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex-fp64.cpp + -o ${binary_dir}/libsycl-fallback-complex-fp64.spv + MAIN_DEPENDENCY fallback-complex-fp64.cpp + DEPENDS device_math.h device_complex.h device.h clang llvm-spirv + VERBATIM) + + add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath.cpp + -o ${binary_dir}/libsycl-fallback-cmath.spv + MAIN_DEPENDENCY fallback-cmath.cpp + DEPENDS device_math.h device.h clang llvm-spirv + VERBATIM) + + add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath-fp64.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath-fp64.cpp + -o ${binary_dir}/libsycl-fallback-cmath-fp64.spv + MAIN_DEPENDENCY fallback-cmath-fp64.cpp + DEPENDS device_math.h device.h clang llvm-spirv + VERBATIM) + + add_custom_target(libsycldevice-obj DEPENDS + ${devicelib-obj-file} + ${devicelib-obj-complex} + ${devicelib-obj-complex-fp64} + ${devicelib-obj-cmath} + ${devicelib-obj-cmath-fp64} + ) + add_custom_target(libsycldevice-spv DEPENDS + ${binary_dir}/libsycl-fallback-cassert.spv + ${binary_dir}/libsycl-fallback-complex.spv + ${binary_dir}/libsycl-fallback-complex-fp64.spv + ${binary_dir}/libsycl-fallback-cmath.spv + ${binary_dir}/libsycl-fallback-cmath-fp64.spv + ) + add_dependencies(sycl libsycldevice-obj libsycldevice-spv) + if (MSVC) add_dependencies(sycld libsycldevice-obj libsycldevice-spv) -endif() + endif() -# Place device libraries near the libsycl.so library in an install -# directory as well -if (WIN32) + # Place device libraries near the libsycl.so library in an install + # directory as well + if (WIN32) set(install_dest bin) -else() + else() set(install_dest lib${LLVM_LIBDIR_SUFFIX}) -endif() - -install(FILES ${devicelib-obj-file} - ${binary_dir}/libsycl-fallback-cassert.spv - ${devicelib-obj-complex} - ${binary_dir}/libsycl-fallback-complex.spv - ${devicelib-obj-complex-fp64} - ${binary_dir}/libsycl-fallback-complex-fp64.spv - ${devicelib-obj-cmath} - ${binary_dir}/libsycl-fallback-cmath.spv - ${devicelib-obj-cmath-fp64} - ${binary_dir}/libsycl-fallback-cmath-fp64.spv - DESTINATION ${install_dest} - COMPONENT sycl) + endif() + + install(FILES ${devicelib-obj-file} + ${binary_dir}/libsycl-fallback-cassert.spv + ${devicelib-obj-complex} + ${binary_dir}/libsycl-fallback-complex.spv + ${devicelib-obj-complex-fp64} + ${binary_dir}/libsycl-fallback-complex-fp64.spv + ${devicelib-obj-cmath} + ${binary_dir}/libsycl-fallback-cmath.spv + ${devicelib-obj-cmath-fp64} + ${binary_dir}/libsycl-fallback-cmath-fp64.spv + DESTINATION ${install_dest} + COMPONENT sycl) +endif(TARGET sycl) diff --git a/libdevice/cmath_wrapper.cpp b/libdevice/cmath_wrapper.cpp index c2f818d286f67..e740af358238b 100644 --- a/libdevice/cmath_wrapper.cpp +++ b/libdevice/cmath_wrapper.cpp @@ -6,213 +6,208 @@ // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ +#include "device.h" + +#if IMPL_ENABLED #include "device_math.h" -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) scalbnf(float x, int n) { return __devicelib_scalbnf(x, n); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) logf(float x) { return __devicelib_logf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) expf(float x) { return __devicelib_expf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) frexpf(float x, int *exp) { return __devicelib_frexpf(x, exp); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) ldexpf(float x, int exp) { return __devicelib_ldexpf(x, exp); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) log10f(float x) { return __devicelib_log10f(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) modff(float x, float *intpart) { return __devicelib_modff(x, intpart); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) exp2f(float x) { return __devicelib_exp2f(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) expm1f(float x) { return __devicelib_expm1f(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C int __attribute__((weak)) ilogbf(float x) { return __devicelib_ilogbf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) log1pf(float x) { return __devicelib_log1pf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) log2f(float x) { return __devicelib_log2f(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) logbf(float x) { return __devicelib_logbf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) sqrtf(float x) { return __devicelib_sqrtf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) cbrtf(float x) { return __devicelib_cbrtf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) hypotf(float x, float y) { return __devicelib_hypotf(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) erff(float x) { return __devicelib_erff(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) erfcf(float x) { return __devicelib_erfcf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) tgammaf(float x) { return __devicelib_tgammaf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) lgammaf(float x) { return __devicelib_lgammaf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) fmodf(float x, float y) { return __devicelib_fmodf(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) remainderf(float x, float y) { return __devicelib_remainderf(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) remquof(float x, float y, int *q) { return __devicelib_remquof(x, y, q); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) nextafterf(float x, float y) { return __devicelib_nextafterf(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) fdimf(float x, float y) { return __devicelib_fdimf(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) fmaf(float x, float y, float z) { return __devicelib_fmaf(x, y, z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) sinf(float x) { return __devicelib_sinf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) cosf(float x) { return __devicelib_cosf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) tanf(float x) { return __devicelib_tanf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) powf(float x, float y) { return __devicelib_powf(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__ ((weak)) acosf(float x) { return __devicelib_acosf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) asinf(float x) { return __devicelib_asinf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) atanf(float x) { return __devicelib_atanf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) atan2f(float x, float y) { return __devicelib_atan2f(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) coshf(float x) { return __devicelib_coshf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) sinhf(float x) { return __devicelib_sinhf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) tanhf(float x) { return __devicelib_tanhf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) acoshf(float x) { return __devicelib_acoshf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) asinhf(float x) { return __devicelib_asinhf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) atanhf(float x) { return __devicelib_atanhf(x); } - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // __SYCL_DEVICE_ONLY__ +#endif // IMPL_ENABLED diff --git a/libdevice/cmath_wrapper_fp64.cpp b/libdevice/cmath_wrapper_fp64.cpp index 9fc094ca03730..73999978d727c 100644 --- a/libdevice/cmath_wrapper_fp64.cpp +++ b/libdevice/cmath_wrapper_fp64.cpp @@ -6,212 +6,207 @@ // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ +#include "device.h" + +#if IMPL_ENABLED #include "device_math.h" -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus // All exported functions in math and complex device libraries are weak // reference. If users provide their own math or complex functions(with // the prototype), functions in device libraries will be ignored and // overrided by users' version. -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) log(double x) { return __devicelib_log(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) exp(double x) { return __devicelib_exp(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) frexp(double x, int *exp) { return __devicelib_frexp(x, exp); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) ldexp(double x, int exp) { return __devicelib_ldexp(x, exp); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) log10(double x) { return __devicelib_log10(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) modf(double x, double *intpart) { return __devicelib_modf(x, intpart); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) exp2(double x) { return __devicelib_exp2(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) expm1(double x) { return __devicelib_expm1(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C int __attribute__((weak)) ilogb(double x) { return __devicelib_ilogb(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) log1p(double x) { return __devicelib_log1p(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) log2(double x) { return __devicelib_log2(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) logb(double x) { return __devicelib_logb(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) sqrt(double x) { return __devicelib_sqrt(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) cbrt(double x) { return __devicelib_cbrt(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) hypot(double x, double y) { return __devicelib_hypot(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) erf(double x) { return __devicelib_erf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) erfc(double x) { return __devicelib_erfc(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) tgamma(double x) { return __devicelib_tgamma(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) lgamma(double x) { return __devicelib_lgamma(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) fmod(double x, double y) { return __devicelib_fmod(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) remainder(double x, double y) { return __devicelib_remainder(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) remquo(double x, double y, int *q) { return __devicelib_remquo(x, y, q); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) nextafter(double x, double y) { return __devicelib_nextafter(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) fdim(double x, double y) { return __devicelib_fdim(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) fma(double x, double y, double z) { return __devicelib_fma(x, y, z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) sin(double x) { return __devicelib_sin(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) cos(double x) { return __devicelib_cos(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) tan(double x) { return __devicelib_tan(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) pow(double x, double y) { return __devicelib_pow(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__ ((weak)) acos(double x) { return __devicelib_acos(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) asin(double x) { return __devicelib_asin(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) atan(double x) { return __devicelib_atan(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) atan2(double x, double y) { return __devicelib_atan2(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) cosh(double x) { return __devicelib_cosh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) sinh(double x) { return __devicelib_sinh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) tanh(double x) { return __devicelib_tanh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) acosh(double x) { return __devicelib_acosh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) asinh(double x) { return __devicelib_asinh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) atanh(double x) { return __devicelib_atanh(x); } - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // __SYCL_DEVICE_ONLY__ +#endif // IMPL_ENABLED diff --git a/libdevice/complex_wrapper.cpp b/libdevice/complex_wrapper.cpp index 94b4f1d2f9d62..f58c4bd2edc2a 100644 --- a/libdevice/complex_wrapper.cpp +++ b/libdevice/complex_wrapper.cpp @@ -6,126 +6,125 @@ // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ +#include "device.h" + +#if IMPL_ENABLED #include "device_complex.h" -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) cimagf(float __complex__ z) { return __devicelib_cimagf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) crealf(float __complex__ z) { return __devicelib_crealf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) cargf(float __complex__ z) { return __devicelib_cargf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __attribute__((weak)) cabsf(float __complex__ z) { return __devicelib_cabsf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) cprojf(float __complex__ z) { return __devicelib_cprojf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) cexpf(float __complex__ z) { return __devicelib_cexpf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) clogf(float __complex__ z) { return __devicelib_clogf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) cpowf(float __complex__ x, float __complex__ y) { return __devicelib_cpowf(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) cpolarf(float rho, float theta) { return __devicelib_cpolarf(rho, theta); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) csqrtf(float __complex__ z) { return __devicelib_csqrtf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) csinhf(float __complex__ z) { return __devicelib_csinhf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) ccoshf(float __complex__ z) { return __devicelib_ccoshf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) ctanhf(float __complex__ z) { return __devicelib_ctanhf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) csinf(float __complex__ z) { return __devicelib_csinf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) ccosf(float __complex__ z) { return __devicelib_ccosf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) ctanf(float __complex__ z) { return __devicelib_ctanf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) cacosf(float __complex__ z) { return __devicelib_cacosf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) casinhf(float __complex__ z) { return __devicelib_casinhf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) casinf(float __complex__ z) { return __devicelib_casinf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) cacoshf(float __complex__ z) { return __devicelib_cacoshf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) catanhf(float __complex__ z) { return __devicelib_catanhf(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) catanf(float __complex__ z) { return __devicelib_catanf(z); } // __mulsc3 // Returns: the product of a + ib and c + id -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) __mulsc3(float __a, float __b, float __c, float __d) { return __devicelib___mulsc3(__a, __b, __c, __d); @@ -133,13 +132,9 @@ float __complex__ __attribute__((weak)) __mulsc3(float __a, float __b, // __divsc3 // Returns: the quotient of (a + ib) / (c + id) -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __attribute__((weak)) __divsc3(float __a, float __b, float __c, float __d) { return __devicelib___divsc3(__a, __b, __c, __d); } - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // __SYCL_DEVICE_ONLY__ +#endif // IMPL_ENABLED diff --git a/libdevice/complex_wrapper_fp64.cpp b/libdevice/complex_wrapper_fp64.cpp index cd158075f981f..22845a84b5cb9 100644 --- a/libdevice/complex_wrapper_fp64.cpp +++ b/libdevice/complex_wrapper_fp64.cpp @@ -6,126 +6,125 @@ // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ +#include "device.h" + +#if IMPL_ENABLED #include "device_complex.h" -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) cimag(double __complex__ z) { return __devicelib_cimag(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) creal(double __complex__ z) { return __devicelib_creal(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) cabs(double __complex__ z) { return __devicelib_cabs(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __attribute__((weak)) carg(double __complex__ z) { return __devicelib_carg(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) cproj(double __complex__ z) { return __devicelib_cproj(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) cexp(double __complex__ z) { return __devicelib_cexp(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) clog(double __complex__ z) { return __devicelib_clog(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) cpow(double __complex__ x, double __complex__ y) { return __devicelib_cpow(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) cpolar(double rho, double theta) { return __devicelib_cpolar(rho, theta); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) csqrt(double __complex__ z) { return __devicelib_csqrt(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) csinh(double __complex__ z) { return __devicelib_csinh(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) ccosh(double __complex__ z) { return __devicelib_ccosh(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) ctanh(double __complex__ z) { return __devicelib_ctanh(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) csin(double __complex__ z) { return __devicelib_csin(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) ccos(double __complex__ z) { return __devicelib_ccos(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) ctan(double __complex__ z) { return __devicelib_ctan(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) cacos(double __complex__ z) { return __devicelib_cacos(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) casinh(double __complex__ z) { return __devicelib_casinh(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) casin(double __complex__ z) { return __devicelib_casin(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) cacosh(double __complex__ z) { return __devicelib_cacosh(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) catanh(double __complex__ z) { return __devicelib_catanh(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) catan(double __complex__ z) { return __devicelib_catan(z); } // __muldc3 // Returns: the product of a + ib and c + id -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) __muldc3(double __a, double __b, double __c, double __d) { return __devicelib___muldc3(__a, __b, __c, __d); @@ -133,13 +132,9 @@ double __complex__ __attribute__((weak)) __muldc3(double __a, double __b, // __divdc3 // Returns: the quotient of (a + ib) / (c + id) -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __attribute__((weak)) __divdc3(double __a, double __b, double __c, double __d) { return __devicelib___divdc3(__a, __b, __c, __d); } - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // __SYCL_DEVICE_ONLY__ +#endif // IMPL_ENABLED diff --git a/libdevice/device.h b/libdevice/device.h new file mode 100644 index 0000000000000..f5f4dd655a394 --- /dev/null +++ b/libdevice/device.h @@ -0,0 +1,36 @@ +//==--- device.h - device definitions ------------------------*- C++ -*-----==// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef __LIBDEVICE_DEVICE_H__ +#define __LIBDEVICE_DEVICE_H__ + +#ifdef __cplusplus +#define EXTERN_C extern "C" +#else // __cplusplus +#define EXTERN_C +#endif // __cplusplus + +#ifdef CL_SYCL_LANGUAGE_VERSION +// FIXME: we have to include CL/sycl/detail/common.hpp here, +// so that it undefined SYCL_EXTERNAL for host compilation. +// I cannot do that now, because of the conflicting +// definitions of _cl_motion_estimation_desc_intel in +// cl_ext.h from Intel OpenCL SDK and +// cl_ext_intel.h from Khronos. For some reason +// OpenCL SDK prepends SYCL headers in the include order. +// #include "CL/sycl/detail/common.hpp" +#define DEVICE_EXTERNAL SYCL_EXTERNAL +#define IMPL_ENABLED __SYCL_DEVICE_ONLY__ +#else // CL_SYCL_LANGUAGE_VERSION +#define DEVICE_EXTERNAL +#define IMPL_ENABLED 0 +#endif // CL_SYCL_LANGUAGE_VERSION + +#define DEVICE_EXTERN_C DEVICE_EXTERNAL EXTERN_C + +#endif // __LIBDEVICE_DEVICE_H__ diff --git a/libdevice/device_complex.h b/libdevice/device_complex.h index 60d0f7a5de2ea..b45701affcb26 100644 --- a/libdevice/device_complex.h +++ b/libdevice/device_complex.h @@ -8,6 +8,8 @@ #ifndef __LIBDEVICE_DEVICE_COMPLEX_H_ #define __LIBDEVICE_DEVICE_COMPLEX_H_ +#include "device.h" + // TODO: This needs to be more robust. // clang doesn't recognize the c11 CMPLX macro, but it does have // its own syntax extension for initializing a complex as a struct. @@ -18,153 +20,153 @@ #define CMPLXF(r, i) ((float __complex__){ (float)(r), (float)(i) }) #endif -SYCL_EXTERNAL -extern "C" double __devicelib_cimag(double __complex__ z); +DEVICE_EXTERN_C +double __devicelib_cimag(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __devicelib_cimagf(float __complex__ z); +DEVICE_EXTERN_C +float __devicelib_cimagf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __devicelib_creal(double __complex__ z); +DEVICE_EXTERN_C +double __devicelib_creal(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __devicelib_crealf(float __complex__ z); +DEVICE_EXTERN_C +float __devicelib_crealf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __devicelib_carg(double __complex__ z); +DEVICE_EXTERN_C +double __devicelib_carg(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __devicelib_cargf(float __complex__ z); +DEVICE_EXTERN_C +float __devicelib_cargf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __devicelib_cabs(double __complex__ z); +DEVICE_EXTERN_C +double __devicelib_cabs(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __devicelib_cabsf(float __complex__ z); +DEVICE_EXTERN_C +float __devicelib_cabsf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_cproj(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_cproj(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_cprojf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_cprojf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_cexp(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_cexp(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_cexpf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_cexpf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_clog(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_clog(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_clogf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_clogf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_cpow(double __complex__ x, +DEVICE_EXTERN_C +double __complex__ __devicelib_cpow(double __complex__ x, double __complex__ y); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_cpowf(float __complex__ x, +DEVICE_EXTERN_C +float __complex__ __devicelib_cpowf(float __complex__ x, float __complex__ y); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_cpolar(double x, double y); +DEVICE_EXTERN_C +double __complex__ __devicelib_cpolar(double x, double y); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_cpolarf(float x, float y); +DEVICE_EXTERN_C +float __complex__ __devicelib_cpolarf(float x, float y); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_csqrt(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_csqrt(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_csqrtf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_csqrtf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_csinh(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_csinh(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_csinhf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_csinhf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_ccosh(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_ccosh(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_ccoshf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_ccoshf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_ctanh(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_ctanh(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_ctanhf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_ctanhf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_csin(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_csin(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_csinf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_csinf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_ccos(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_ccos(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_ccosf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_ccosf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_ctan(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_ctan(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_ctanf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_ctanf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_cacos(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_cacos(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_cacosf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_cacosf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_casinh(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_casinh(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_casinhf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_casinhf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_casin(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_casin(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_casinf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_casinf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_cacosh(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_cacosh(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_cacoshf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_cacoshf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_catanh(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_catanh(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_catanhf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_catanhf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib_catan(double __complex__ z); +DEVICE_EXTERN_C +double __complex__ __devicelib_catan(double __complex__ z); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib_catanf(float __complex__ z); +DEVICE_EXTERN_C +float __complex__ __devicelib_catanf(float __complex__ z); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib___muldc3(double a, double b, +DEVICE_EXTERN_C +double __complex__ __devicelib___muldc3(double a, double b, double c, double d); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib___mulsc3(float a, float b, +DEVICE_EXTERN_C +float __complex__ __devicelib___mulsc3(float a, float b, float c, float d); -SYCL_EXTERNAL -extern "C" double __complex__ __devicelib___divdc3(double a, double b, +DEVICE_EXTERN_C +double __complex__ __devicelib___divdc3(double a, double b, double c, double d); -SYCL_EXTERNAL -extern "C" float __complex__ __devicelib___divsc3(float a, float b, +DEVICE_EXTERN_C +float __complex__ __devicelib___divsc3(float a, float b, float c, float d); #endif // __LIBDEVICE_DEVICE_COMPLEX_H_ diff --git a/libdevice/device_math.h b/libdevice/device_math.h index f1df9a406f034..de9ea229db8d8 100644 --- a/libdevice/device_math.h +++ b/libdevice/device_math.h @@ -6,351 +6,353 @@ // //==------------------------------------------------------------------------==// -#ifndef __LIBDEVICE_DEVICE_CMATH_H__ -#define __LIBDEVICE_DEVICE_CMATH_H__ - -SYCL_EXTERNAL double __spirv_ocl_log(double); -SYCL_EXTERNAL double __spirv_ocl_sin(double); -SYCL_EXTERNAL double __spirv_ocl_cos(double); -SYCL_EXTERNAL double __spirv_ocl_sinh(double); -SYCL_EXTERNAL double __spirv_ocl_cosh(double); -SYCL_EXTERNAL double __spirv_ocl_tanh(double); -SYCL_EXTERNAL double __spirv_ocl_exp(double); -SYCL_EXTERNAL double __spirv_ocl_sqrt(double); -SYCL_EXTERNAL bool __spirv_IsInf(double); -SYCL_EXTERNAL bool __spirv_IsFinite(double); -SYCL_EXTERNAL bool __spirv_IsNan(double); -SYCL_EXTERNAL bool __spirv_IsNormal(double); -SYCL_EXTERNAL bool __spirv_SignBitSet(double); -SYCL_EXTERNAL double __spirv_ocl_hypot(double, double); -SYCL_EXTERNAL double __spirv_ocl_atan2(double, double); -SYCL_EXTERNAL double __spirv_ocl_pow(double, double); -SYCL_EXTERNAL double __spirv_ocl_ldexp(double, int); -SYCL_EXTERNAL double __spirv_ocl_copysign(double, double); -SYCL_EXTERNAL double __spirv_ocl_fmax(double, double); -SYCL_EXTERNAL double __spirv_ocl_fabs(double); -SYCL_EXTERNAL double __spirv_ocl_tan(double); -SYCL_EXTERNAL double __spirv_ocl_acos(double); -SYCL_EXTERNAL double __spirv_ocl_asin(double); -SYCL_EXTERNAL double __spirv_ocl_atan(double); -SYCL_EXTERNAL double __spirv_ocl_atan2(double, double); -SYCL_EXTERNAL double __spirv_ocl_cosh(double); -SYCL_EXTERNAL double __spirv_ocl_sinh(double); -SYCL_EXTERNAL double __spirv_ocl_tanh(double); -SYCL_EXTERNAL double __spirv_ocl_acosh(double); -SYCL_EXTERNAL double __spirv_ocl_asinh(double); -SYCL_EXTERNAL double __spirv_ocl_atanh(double); -SYCL_EXTERNAL double __spirv_ocl_frexp(double, int *); -SYCL_EXTERNAL double __spirv_ocl_log10(double); -SYCL_EXTERNAL double __spirv_ocl_modf(double, double *); -SYCL_EXTERNAL double __spirv_ocl_exp2(double); -SYCL_EXTERNAL double __spirv_ocl_expm1(double); -SYCL_EXTERNAL int __spirv_ocl_ilogb(double); -SYCL_EXTERNAL double __spriv_ocl_log1p(double); -SYCL_EXTERNAL double __spirv_ocl_log2(double); -SYCL_EXTERNAL double __spirv_ocl_logb(double); -SYCL_EXTERNAL double __spirv_ocl_sqrt(double); -SYCL_EXTERNAL double __spirv_ocl_cbrt(double); -SYCL_EXTERNAL double __spirv_ocl_hypot(double); -SYCL_EXTERNAL double __spirv_ocl_erf(double); -SYCL_EXTERNAL double __spirv_ocl_erfc(double); -SYCL_EXTERNAL double __spirv_ocl_tgamma(double); -SYCL_EXTERNAL double __spirv_ocl_lgamma(double); -SYCL_EXTERNAL double __spirv_ocl_fmod(double, double); -SYCL_EXTERNAL double __spirv_ocl_remainder(double, double); -SYCL_EXTERNAL double __spirv_ocl_remquo(double, double, int *); -SYCL_EXTERNAL double __spirv_ocl_nextafter(double, double); -SYCL_EXTERNAL double __spirv_ocl_fdim(double, double); -SYCL_EXTERNAL double __spirv_ocl_fma(double, double, double); - -SYCL_EXTERNAL float __spirv_ocl_log(float); -SYCL_EXTERNAL float __spirv_ocl_logb(float); -SYCL_EXTERNAL float __spirv_ocl_sin(float); -SYCL_EXTERNAL float __spirv_ocl_cos(float); -SYCL_EXTERNAL float __spirv_ocl_sinh(float); -SYCL_EXTERNAL float __spirv_ocl_cosh(float); -SYCL_EXTERNAL float __spirv_ocl_tanh(float); -SYCL_EXTERNAL float __spirv_ocl_exp(float); -SYCL_EXTERNAL float __spirv_ocl_sqrt(float); -SYCL_EXTERNAL bool __spirv_IsInf(float); -SYCL_EXTERNAL bool __spirv_IsFinite(float); -SYCL_EXTERNAL bool __spirv_IsNan(float); -SYCL_EXTERNAL bool __spirv_IsNormal(double); -SYCL_EXTERNAL bool __spirv_SignBitSet(float); -SYCL_EXTERNAL float __spirv_ocl_hypot(float, float); -SYCL_EXTERNAL float __spirv_ocl_atan2(float, float); -SYCL_EXTERNAL float __spirv_ocl_pow(float, float); -SYCL_EXTERNAL float __spirv_ocl_ldexp(float, int); -SYCL_EXTERNAL float __spirv_ocl_copysign(float, float); -SYCL_EXTERNAL float __spirv_ocl_fmax(float, float); -SYCL_EXTERNAL float __spirv_ocl_fabs(float); -SYCL_EXTERNAL float __spirv_ocl_tan(float); -SYCL_EXTERNAL float __spirv_ocl_acos(float); -SYCL_EXTERNAL float __spirv_ocl_asin(float); -SYCL_EXTERNAL float __spirv_ocl_atan(float); -SYCL_EXTERNAL float __spirv_ocl_atan2(float, float); -SYCL_EXTERNAL float __spirv_ocl_cosh(float); -SYCL_EXTERNAL float __spirv_ocl_sinh(float); -SYCL_EXTERNAL float __spirv_ocl_tanh(float); -SYCL_EXTERNAL float __spirv_ocl_acosh(float); -SYCL_EXTERNAL float __spirv_ocl_asinh(float); -SYCL_EXTERNAL float __spirv_ocl_atanh(float); -SYCL_EXTERNAL float __spirv_ocl_frexp(float, int *); -SYCL_EXTERNAL float __spirv_ocl_log10(float); -SYCL_EXTERNAL float __spirv_ocl_modf(float, float *); -SYCL_EXTERNAL float __spirv_ocl_exp2(float); -SYCL_EXTERNAL float __spirv_ocl_expm1(float); -SYCL_EXTERNAL int __spirv_ocl_ilogb(float); -SYCL_EXTERNAL float __spirv_ocl_log1p(float); -SYCL_EXTERNAL float __spirv_ocl_log2(float); -SYCL_EXTERNAL float __spirv_ocl_sqrt(float); -SYCL_EXTERNAL float __spirv_ocl_cbrt(float); -SYCL_EXTERNAL float __spirv_ocl_hypot(float); -SYCL_EXTERNAL float __spirv_ocl_erf(float); -SYCL_EXTERNAL float __spirv_ocl_erfc(float); -SYCL_EXTERNAL float __spirv_ocl_tgamma(float); -SYCL_EXTERNAL float __spirv_ocl_lgamma(float); -SYCL_EXTERNAL float __spirv_ocl_fmod(float, float); -SYCL_EXTERNAL float __spirv_ocl_remainder(float, float); -SYCL_EXTERNAL float __spirv_ocl_remquo(float, float, int *); -SYCL_EXTERNAL float __spirv_ocl_nextafter(float, float); -SYCL_EXTERNAL float __spirv_ocl_fdim(float, float); -SYCL_EXTERNAL float __spirv_ocl_fma(float, float, float); - -SYCL_EXTERNAL -extern "C" double __devicelib_log(double x); - -SYCL_EXTERNAL -extern "C" float __devicelib_logf(float x); - -SYCL_EXTERNAL -extern "C" double __devicelib_sin(double x); - -SYCL_EXTERNAL -extern "C" float __devicelib_sinf(float x); - -SYCL_EXTERNAL -extern "C" double __devicelib_cos(double x); - -SYCL_EXTERNAL -extern "C" float __devicelib_cosf(float x); - -SYCL_EXTERNAL -extern "C" double __devicelib_tan(double x); - -SYCL_EXTERNAL -extern "C" float __devicelib_tanf(float x); - -SYCL_EXTERNAL -extern "C" double __devicelib_acos(double x); - -SYCL_EXTERNAL -extern "C" float __devicelib_acosf(float x); - -SYCL_EXTERNAL -extern "C" double __devicelib_pow(double x, double y); - -SYCL_EXTERNAL -extern "C" float __devicelib_powf(float x, float y); - -SYCL_EXTERNAL -extern "C" double __devicelib_sqrt(double x); - -SYCL_EXTERNAL -extern "C" float __devicelib_sqrtf(float x); - -SYCL_EXTERNAL -extern "C" double __devicelib_cbrt(double x); +#ifndef __LIBDEVICE_DEVICE_MATH_H__ +#define __LIBDEVICE_DEVICE_MATH_H__ + +#include "device.h" + +DEVICE_EXTERNAL double __spirv_ocl_log(double); +DEVICE_EXTERNAL double __spirv_ocl_sin(double); +DEVICE_EXTERNAL double __spirv_ocl_cos(double); +DEVICE_EXTERNAL double __spirv_ocl_sinh(double); +DEVICE_EXTERNAL double __spirv_ocl_cosh(double); +DEVICE_EXTERNAL double __spirv_ocl_tanh(double); +DEVICE_EXTERNAL double __spirv_ocl_exp(double); +DEVICE_EXTERNAL double __spirv_ocl_sqrt(double); +DEVICE_EXTERNAL bool __spirv_IsInf(double); +DEVICE_EXTERNAL bool __spirv_IsFinite(double); +DEVICE_EXTERNAL bool __spirv_IsNan(double); +DEVICE_EXTERNAL bool __spirv_IsNormal(double); +DEVICE_EXTERNAL bool __spirv_SignBitSet(double); +DEVICE_EXTERNAL double __spirv_ocl_hypot(double, double); +DEVICE_EXTERNAL double __spirv_ocl_atan2(double, double); +DEVICE_EXTERNAL double __spirv_ocl_pow(double, double); +DEVICE_EXTERNAL double __spirv_ocl_ldexp(double, int); +DEVICE_EXTERNAL double __spirv_ocl_copysign(double, double); +DEVICE_EXTERNAL double __spirv_ocl_fmax(double, double); +DEVICE_EXTERNAL double __spirv_ocl_fabs(double); +DEVICE_EXTERNAL double __spirv_ocl_tan(double); +DEVICE_EXTERNAL double __spirv_ocl_acos(double); +DEVICE_EXTERNAL double __spirv_ocl_asin(double); +DEVICE_EXTERNAL double __spirv_ocl_atan(double); +DEVICE_EXTERNAL double __spirv_ocl_atan2(double, double); +DEVICE_EXTERNAL double __spirv_ocl_cosh(double); +DEVICE_EXTERNAL double __spirv_ocl_sinh(double); +DEVICE_EXTERNAL double __spirv_ocl_tanh(double); +DEVICE_EXTERNAL double __spirv_ocl_acosh(double); +DEVICE_EXTERNAL double __spirv_ocl_asinh(double); +DEVICE_EXTERNAL double __spirv_ocl_atanh(double); +DEVICE_EXTERNAL double __spirv_ocl_frexp(double, int *); +DEVICE_EXTERNAL double __spirv_ocl_log10(double); +DEVICE_EXTERNAL double __spirv_ocl_modf(double, double *); +DEVICE_EXTERNAL double __spirv_ocl_exp2(double); +DEVICE_EXTERNAL double __spirv_ocl_expm1(double); +DEVICE_EXTERNAL int __spirv_ocl_ilogb(double); +DEVICE_EXTERNAL double __spriv_ocl_log1p(double); +DEVICE_EXTERNAL double __spirv_ocl_log2(double); +DEVICE_EXTERNAL double __spirv_ocl_logb(double); +DEVICE_EXTERNAL double __spirv_ocl_sqrt(double); +DEVICE_EXTERNAL double __spirv_ocl_cbrt(double); +DEVICE_EXTERNAL double __spirv_ocl_hypot(double); +DEVICE_EXTERNAL double __spirv_ocl_erf(double); +DEVICE_EXTERNAL double __spirv_ocl_erfc(double); +DEVICE_EXTERNAL double __spirv_ocl_tgamma(double); +DEVICE_EXTERNAL double __spirv_ocl_lgamma(double); +DEVICE_EXTERNAL double __spirv_ocl_fmod(double, double); +DEVICE_EXTERNAL double __spirv_ocl_remainder(double, double); +DEVICE_EXTERNAL double __spirv_ocl_remquo(double, double, int *); +DEVICE_EXTERNAL double __spirv_ocl_nextafter(double, double); +DEVICE_EXTERNAL double __spirv_ocl_fdim(double, double); +DEVICE_EXTERNAL double __spirv_ocl_fma(double, double, double); + +DEVICE_EXTERNAL float __spirv_ocl_log(float); +DEVICE_EXTERNAL float __spirv_ocl_logb(float); +DEVICE_EXTERNAL float __spirv_ocl_sin(float); +DEVICE_EXTERNAL float __spirv_ocl_cos(float); +DEVICE_EXTERNAL float __spirv_ocl_sinh(float); +DEVICE_EXTERNAL float __spirv_ocl_cosh(float); +DEVICE_EXTERNAL float __spirv_ocl_tanh(float); +DEVICE_EXTERNAL float __spirv_ocl_exp(float); +DEVICE_EXTERNAL float __spirv_ocl_sqrt(float); +DEVICE_EXTERNAL bool __spirv_IsInf(float); +DEVICE_EXTERNAL bool __spirv_IsFinite(float); +DEVICE_EXTERNAL bool __spirv_IsNan(float); +DEVICE_EXTERNAL bool __spirv_IsNormal(double); +DEVICE_EXTERNAL bool __spirv_SignBitSet(float); +DEVICE_EXTERNAL float __spirv_ocl_hypot(float, float); +DEVICE_EXTERNAL float __spirv_ocl_atan2(float, float); +DEVICE_EXTERNAL float __spirv_ocl_pow(float, float); +DEVICE_EXTERNAL float __spirv_ocl_ldexp(float, int); +DEVICE_EXTERNAL float __spirv_ocl_copysign(float, float); +DEVICE_EXTERNAL float __spirv_ocl_fmax(float, float); +DEVICE_EXTERNAL float __spirv_ocl_fabs(float); +DEVICE_EXTERNAL float __spirv_ocl_tan(float); +DEVICE_EXTERNAL float __spirv_ocl_acos(float); +DEVICE_EXTERNAL float __spirv_ocl_asin(float); +DEVICE_EXTERNAL float __spirv_ocl_atan(float); +DEVICE_EXTERNAL float __spirv_ocl_atan2(float, float); +DEVICE_EXTERNAL float __spirv_ocl_cosh(float); +DEVICE_EXTERNAL float __spirv_ocl_sinh(float); +DEVICE_EXTERNAL float __spirv_ocl_tanh(float); +DEVICE_EXTERNAL float __spirv_ocl_acosh(float); +DEVICE_EXTERNAL float __spirv_ocl_asinh(float); +DEVICE_EXTERNAL float __spirv_ocl_atanh(float); +DEVICE_EXTERNAL float __spirv_ocl_frexp(float, int *); +DEVICE_EXTERNAL float __spirv_ocl_log10(float); +DEVICE_EXTERNAL float __spirv_ocl_modf(float, float *); +DEVICE_EXTERNAL float __spirv_ocl_exp2(float); +DEVICE_EXTERNAL float __spirv_ocl_expm1(float); +DEVICE_EXTERNAL int __spirv_ocl_ilogb(float); +DEVICE_EXTERNAL float __spirv_ocl_log1p(float); +DEVICE_EXTERNAL float __spirv_ocl_log2(float); +DEVICE_EXTERNAL float __spirv_ocl_sqrt(float); +DEVICE_EXTERNAL float __spirv_ocl_cbrt(float); +DEVICE_EXTERNAL float __spirv_ocl_hypot(float); +DEVICE_EXTERNAL float __spirv_ocl_erf(float); +DEVICE_EXTERNAL float __spirv_ocl_erfc(float); +DEVICE_EXTERNAL float __spirv_ocl_tgamma(float); +DEVICE_EXTERNAL float __spirv_ocl_lgamma(float); +DEVICE_EXTERNAL float __spirv_ocl_fmod(float, float); +DEVICE_EXTERNAL float __spirv_ocl_remainder(float, float); +DEVICE_EXTERNAL float __spirv_ocl_remquo(float, float, int *); +DEVICE_EXTERNAL float __spirv_ocl_nextafter(float, float); +DEVICE_EXTERNAL float __spirv_ocl_fdim(float, float); +DEVICE_EXTERNAL float __spirv_ocl_fma(float, float, float); + +DEVICE_EXTERN_C +double __devicelib_log(double x); + +DEVICE_EXTERN_C +float __devicelib_logf(float x); + +DEVICE_EXTERN_C +double __devicelib_sin(double x); + +DEVICE_EXTERN_C +float __devicelib_sinf(float x); + +DEVICE_EXTERN_C +double __devicelib_cos(double x); + +DEVICE_EXTERN_C +float __devicelib_cosf(float x); + +DEVICE_EXTERN_C +double __devicelib_tan(double x); + +DEVICE_EXTERN_C +float __devicelib_tanf(float x); + +DEVICE_EXTERN_C +double __devicelib_acos(double x); + +DEVICE_EXTERN_C +float __devicelib_acosf(float x); + +DEVICE_EXTERN_C +double __devicelib_pow(double x, double y); + +DEVICE_EXTERN_C +float __devicelib_powf(float x, float y); + +DEVICE_EXTERN_C +double __devicelib_sqrt(double x); + +DEVICE_EXTERN_C +float __devicelib_sqrtf(float x); + +DEVICE_EXTERN_C +double __devicelib_cbrt(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_cbrtf(float x); +DEVICE_EXTERN_C +float __devicelib_cbrtf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_hypot(double x, double y); +DEVICE_EXTERN_C +double __devicelib_hypot(double x, double y); -SYCL_EXTERNAL -extern "C" float __devicelib_hypotf(float x, float y); +DEVICE_EXTERN_C +float __devicelib_hypotf(float x, float y); -SYCL_EXTERNAL -extern "C" double __devicelib_erf(double x); +DEVICE_EXTERN_C +double __devicelib_erf(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_erff(float x); +DEVICE_EXTERN_C +float __devicelib_erff(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_erfc(double x); +DEVICE_EXTERN_C +double __devicelib_erfc(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_erfcf(float x); +DEVICE_EXTERN_C +float __devicelib_erfcf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_tgamma(double x); +DEVICE_EXTERN_C +double __devicelib_tgamma(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_tgammaf(float x); +DEVICE_EXTERN_C +float __devicelib_tgammaf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_lgamma(double x); +DEVICE_EXTERN_C +double __devicelib_lgamma(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_lgammaf(float x); +DEVICE_EXTERN_C +float __devicelib_lgammaf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_fmod(double x, double y); +DEVICE_EXTERN_C +double __devicelib_fmod(double x, double y); -SYCL_EXTERNAL -extern "C" float __devicelib_fmodf(float x, float y); +DEVICE_EXTERN_C +float __devicelib_fmodf(float x, float y); -SYCL_EXTERNAL -extern "C" double __devicelib_remainder(double x, double y); +DEVICE_EXTERN_C +double __devicelib_remainder(double x, double y); -SYCL_EXTERNAL -extern "C" float __devicelib_remainderf(float x, float y); +DEVICE_EXTERN_C +float __devicelib_remainderf(float x, float y); -SYCL_EXTERNAL -extern "C" double __devicelib_remquo(double x, double y, int *q); +DEVICE_EXTERN_C +double __devicelib_remquo(double x, double y, int *q); -SYCL_EXTERNAL -extern "C" float __devicelib_remquof(float x, float y, int *q); +DEVICE_EXTERN_C +float __devicelib_remquof(float x, float y, int *q); -SYCL_EXTERNAL -extern "C" double __devicelib_nextafter(double x, double y); +DEVICE_EXTERN_C +double __devicelib_nextafter(double x, double y); -SYCL_EXTERNAL -extern "C" float __devicelib_nextafterf(float x, float y); +DEVICE_EXTERN_C +float __devicelib_nextafterf(float x, float y); -SYCL_EXTERNAL -extern "C" double __devicelib_fdim(double x, double y); +DEVICE_EXTERN_C +double __devicelib_fdim(double x, double y); -SYCL_EXTERNAL -extern "C" float __devicelib_fdimf(float x, float y); +DEVICE_EXTERN_C +float __devicelib_fdimf(float x, float y); -SYCL_EXTERNAL -extern "C" double __devicelib_fma(double x, double y, double z); +DEVICE_EXTERN_C +double __devicelib_fma(double x, double y, double z); -SYCL_EXTERNAL -extern "C" float __devicelib_fmaf(float x, float y, float z); +DEVICE_EXTERN_C +float __devicelib_fmaf(float x, float y, float z); -SYCL_EXTERNAL -extern "C" float __devicelib_asinf(float x); +DEVICE_EXTERN_C +float __devicelib_asinf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_asin(double x); +DEVICE_EXTERN_C +double __devicelib_asin(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_atanf(float x); +DEVICE_EXTERN_C +float __devicelib_atanf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_atan(double x); +DEVICE_EXTERN_C +double __devicelib_atan(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_atan2f(float x, float y); +DEVICE_EXTERN_C +float __devicelib_atan2f(float x, float y); -SYCL_EXTERNAL -extern "C" double __devicelib_atan2(double x, double y); +DEVICE_EXTERN_C +double __devicelib_atan2(double x, double y); -SYCL_EXTERNAL -extern "C" float __devicelib_coshf(float x); +DEVICE_EXTERN_C +float __devicelib_coshf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_cosh(double x); +DEVICE_EXTERN_C +double __devicelib_cosh(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_sinhf(float x); +DEVICE_EXTERN_C +float __devicelib_sinhf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_sinh(double x); +DEVICE_EXTERN_C +double __devicelib_sinh(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_tanhf(float x); +DEVICE_EXTERN_C +float __devicelib_tanhf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_tanh(double x); +DEVICE_EXTERN_C +double __devicelib_tanh(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_acoshf(float x); +DEVICE_EXTERN_C +float __devicelib_acoshf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_acosh(double x); +DEVICE_EXTERN_C +double __devicelib_acosh(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_asinhf(float x); +DEVICE_EXTERN_C +float __devicelib_asinhf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_asinh(double x); +DEVICE_EXTERN_C +double __devicelib_asinh(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_atanhf(float x); +DEVICE_EXTERN_C +float __devicelib_atanhf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_atanh(double x); +DEVICE_EXTERN_C +double __devicelib_atanh(double x); -SYCL_EXTERNAL -extern "C" double __devicelib_frexp(double x, int *exp); +DEVICE_EXTERN_C +double __devicelib_frexp(double x, int *exp); -SYCL_EXTERNAL -extern "C" float __devicelib_frexpf(float x, int *exp); +DEVICE_EXTERN_C +float __devicelib_frexpf(float x, int *exp); -SYCL_EXTERNAL -extern "C" double __devicelib_ldexp(double x, int exp); +DEVICE_EXTERN_C +double __devicelib_ldexp(double x, int exp); -SYCL_EXTERNAL -extern "C" float __devicelib_ldexpf(float x, int exp); +DEVICE_EXTERN_C +float __devicelib_ldexpf(float x, int exp); -SYCL_EXTERNAL -extern "C" double __devicelib_log10(double x); +DEVICE_EXTERN_C +double __devicelib_log10(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_log10f(float x); +DEVICE_EXTERN_C +float __devicelib_log10f(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_modf(double x, double *intpart); +DEVICE_EXTERN_C +double __devicelib_modf(double x, double *intpart); -SYCL_EXTERNAL -extern "C" float __devicelib_modff(float x, float *intpart); +DEVICE_EXTERN_C +float __devicelib_modff(float x, float *intpart); -SYCL_EXTERNAL -extern "C" double __devicelib_exp(double x); +DEVICE_EXTERN_C +double __devicelib_exp(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_expf(float x); +DEVICE_EXTERN_C +float __devicelib_expf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_exp2(double x); +DEVICE_EXTERN_C +double __devicelib_exp2(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_exp2f(float x); +DEVICE_EXTERN_C +float __devicelib_exp2f(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_expm1(double x); +DEVICE_EXTERN_C +double __devicelib_expm1(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_expm1f(float x); +DEVICE_EXTERN_C +float __devicelib_expm1f(float x); -SYCL_EXTERNAL -extern "C" int __devicelib_ilogb(double x); +DEVICE_EXTERN_C +int __devicelib_ilogb(double x); -SYCL_EXTERNAL -extern "C" int __devicelib_ilogbf(float x); +DEVICE_EXTERN_C +int __devicelib_ilogbf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_log1p(double x); +DEVICE_EXTERN_C +double __devicelib_log1p(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_log1pf(float x); +DEVICE_EXTERN_C +float __devicelib_log1pf(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_log2(double x); +DEVICE_EXTERN_C +double __devicelib_log2(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_log2f(float x); +DEVICE_EXTERN_C +float __devicelib_log2f(float x); -SYCL_EXTERNAL -extern "C" double __devicelib_logb(double x); +DEVICE_EXTERN_C +double __devicelib_logb(double x); -SYCL_EXTERNAL -extern "C" float __devicelib_logbf(float x); +DEVICE_EXTERN_C +float __devicelib_logbf(float x); -SYCL_EXTERNAL -extern "C" float __devicelib_scalbnf(float x, int n); -#endif // __LIBDEVICE_DEVICE_CMATH_H__ +DEVICE_EXTERN_C +float __devicelib_scalbnf(float x, int n); +#endif // __LIBDEVICE_DEVICE_MATH_H__ diff --git a/libdevice/fallback-cassert.cpp b/libdevice/fallback-cassert.cpp index f1b255a17a887..4c92dde4a24ac 100644 --- a/libdevice/fallback-cassert.cpp +++ b/libdevice/fallback-cassert.cpp @@ -14,8 +14,7 @@ static const __attribute__((opencl_constant)) char assert_fmt[] = "%s:%d: %s: global id: [%lu,%lu,%lu], local id: [%lu,%lu,%lu] " "Assertion `%s` failed.\n"; -SYCL_EXTERNAL -extern "C" void __devicelib_assert_fail( +DEVICE_EXTERN_C void __devicelib_assert_fail( const char *expr, const char *file, int32_t line, const char *func, uint64_t gid0, uint64_t gid1, uint64_t gid2, diff --git a/libdevice/fallback-cmath-fp64.cpp b/libdevice/fallback-cmath-fp64.cpp index 59fb803e2c122..5c6b155dab46f 100644 --- a/libdevice/fallback-cmath-fp64.cpp +++ b/libdevice/fallback-cmath-fp64.cpp @@ -5,207 +5,200 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ + #include "device_math.h" -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_log(double x) { return __spirv_ocl_log(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_exp(double x) { return __spirv_ocl_exp(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_frexp(double x, int *exp) { return __spirv_ocl_frexp(x, exp); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_ldexp(double x, int exp) { return __spirv_ocl_ldexp(x, exp); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_log10(double x) { return __spirv_ocl_log10(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_modf(double x, double *intpart) { return __spirv_ocl_modf(x, intpart); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_exp2(double x) { return __spirv_ocl_exp2(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_expm1(double x) { return __spirv_ocl_expm1(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C int __devicelib_ilogb(double x) { return __spirv_ocl_ilogb(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_log1p(double x) { return __spirv_ocl_log1p(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_log2(double x) { return __spirv_ocl_log2(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_logb(double x) { return __spirv_ocl_logb(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_sqrt(double x) { return __spirv_ocl_sqrt(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_cbrt(double x) { return __spirv_ocl_cbrt(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_hypot(double x, double y) { return __spirv_ocl_hypot(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_erf(double x) { return __spirv_ocl_erf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_erfc(double x) { return __spirv_ocl_erfc(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_tgamma(double x) { return __spirv_ocl_tgamma(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_lgamma(double x) { return __spirv_ocl_lgamma(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_fmod(double x, double y) { return __spirv_ocl_fmod(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_remainder(double x, double y) { return __spirv_ocl_remainder(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_remquo(double x, double y, int *q) { return __spirv_ocl_remquo(x, y, q); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_nextafter(double x, double y) { return __spirv_ocl_nextafter(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_fdim(double x, double y) { return __spirv_ocl_fdim(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_fma(double x, double y, double z) { return __spirv_ocl_fma(x, y, z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_sin(double x) { return __spirv_ocl_sin(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_cos(double x) { return __spirv_ocl_cos(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_tan(double x) { return __spirv_ocl_tan(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_pow(double x, double y) { return __spirv_ocl_pow(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_acos(double x) { return __spirv_ocl_acos(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_asin(double x) { return __spirv_ocl_asin(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_atan(double x) { return __spirv_ocl_atan(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_atan2(double x, double y) { return __spirv_ocl_atan2(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_cosh(double x) { return __spirv_ocl_cosh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_sinh(double x) { return __spirv_ocl_sinh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_tanh(double x) { return __spirv_ocl_tanh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_acosh(double x) { return __spirv_ocl_acosh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_asinh(double x) { return __spirv_ocl_asinh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_atanh(double x) { return __spirv_ocl_atanh(x); } -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // __SYCL_DEVICE_ONLY__ diff --git a/libdevice/fallback-cmath.cpp b/libdevice/fallback-cmath.cpp index f707f5efca964..c76848fdf56a1 100644 --- a/libdevice/fallback-cmath.cpp +++ b/libdevice/fallback-cmath.cpp @@ -5,212 +5,205 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ + #include "device_math.h" -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_scalbnf(float x, int n) { return __spirv_ocl_ldexp(x, n); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_logf(float x) { return __spirv_ocl_log(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_expf(float x) { return __spirv_ocl_exp(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_frexpf(float x, int *exp) { return __spirv_ocl_frexp(x, exp); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_ldexpf(float x, int exp) { return __spirv_ocl_ldexp(x, exp); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_log10f(float x) { return __spirv_ocl_log10(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_modff(float x, float *intpart) { return __spirv_ocl_modf(x, intpart); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_exp2f(float x) { return __spirv_ocl_exp2(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_expm1f(float x) { return __spirv_ocl_expm1(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C int __devicelib_ilogbf(float x) { return __spirv_ocl_ilogb(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_log1pf(float x) { return __spirv_ocl_log1p(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_log2f(float x) { return __spirv_ocl_log2(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_logbf(float x) { return __spirv_ocl_logb(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_sqrtf(float x) { return __spirv_ocl_sqrt(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_cbrtf(float x) { return __spirv_ocl_cbrt(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_hypotf(float x, float y) { return __spirv_ocl_hypot(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_erff(float x) { return __spirv_ocl_erf(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_erfcf(float x) { return __spirv_ocl_erfc(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_tgammaf(float x) { return __spirv_ocl_tgamma(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_lgammaf(float x) { return __spirv_ocl_lgamma(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_fmodf(float x, float y) { return __spirv_ocl_fmod(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_remainderf(float x, float y) { return __spirv_ocl_remainder(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_remquof(float x, float y, int *q) { return __spirv_ocl_remquo(x, y, q); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_nextafterf(float x, float y) { return __spirv_ocl_nextafter(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_fdimf(float x, float y) { return __spirv_ocl_fdim(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_fmaf(float x, float y, float z) { return __spirv_ocl_fma(x, y, z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_sinf(float x) { return __spirv_ocl_sin(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_cosf(float x) { return __spirv_ocl_cos(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_tanf(float x) { return __spirv_ocl_tan(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_powf(float x, float y) { return __spirv_ocl_pow(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_acosf(float x) { return __spirv_ocl_acos(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_asinf(float x) { return __spirv_ocl_asin(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_atanf(float x) { return __spirv_ocl_atan(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_atan2f(float x, float y) { return __spirv_ocl_atan2(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_coshf(float x) { return __spirv_ocl_cosh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_sinhf(float x) { return __spirv_ocl_sinh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_tanhf(float x) { return __spirv_ocl_tanh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_acoshf(float x) { return __spirv_ocl_acosh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_asinhf(float x) { return __spirv_ocl_asinh(x); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_atanhf(float x) { return __spirv_ocl_atanh(x); } -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // __SYCL_DEVICE_ONLY__ diff --git a/libdevice/fallback-complex-fp64.cpp b/libdevice/fallback-complex-fp64.cpp index ae9dfa0ad2a17..343e7cb620450 100644 --- a/libdevice/fallback-complex-fp64.cpp +++ b/libdevice/fallback-complex-fp64.cpp @@ -1,31 +1,28 @@ -//==----- fallback-complex.cpp - complex math functions for SYCL device ----==// +//==----- fallback-complex.cpp - complex math functions for SPIR-V device ----==// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ + #include "device_math.h" #include "device_complex.h" #include -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_creal(double __complex__ z) { return __real__(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_cimag(double __complex__ z) { return __imag__(z); } // __muldc3 // Returns: the product of a + ib and c + id -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib___muldc3(double __a, double __b, double __c, double __d) { double __ac = __a * __c; @@ -77,7 +74,7 @@ double __complex__ __devicelib___muldc3(double __a, double __b, // __divdc3 // Returns: the quotient of (a + ib) / (c + id) -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib___divdc3(double __a, double __b, double __c, double __d) { int __ilogbw = 0; @@ -119,19 +116,19 @@ double __complex__ __devicelib___divdc3(double __a, double __b, return z; } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_cabs(double __complex__ z) { return __spirv_ocl_hypot(__devicelib_creal(z), __devicelib_cimag(z)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __devicelib_carg(double __complex__ z) { return __spirv_ocl_atan2(__devicelib_cimag(z), __devicelib_creal(z)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_cproj(double __complex__ z) { double __complex__ r = z; if (__spirv_IsInf(__devicelib_creal(z)) || @@ -140,7 +137,7 @@ double __complex__ __devicelib_cproj(double __complex__ z) { return r; } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_cexp(double __complex__ z) { double z_imag = __devicelib_cimag(z); double z_real = __devicelib_creal(z); @@ -162,12 +159,12 @@ double __complex__ __devicelib_cexp(double __complex__ z) { } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_clog(double __complex__ z) { return CMPLX(__spirv_ocl_log(__devicelib_cabs(z)), __devicelib_carg(z)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_cpow(double __complex__ x, double __complex__ y) { double __complex__ t = __devicelib_clog(x); @@ -178,7 +175,7 @@ double __complex__ __devicelib_cpow(double __complex__ x, return __devicelib_cexp(w); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_cpolar(double rho, double theta) { if (__spirv_IsNan(rho) || __spirv_SignBitSet(rho)) return CMPLX(NAN, NAN); @@ -201,7 +198,7 @@ double __complex__ __devicelib_cpolar(double rho, double theta) { return CMPLX(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_csqrt(double __complex__ z) { double z_real = __devicelib_creal(z); @@ -220,7 +217,7 @@ double __complex__ __devicelib_csqrt(double __complex__ z) __devicelib_carg(z) / 2.0); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_csinh(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); @@ -234,7 +231,7 @@ double __complex__ __devicelib_csinh(double __complex__ z) { __spirv_ocl_cosh(z_real) * __spirv_ocl_sin(z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_ccosh(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); @@ -250,7 +247,7 @@ double __complex__ __devicelib_ccosh(double __complex__ z) { __spirv_ocl_sinh(z_real) * __spirv_ocl_sin(z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_ctanh(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); @@ -271,27 +268,27 @@ double __complex__ __devicelib_ctanh(double __complex__ z) { return CMPLX(__2rsh/__d, __spirv_ocl_sin(__2i)/__d); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_csin(double __complex__ z) { double __complex__ w = __devicelib_csinh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_ccos(double __complex__ z) { return __devicelib_ccosh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_ctan(double __complex__ z) { double __complex__ w = __devicelib_ctanh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __sqr(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); @@ -299,7 +296,7 @@ double __complex__ __sqr(double __complex__ z) { 2.0 * z_real * z_imag); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_cacos(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); @@ -334,7 +331,7 @@ double __complex__ __devicelib_cacos(double __complex__ z) { -__spirv_ocl_fabs(__devicelib_creal(w))); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_casinh(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); @@ -361,14 +358,14 @@ double __complex__ __devicelib_casinh(double __complex__ z) { __spirv_ocl_copysign(__devicelib_cimag(w), z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_casin(double __complex__ z) { double __complex__ w = __devicelib_casinh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_cacosh(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); @@ -398,7 +395,7 @@ double __complex__ __devicelib_cacosh(double __complex__ z) { __spirv_ocl_copysign(__devicelib_cimag(w), z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_catanh(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); @@ -430,13 +427,9 @@ double __complex__ __devicelib_catanh(double __complex__ z) { __spirv_ocl_copysign(__devicelib_cimag(w), z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C double __complex__ __devicelib_catan(double __complex__ z) { double __complex__ w = __devicelib_catanh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // __SYCL_DEVICE_ONLY__ diff --git a/libdevice/fallback-complex.cpp b/libdevice/fallback-complex.cpp index 30e8039d90c56..5e40fc9321567 100644 --- a/libdevice/fallback-complex.cpp +++ b/libdevice/fallback-complex.cpp @@ -1,30 +1,28 @@ -//==----- fallback-complex.cpp - complex math functions for SYCL device ----==// +//==----- fallback-complex.cpp - complex math functions for SPIR-V device ----==// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ + #include "device_math.h" #include "device_complex.h" #include -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus -SYCL_EXTERNAL + +DEVICE_EXTERN_C float __devicelib_crealf(float __complex__ z) { return __real__(z); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_cimagf(float __complex__ z) { return __imag__(z); } // __mulsc3 // Returns: the product of a + ib and c + id -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib___mulsc3(float __a, float __b, float __c, float __d) { float __ac = __a * __c; @@ -78,7 +76,7 @@ float __complex__ __devicelib___mulsc3(float __a, float __b, // Returns: the quotient of (a + ib) / (c + id) // FIXME: divsc3/divdc3 have overflow issue when dealing with large number. // And this overflow issue is from libc++/compiler-rt's implementation. -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib___divsc3(float __a, float __b, float __c, float __d) { int __ilogbw = 0; @@ -120,19 +118,19 @@ float __complex__ __devicelib___divsc3(float __a, float __b, return z; } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_cargf(float __complex__ z) { return __spirv_ocl_atan2(__devicelib_cimagf(z), __devicelib_crealf(z)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __devicelib_cabsf(float __complex__ z) { return __spirv_ocl_hypot(__devicelib_crealf(z), __devicelib_cimagf(z)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_cprojf(float __complex__ z) { float __complex__ r = z; if (__spirv_IsInf(__devicelib_crealf(z)) || @@ -141,7 +139,7 @@ float __complex__ __devicelib_cprojf(float __complex__ z) { return r; } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_cexpf(float __complex__ z) { float z_imag = __devicelib_cimagf(z); float z_real = __devicelib_crealf(z); @@ -162,12 +160,12 @@ float __complex__ __devicelib_cexpf(float __complex__ z) { (__e * __spirv_ocl_sin(z_imag))); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_clogf(float __complex__ z) { return CMPLXF(__spirv_ocl_log(__devicelib_cabsf(z)), __devicelib_cargf(z)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_cpowf(float __complex__ x, float __complex__ y) { float __complex__ t = __devicelib_clogf(x); @@ -178,7 +176,7 @@ float __complex__ __devicelib_cpowf(float __complex__ x, return __devicelib_cexpf(w); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_cpolarf(float rho, float theta) { if (__spirv_IsNan(rho) || __spirv_SignBitSet(rho)) return CMPLXF(NAN, NAN); @@ -201,7 +199,7 @@ float __complex__ __devicelib_cpolarf(float rho, float theta) { return CMPLXF(x, y); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_csqrtf(float __complex__ z) { float z_real = __devicelib_crealf(z); @@ -220,7 +218,7 @@ float __complex__ __devicelib_csqrtf(float __complex__ z) __devicelib_cargf(z) / 2.0f); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_csinhf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); @@ -234,7 +232,7 @@ float __complex__ __devicelib_csinhf(float __complex__ z) { __spirv_ocl_cosh(z_real) * __spirv_ocl_sin(z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_ccoshf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); @@ -250,7 +248,7 @@ float __complex__ __devicelib_ccoshf(float __complex__ z) { __spirv_ocl_sinh(z_real) * __spirv_ocl_sin(z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_ctanhf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); @@ -272,27 +270,27 @@ float __complex__ __devicelib_ctanhf(float __complex__ z) { return CMPLXF(__2rsh/__d, __spirv_ocl_sin(__2i)/__d); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_csinf(float __complex__ z) { float __complex__ w = __devicelib_csinhf(CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_ccosf(float __complex__ z) { return __devicelib_ccoshf(CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_ctanf(float __complex__ z) { float __complex__ w = __devicelib_ctanhf(CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __sqrf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); @@ -300,7 +298,7 @@ float __complex__ __sqrf(float __complex__ z) { 2.0 * z_real * z_imag); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_cacosf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); @@ -335,7 +333,7 @@ float __complex__ __devicelib_cacosf(float __complex__ z) { -__spirv_ocl_fabs(__devicelib_crealf(w))); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_casinhf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); @@ -363,14 +361,14 @@ float __complex__ __devicelib_casinhf(float __complex__ z) { __spirv_ocl_copysign(__devicelib_cimagf(w), z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_casinf(float __complex__ z) { float __complex__ w = __devicelib_casinhf(CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_cacoshf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); @@ -400,7 +398,7 @@ float __complex__ __devicelib_cacoshf(float __complex__ z) { __spirv_ocl_copysign(__devicelib_cimagf(w), z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_catanhf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); @@ -432,13 +430,9 @@ float __complex__ __devicelib_catanhf(float __complex__ z) { __spirv_ocl_copysign(__devicelib_cimagf(w), z_imag)); } -SYCL_EXTERNAL +DEVICE_EXTERN_C float __complex__ __devicelib_catanf(float __complex__ z) { float __complex__ w = __devicelib_catanhf(CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // __SYCL_DEVICE_ONLY__ diff --git a/libdevice/glibc_wrapper.cpp b/libdevice/glibc_wrapper.cpp index db77555537838..7249d2b464f33 100644 --- a/libdevice/glibc_wrapper.cpp +++ b/libdevice/glibc_wrapper.cpp @@ -6,12 +6,14 @@ // //===----------------------------------------------------------------------===// -#ifdef __SYCL_DEVICE_ONLY__ +#include "device.h" + +#if IMPL_ENABLED #include "wrapper.h" #include // for __spirv_BuiltInGlobalInvocationId, // __spirv_BuiltInLocalInvocationId -extern "C" SYCL_EXTERNAL +DEVICE_EXTERN_C void __assert_fail(const char *expr, const char *file, unsigned int line, const char *func) { __devicelib_assert_fail(expr, file, line, func, @@ -22,4 +24,4 @@ void __assert_fail(const char *expr, const char *file, __spirv_LocalInvocationId_y(), __spirv_LocalInvocationId_z()); } -#endif // __SYCL_DEVICE_ONLY__ +#endif // IMPL_ENABLED diff --git a/libdevice/msvc_wrapper.cpp b/libdevice/msvc_wrapper.cpp index b566145c014eb..84cf1b0c4ac0e 100644 --- a/libdevice/msvc_wrapper.cpp +++ b/libdevice/msvc_wrapper.cpp @@ -6,7 +6,9 @@ // //===----------------------------------------------------------------------===// -#if __SYCL_DEVICE_ONLY +#include "device.h" + +#if IMPL_ENABLED #include "wrapper.h" #include // for __spirv_BuiltInGlobalInvocationId, // __spirv_BuiltInLocalInvocationId @@ -24,7 +26,7 @@ static void __truncate_wchar_char_str(const wchar_t *wstr, char *str, *str = '\0'; } -extern "C" SYCL_EXTERNAL +DEVICE_EXTERN_C void _wassert(const wchar_t *wexpr, const wchar_t *wfile, unsigned line) { // Paths and expressions that are longer than 256 characters are going to be // truncated. @@ -41,4 +43,4 @@ void _wassert(const wchar_t *wexpr, const wchar_t *wfile, unsigned line) { __spirv_LocalInvocationId_y(), __spirv_LocalInvocationId_z()); } -#endif // __SYCL_DEVICE_ONLY +#endif // IMPL_ENABLED diff --git a/libdevice/wrapper.h b/libdevice/wrapper.h index 1becc338ea19a..87157badd5ff6 100644 --- a/libdevice/wrapper.h +++ b/libdevice/wrapper.h @@ -13,11 +13,13 @@ #include #include "device.h" -SYCL_EXTERNAL -extern "C" void __devicelib_assert_fail( +#if IMPL_ENABLED +DEVICE_EXTERN_C +void __devicelib_assert_fail( const char *expr, const char *file, int32_t line, const char *func, uint64_t gid0, uint64_t gid1, uint64_t gid2, uint64_t lid0, uint64_t lid1, uint64_t lid2); +#endif // IMPL_ENABLED #endif // __LIBDEVICE_WRAPPER_H__ From 41a1b728a96f51d1309112afc7aa6674384715e1 Mon Sep 17 00:00:00 2001 From: Vyacheslav Zakharin Date: Mon, 2 Mar 2020 09:43:09 -0800 Subject: [PATCH 3/6] Define SYCL_EXTERNAL, if not defined. Signed-off-by: Vyacheslav Zakharin --- libdevice/device.h | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libdevice/device.h b/libdevice/device.h index f5f4dd655a394..c5281fa9d46cf 100644 --- a/libdevice/device.h +++ b/libdevice/device.h @@ -16,14 +16,10 @@ #endif // __cplusplus #ifdef CL_SYCL_LANGUAGE_VERSION -// FIXME: we have to include CL/sycl/detail/common.hpp here, -// so that it undefined SYCL_EXTERNAL for host compilation. -// I cannot do that now, because of the conflicting -// definitions of _cl_motion_estimation_desc_intel in -// cl_ext.h from Intel OpenCL SDK and -// cl_ext_intel.h from Khronos. For some reason -// OpenCL SDK prepends SYCL headers in the include order. -// #include "CL/sycl/detail/common.hpp" +#ifndef SYCL_EXTERNAL +#define SYCL_EXTERNAL +#endif // SYCL_EXTERNAL + #define DEVICE_EXTERNAL SYCL_EXTERNAL #define IMPL_ENABLED __SYCL_DEVICE_ONLY__ #else // CL_SYCL_LANGUAGE_VERSION From bc9dd1c89b717a6cd22f9f5b63865284867a5e9a Mon Sep 17 00:00:00 2001 From: Vyacheslav Zakharin Date: Tue, 3 Mar 2020 18:32:56 -0800 Subject: [PATCH 4/6] Properly set dependencies between sycl and libsycldevice. Signed-off-by: Vyacheslav Zakharin --- libdevice/CMakeLists.txt | 14 ++--- libdevice/cmath_wrapper.cpp | 83 ++++++++++++++---------------- libdevice/cmath_wrapper_fp64.cpp | 81 ++++++++++++++--------------- libdevice/complex_wrapper.cpp | 51 +++++++++--------- libdevice/complex_wrapper_fp64.cpp | 51 +++++++++--------- libdevice/device.h | 10 ++-- libdevice/glibc_wrapper.cpp | 5 -- libdevice/msvc_wrapper.cpp | 5 -- libdevice/wrapper.h | 10 +++- sycl/CMakeLists.txt | 8 +++ 10 files changed, 157 insertions(+), 161 deletions(-) diff --git a/libdevice/CMakeLists.txt b/libdevice/CMakeLists.txt index 1bb914663d1ea..82cb24a5e35bc 100644 --- a/libdevice/CMakeLists.txt +++ b/libdevice/CMakeLists.txt @@ -9,11 +9,14 @@ endif() set(clang $) -if (TARGET sycl) +if (sycl IN_LIST LLVM_ENABLE_PROJECTS) set(compile_opts # suppress an error about SYCL_EXTERNAL being used for # a function with a raw pointer parameter. -Wno-sycl-strict + # Disable warnings for the host compilation, where + # we declare all functions as 'static'. + -Wno-undefined-internal ) if (WIN32) @@ -137,10 +140,7 @@ if (TARGET sycl) ${binary_dir}/libsycl-fallback-cmath.spv ${binary_dir}/libsycl-fallback-cmath-fp64.spv ) - add_dependencies(sycl libsycldevice-obj libsycldevice-spv) - if (MSVC) - add_dependencies(sycld libsycldevice-obj libsycldevice-spv) - endif() + add_custom_target(libsycldevice DEPENDS libsycldevice-obj libsycldevice-spv) # Place device libraries near the libsycl.so library in an install # directory as well @@ -161,5 +161,5 @@ if (TARGET sycl) ${devicelib-obj-cmath-fp64} ${binary_dir}/libsycl-fallback-cmath-fp64.spv DESTINATION ${install_dest} - COMPONENT sycl) -endif(TARGET sycl) + COMPONENT libsycldevice) +endif(sycl IN_LIST LLVM_ENABLE_PROJECTS) diff --git a/libdevice/cmath_wrapper.cpp b/libdevice/cmath_wrapper.cpp index e740af358238b..9358f003a04aa 100644 --- a/libdevice/cmath_wrapper.cpp +++ b/libdevice/cmath_wrapper.cpp @@ -7,207 +7,204 @@ //===----------------------------------------------------------------------===// #include "device.h" - -#if IMPL_ENABLED #include "device_math.h" DEVICE_EXTERN_C -float __attribute__((weak)) scalbnf(float x, int n) { +float scalbnf(float x, int n) { return __devicelib_scalbnf(x, n); } DEVICE_EXTERN_C -float __attribute__((weak)) logf(float x) { +float logf(float x) { return __devicelib_logf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) expf(float x) { +float expf(float x) { return __devicelib_expf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) frexpf(float x, int *exp) { +float frexpf(float x, int *exp) { return __devicelib_frexpf(x, exp); } DEVICE_EXTERN_C -float __attribute__((weak)) ldexpf(float x, int exp) { +float ldexpf(float x, int exp) { return __devicelib_ldexpf(x, exp); } DEVICE_EXTERN_C -float __attribute__((weak)) log10f(float x) { +float log10f(float x) { return __devicelib_log10f(x); } DEVICE_EXTERN_C -float __attribute__((weak)) modff(float x, float *intpart) { +float modff(float x, float *intpart) { return __devicelib_modff(x, intpart); } DEVICE_EXTERN_C -float __attribute__((weak)) exp2f(float x) { +float exp2f(float x) { return __devicelib_exp2f(x); } DEVICE_EXTERN_C -float __attribute__((weak)) expm1f(float x) { +float expm1f(float x) { return __devicelib_expm1f(x); } DEVICE_EXTERN_C -int __attribute__((weak)) ilogbf(float x) { +int ilogbf(float x) { return __devicelib_ilogbf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) log1pf(float x) { +float log1pf(float x) { return __devicelib_log1pf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) log2f(float x) { +float log2f(float x) { return __devicelib_log2f(x); } DEVICE_EXTERN_C -float __attribute__((weak)) logbf(float x) { +float logbf(float x) { return __devicelib_logbf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) sqrtf(float x) { +float sqrtf(float x) { return __devicelib_sqrtf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) cbrtf(float x) { +float cbrtf(float x) { return __devicelib_cbrtf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) hypotf(float x, float y) { +float hypotf(float x, float y) { return __devicelib_hypotf(x, y); } DEVICE_EXTERN_C -float __attribute__((weak)) erff(float x) { +float erff(float x) { return __devicelib_erff(x); } DEVICE_EXTERN_C -float __attribute__((weak)) erfcf(float x) { +float erfcf(float x) { return __devicelib_erfcf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) tgammaf(float x) { +float tgammaf(float x) { return __devicelib_tgammaf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) lgammaf(float x) { +float lgammaf(float x) { return __devicelib_lgammaf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) fmodf(float x, float y) { +float fmodf(float x, float y) { return __devicelib_fmodf(x, y); } DEVICE_EXTERN_C -float __attribute__((weak)) remainderf(float x, float y) { +float remainderf(float x, float y) { return __devicelib_remainderf(x, y); } DEVICE_EXTERN_C -float __attribute__((weak)) remquof(float x, float y, int *q) { +float remquof(float x, float y, int *q) { return __devicelib_remquof(x, y, q); } DEVICE_EXTERN_C -float __attribute__((weak)) nextafterf(float x, float y) { +float nextafterf(float x, float y) { return __devicelib_nextafterf(x, y); } DEVICE_EXTERN_C -float __attribute__((weak)) fdimf(float x, float y) { +float fdimf(float x, float y) { return __devicelib_fdimf(x, y); } DEVICE_EXTERN_C -float __attribute__((weak)) fmaf(float x, float y, float z) { +float fmaf(float x, float y, float z) { return __devicelib_fmaf(x, y, z); } DEVICE_EXTERN_C -float __attribute__((weak)) sinf(float x) { +float sinf(float x) { return __devicelib_sinf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) cosf(float x) { +float cosf(float x) { return __devicelib_cosf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) tanf(float x) { +float tanf(float x) { return __devicelib_tanf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) powf(float x, float y) { +float powf(float x, float y) { return __devicelib_powf(x, y); } DEVICE_EXTERN_C -float __attribute__ ((weak)) acosf(float x) { +float acosf(float x) { return __devicelib_acosf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) asinf(float x) { +float asinf(float x) { return __devicelib_asinf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) atanf(float x) { +float atanf(float x) { return __devicelib_atanf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) atan2f(float x, float y) { +float atan2f(float x, float y) { return __devicelib_atan2f(x, y); } DEVICE_EXTERN_C -float __attribute__((weak)) coshf(float x) { +float coshf(float x) { return __devicelib_coshf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) sinhf(float x) { +float sinhf(float x) { return __devicelib_sinhf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) tanhf(float x) { +float tanhf(float x) { return __devicelib_tanhf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) acoshf(float x) { +float acoshf(float x) { return __devicelib_acoshf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) asinhf(float x) { +float asinhf(float x) { return __devicelib_asinhf(x); } DEVICE_EXTERN_C -float __attribute__((weak)) atanhf(float x) { +float atanhf(float x) { return __devicelib_atanhf(x); } -#endif // IMPL_ENABLED diff --git a/libdevice/cmath_wrapper_fp64.cpp b/libdevice/cmath_wrapper_fp64.cpp index 73999978d727c..2752273c05d5e 100644 --- a/libdevice/cmath_wrapper_fp64.cpp +++ b/libdevice/cmath_wrapper_fp64.cpp @@ -7,8 +7,6 @@ //===----------------------------------------------------------------------===// #include "device.h" - -#if IMPL_ENABLED #include "device_math.h" // All exported functions in math and complex device libraries are weak @@ -16,197 +14,196 @@ // the prototype), functions in device libraries will be ignored and // overrided by users' version. DEVICE_EXTERN_C -double __attribute__((weak)) log(double x) { +double log(double x) { return __devicelib_log(x); } DEVICE_EXTERN_C -double __attribute__((weak)) exp(double x) { +double exp(double x) { return __devicelib_exp(x); } DEVICE_EXTERN_C -double __attribute__((weak)) frexp(double x, int *exp) { +double frexp(double x, int *exp) { return __devicelib_frexp(x, exp); } DEVICE_EXTERN_C -double __attribute__((weak)) ldexp(double x, int exp) { +double ldexp(double x, int exp) { return __devicelib_ldexp(x, exp); } DEVICE_EXTERN_C -double __attribute__((weak)) log10(double x) { +double log10(double x) { return __devicelib_log10(x); } DEVICE_EXTERN_C -double __attribute__((weak)) modf(double x, double *intpart) { +double modf(double x, double *intpart) { return __devicelib_modf(x, intpart); } DEVICE_EXTERN_C -double __attribute__((weak)) exp2(double x) { +double exp2(double x) { return __devicelib_exp2(x); } DEVICE_EXTERN_C -double __attribute__((weak)) expm1(double x) { +double expm1(double x) { return __devicelib_expm1(x); } DEVICE_EXTERN_C -int __attribute__((weak)) ilogb(double x) { +int ilogb(double x) { return __devicelib_ilogb(x); } DEVICE_EXTERN_C -double __attribute__((weak)) log1p(double x) { +double log1p(double x) { return __devicelib_log1p(x); } DEVICE_EXTERN_C -double __attribute__((weak)) log2(double x) { +double log2(double x) { return __devicelib_log2(x); } DEVICE_EXTERN_C -double __attribute__((weak)) logb(double x) { +double logb(double x) { return __devicelib_logb(x); } DEVICE_EXTERN_C -double __attribute__((weak)) sqrt(double x) { +double sqrt(double x) { return __devicelib_sqrt(x); } DEVICE_EXTERN_C -double __attribute__((weak)) cbrt(double x) { +double cbrt(double x) { return __devicelib_cbrt(x); } DEVICE_EXTERN_C -double __attribute__((weak)) hypot(double x, double y) { +double hypot(double x, double y) { return __devicelib_hypot(x, y); } DEVICE_EXTERN_C -double __attribute__((weak)) erf(double x) { +double erf(double x) { return __devicelib_erf(x); } DEVICE_EXTERN_C -double __attribute__((weak)) erfc(double x) { +double erfc(double x) { return __devicelib_erfc(x); } DEVICE_EXTERN_C -double __attribute__((weak)) tgamma(double x) { +double tgamma(double x) { return __devicelib_tgamma(x); } DEVICE_EXTERN_C -double __attribute__((weak)) lgamma(double x) { +double lgamma(double x) { return __devicelib_lgamma(x); } DEVICE_EXTERN_C -double __attribute__((weak)) fmod(double x, double y) { +double fmod(double x, double y) { return __devicelib_fmod(x, y); } DEVICE_EXTERN_C -double __attribute__((weak)) remainder(double x, double y) { +double remainder(double x, double y) { return __devicelib_remainder(x, y); } DEVICE_EXTERN_C -double __attribute__((weak)) remquo(double x, double y, int *q) { +double remquo(double x, double y, int *q) { return __devicelib_remquo(x, y, q); } DEVICE_EXTERN_C -double __attribute__((weak)) nextafter(double x, double y) { +double nextafter(double x, double y) { return __devicelib_nextafter(x, y); } DEVICE_EXTERN_C -double __attribute__((weak)) fdim(double x, double y) { +double fdim(double x, double y) { return __devicelib_fdim(x, y); } DEVICE_EXTERN_C -double __attribute__((weak)) fma(double x, double y, double z) { +double fma(double x, double y, double z) { return __devicelib_fma(x, y, z); } DEVICE_EXTERN_C -double __attribute__((weak)) sin(double x) { +double sin(double x) { return __devicelib_sin(x); } DEVICE_EXTERN_C -double __attribute__((weak)) cos(double x) { +double cos(double x) { return __devicelib_cos(x); } DEVICE_EXTERN_C -double __attribute__((weak)) tan(double x) { +double tan(double x) { return __devicelib_tan(x); } DEVICE_EXTERN_C -double __attribute__((weak)) pow(double x, double y) { +double pow(double x, double y) { return __devicelib_pow(x, y); } DEVICE_EXTERN_C -double __attribute__ ((weak)) acos(double x) { +double acos(double x) { return __devicelib_acos(x); } DEVICE_EXTERN_C -double __attribute__((weak)) asin(double x) { +double asin(double x) { return __devicelib_asin(x); } DEVICE_EXTERN_C -double __attribute__((weak)) atan(double x) { +double atan(double x) { return __devicelib_atan(x); } DEVICE_EXTERN_C -double __attribute__((weak)) atan2(double x, double y) { +double atan2(double x, double y) { return __devicelib_atan2(x, y); } DEVICE_EXTERN_C -double __attribute__((weak)) cosh(double x) { +double cosh(double x) { return __devicelib_cosh(x); } DEVICE_EXTERN_C -double __attribute__((weak)) sinh(double x) { +double sinh(double x) { return __devicelib_sinh(x); } DEVICE_EXTERN_C -double __attribute__((weak)) tanh(double x) { +double tanh(double x) { return __devicelib_tanh(x); } DEVICE_EXTERN_C -double __attribute__((weak)) acosh(double x) { +double acosh(double x) { return __devicelib_acosh(x); } DEVICE_EXTERN_C -double __attribute__((weak)) asinh(double x) { +double asinh(double x) { return __devicelib_asinh(x); } DEVICE_EXTERN_C -double __attribute__((weak)) atanh(double x) { +double atanh(double x) { return __devicelib_atanh(x); } -#endif // IMPL_ENABLED diff --git a/libdevice/complex_wrapper.cpp b/libdevice/complex_wrapper.cpp index f58c4bd2edc2a..eb2a8dbbcfb11 100644 --- a/libdevice/complex_wrapper.cpp +++ b/libdevice/complex_wrapper.cpp @@ -7,125 +7,123 @@ //===----------------------------------------------------------------------===// #include "device.h" - -#if IMPL_ENABLED #include "device_complex.h" DEVICE_EXTERN_C -float __attribute__((weak)) cimagf(float __complex__ z) { +float cimagf(float __complex__ z) { return __devicelib_cimagf(z); } DEVICE_EXTERN_C -float __attribute__((weak)) crealf(float __complex__ z) { +float crealf(float __complex__ z) { return __devicelib_crealf(z); } DEVICE_EXTERN_C -float __attribute__((weak)) cargf(float __complex__ z) { +float cargf(float __complex__ z) { return __devicelib_cargf(z); } DEVICE_EXTERN_C -float __attribute__((weak)) cabsf(float __complex__ z) { +float cabsf(float __complex__ z) { return __devicelib_cabsf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) cprojf(float __complex__ z) { +float __complex__ cprojf(float __complex__ z) { return __devicelib_cprojf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) cexpf(float __complex__ z) { +float __complex__ cexpf(float __complex__ z) { return __devicelib_cexpf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) clogf(float __complex__ z) { +float __complex__ clogf(float __complex__ z) { return __devicelib_clogf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) cpowf(float __complex__ x, +float __complex__ cpowf(float __complex__ x, float __complex__ y) { return __devicelib_cpowf(x, y); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) cpolarf(float rho, float theta) { +float __complex__ cpolarf(float rho, float theta) { return __devicelib_cpolarf(rho, theta); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) csqrtf(float __complex__ z) { +float __complex__ csqrtf(float __complex__ z) { return __devicelib_csqrtf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) csinhf(float __complex__ z) { +float __complex__ csinhf(float __complex__ z) { return __devicelib_csinhf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) ccoshf(float __complex__ z) { +float __complex__ ccoshf(float __complex__ z) { return __devicelib_ccoshf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) ctanhf(float __complex__ z) { +float __complex__ ctanhf(float __complex__ z) { return __devicelib_ctanhf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) csinf(float __complex__ z) { +float __complex__ csinf(float __complex__ z) { return __devicelib_csinf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) ccosf(float __complex__ z) { +float __complex__ ccosf(float __complex__ z) { return __devicelib_ccosf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) ctanf(float __complex__ z) { +float __complex__ ctanf(float __complex__ z) { return __devicelib_ctanf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) cacosf(float __complex__ z) { +float __complex__ cacosf(float __complex__ z) { return __devicelib_cacosf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) casinhf(float __complex__ z) { +float __complex__ casinhf(float __complex__ z) { return __devicelib_casinhf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) casinf(float __complex__ z) { +float __complex__ casinf(float __complex__ z) { return __devicelib_casinf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) cacoshf(float __complex__ z) { +float __complex__ cacoshf(float __complex__ z) { return __devicelib_cacoshf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) catanhf(float __complex__ z) { +float __complex__ catanhf(float __complex__ z) { return __devicelib_catanhf(z); } DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) catanf(float __complex__ z) { +float __complex__ catanf(float __complex__ z) { return __devicelib_catanf(z); } // __mulsc3 // Returns: the product of a + ib and c + id DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) __mulsc3(float __a, float __b, +float __complex__ __mulsc3(float __a, float __b, float __c, float __d) { return __devicelib___mulsc3(__a, __b, __c, __d); } @@ -133,8 +131,7 @@ float __complex__ __attribute__((weak)) __mulsc3(float __a, float __b, // __divsc3 // Returns: the quotient of (a + ib) / (c + id) DEVICE_EXTERN_C -float __complex__ __attribute__((weak)) __divsc3(float __a, float __b, +float __complex__ __divsc3(float __a, float __b, float __c, float __d) { return __devicelib___divsc3(__a, __b, __c, __d); } -#endif // IMPL_ENABLED diff --git a/libdevice/complex_wrapper_fp64.cpp b/libdevice/complex_wrapper_fp64.cpp index 22845a84b5cb9..190405b9a549f 100644 --- a/libdevice/complex_wrapper_fp64.cpp +++ b/libdevice/complex_wrapper_fp64.cpp @@ -7,125 +7,123 @@ //===----------------------------------------------------------------------===// #include "device.h" - -#if IMPL_ENABLED #include "device_complex.h" DEVICE_EXTERN_C -double __attribute__((weak)) cimag(double __complex__ z) { +double cimag(double __complex__ z) { return __devicelib_cimag(z); } DEVICE_EXTERN_C -double __attribute__((weak)) creal(double __complex__ z) { +double creal(double __complex__ z) { return __devicelib_creal(z); } DEVICE_EXTERN_C -double __attribute__((weak)) cabs(double __complex__ z) { +double cabs(double __complex__ z) { return __devicelib_cabs(z); } DEVICE_EXTERN_C -double __attribute__((weak)) carg(double __complex__ z) { +double carg(double __complex__ z) { return __devicelib_carg(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) cproj(double __complex__ z) { +double __complex__ cproj(double __complex__ z) { return __devicelib_cproj(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) cexp(double __complex__ z) { +double __complex__ cexp(double __complex__ z) { return __devicelib_cexp(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) clog(double __complex__ z) { +double __complex__ clog(double __complex__ z) { return __devicelib_clog(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) cpow(double __complex__ x, +double __complex__ cpow(double __complex__ x, double __complex__ y) { return __devicelib_cpow(x, y); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) cpolar(double rho, double theta) { +double __complex__ cpolar(double rho, double theta) { return __devicelib_cpolar(rho, theta); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) csqrt(double __complex__ z) { +double __complex__ csqrt(double __complex__ z) { return __devicelib_csqrt(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) csinh(double __complex__ z) { +double __complex__ csinh(double __complex__ z) { return __devicelib_csinh(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) ccosh(double __complex__ z) { +double __complex__ ccosh(double __complex__ z) { return __devicelib_ccosh(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) ctanh(double __complex__ z) { +double __complex__ ctanh(double __complex__ z) { return __devicelib_ctanh(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) csin(double __complex__ z) { +double __complex__ csin(double __complex__ z) { return __devicelib_csin(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) ccos(double __complex__ z) { +double __complex__ ccos(double __complex__ z) { return __devicelib_ccos(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) ctan(double __complex__ z) { +double __complex__ ctan(double __complex__ z) { return __devicelib_ctan(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) cacos(double __complex__ z) { +double __complex__ cacos(double __complex__ z) { return __devicelib_cacos(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) casinh(double __complex__ z) { +double __complex__ casinh(double __complex__ z) { return __devicelib_casinh(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) casin(double __complex__ z) { +double __complex__ casin(double __complex__ z) { return __devicelib_casin(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) cacosh(double __complex__ z) { +double __complex__ cacosh(double __complex__ z) { return __devicelib_cacosh(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) catanh(double __complex__ z) { +double __complex__ catanh(double __complex__ z) { return __devicelib_catanh(z); } DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) catan(double __complex__ z) { +double __complex__ catan(double __complex__ z) { return __devicelib_catan(z); } // __muldc3 // Returns: the product of a + ib and c + id DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) __muldc3(double __a, double __b, +double __complex__ __muldc3(double __a, double __b, double __c, double __d) { return __devicelib___muldc3(__a, __b, __c, __d); } @@ -133,8 +131,7 @@ double __complex__ __attribute__((weak)) __muldc3(double __a, double __b, // __divdc3 // Returns: the quotient of (a + ib) / (c + id) DEVICE_EXTERN_C -double __complex__ __attribute__((weak)) __divdc3(double __a, double __b, +double __complex__ __divdc3(double __a, double __b, double __c, double __d) { return __devicelib___divdc3(__a, __b, __c, __d); } -#endif // IMPL_ENABLED diff --git a/libdevice/device.h b/libdevice/device.h index c5281fa9d46cf..f0c4fcd6bd9da 100644 --- a/libdevice/device.h +++ b/libdevice/device.h @@ -20,11 +20,15 @@ #define SYCL_EXTERNAL #endif // SYCL_EXTERNAL -#define DEVICE_EXTERNAL SYCL_EXTERNAL -#define IMPL_ENABLED __SYCL_DEVICE_ONLY__ +#ifdef __SYCL_DEVICE_ONLY__ +#define DEVICE_EXTERNAL SYCL_EXTERNAL __attribute__((weak)) +#else // __SYCL_DEVICE_ONLY__ +#define DEVICE_EXTERNAL static +#undef EXTERN_C +#define EXTERN_C +#endif // __SYCL_DEVICE_ONLY__ #else // CL_SYCL_LANGUAGE_VERSION #define DEVICE_EXTERNAL -#define IMPL_ENABLED 0 #endif // CL_SYCL_LANGUAGE_VERSION #define DEVICE_EXTERN_C DEVICE_EXTERNAL EXTERN_C diff --git a/libdevice/glibc_wrapper.cpp b/libdevice/glibc_wrapper.cpp index 7249d2b464f33..b645c43431b90 100644 --- a/libdevice/glibc_wrapper.cpp +++ b/libdevice/glibc_wrapper.cpp @@ -7,11 +7,7 @@ //===----------------------------------------------------------------------===// #include "device.h" - -#if IMPL_ENABLED #include "wrapper.h" -#include // for __spirv_BuiltInGlobalInvocationId, - // __spirv_BuiltInLocalInvocationId DEVICE_EXTERN_C void __assert_fail(const char *expr, const char *file, @@ -24,4 +20,3 @@ void __assert_fail(const char *expr, const char *file, __spirv_LocalInvocationId_y(), __spirv_LocalInvocationId_z()); } -#endif // IMPL_ENABLED diff --git a/libdevice/msvc_wrapper.cpp b/libdevice/msvc_wrapper.cpp index 84cf1b0c4ac0e..ca23996b2e9a4 100644 --- a/libdevice/msvc_wrapper.cpp +++ b/libdevice/msvc_wrapper.cpp @@ -7,11 +7,7 @@ //===----------------------------------------------------------------------===// #include "device.h" - -#if IMPL_ENABLED #include "wrapper.h" -#include // for __spirv_BuiltInGlobalInvocationId, - // __spirv_BuiltInLocalInvocationId // Truncates a wide (16 or 32 bit) string (wstr) into an ASCII string (str). // Any non-ASCII characters are replaced by question mark '?'. @@ -43,4 +39,3 @@ void _wassert(const wchar_t *wexpr, const wchar_t *wfile, unsigned line) { __spirv_LocalInvocationId_y(), __spirv_LocalInvocationId_z()); } -#endif // IMPL_ENABLED diff --git a/libdevice/wrapper.h b/libdevice/wrapper.h index 87157badd5ff6..945acbe0d5e26 100644 --- a/libdevice/wrapper.h +++ b/libdevice/wrapper.h @@ -13,13 +13,19 @@ #include #include "device.h" -#if IMPL_ENABLED +DEVICE_EXTERNAL size_t __spirv_GlobalInvocationId_x(); +DEVICE_EXTERNAL size_t __spirv_GlobalInvocationId_y(); +DEVICE_EXTERNAL size_t __spirv_GlobalInvocationId_z(); + +DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_x(); +DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_y(); +DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_z(); + DEVICE_EXTERN_C void __devicelib_assert_fail( const char *expr, const char *file, int32_t line, const char *func, uint64_t gid0, uint64_t gid1, uint64_t gid2, uint64_t lid0, uint64_t lid1, uint64_t lid2); -#endif // IMPL_ENABLED #endif // __LIBDEVICE_WRAPPER_H__ diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index 4a311d271cdb3..c41be541e6497 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -228,6 +228,13 @@ if (SYCL_ENABLE_XPTI_TRACING) endif() endif() +# Enable new IN_LIST operator. +cmake_policy(SET CMP0057 NEW) + +if (libdevice IN_LIST LLVM_ENABLE_PROJECTS) + add_dependencies(sycl-toolchain libsycldevice) +endif() + if (NOT DEFINED LLVM_INCLUDE_TESTS) set(LLVM_INCLUDE_TESTS ON) endif() @@ -270,6 +277,7 @@ set( SYCL_TOOLCHAIN_DEPLOY_COMPONENTS sycl-headers-extras sycl pi_opencl + libsycldevice ) From 871a9edfa38f099a18ceeae4c7d2356ad0b9cd41 Mon Sep 17 00:00:00 2001 From: Vyacheslav Zakharin Date: Mon, 9 Mar 2020 13:19:39 -0700 Subject: [PATCH 5/6] clang-format for libdevice. Signed-off-by: Vyacheslav Zakharin --- libdevice/cmath_wrapper.cpp | 160 +++++++--------------------- libdevice/cmath_wrapper_fp64.cpp | 152 +++++++------------------- libdevice/complex_wrapper.cpp | 77 ++++--------- libdevice/complex_wrapper_fp64.cpp | 77 ++++--------- libdevice/device.h | 16 +-- libdevice/device_complex.h | 66 ++++++------ libdevice/device_math.h | 84 +++++++-------- libdevice/fallback-cassert.cpp | 23 ++-- libdevice/fallback-cmath-fp64.cpp | 128 ++++++---------------- libdevice/fallback-cmath.cpp | 136 ++++++----------------- libdevice/fallback-complex-fp64.cpp | 118 ++++++++++---------- libdevice/fallback-complex.cpp | 121 ++++++++++----------- libdevice/glibc_wrapper.cpp | 16 ++- libdevice/msvc_wrapper.cpp | 12 +-- libdevice/wrapper.h | 11 +- 15 files changed, 400 insertions(+), 797 deletions(-) diff --git a/libdevice/cmath_wrapper.cpp b/libdevice/cmath_wrapper.cpp index 9358f003a04aa..8a71985488606 100644 --- a/libdevice/cmath_wrapper.cpp +++ b/libdevice/cmath_wrapper.cpp @@ -10,201 +10,121 @@ #include "device_math.h" DEVICE_EXTERN_C -float scalbnf(float x, int n) { - return __devicelib_scalbnf(x, n); -} +float scalbnf(float x, int n) { return __devicelib_scalbnf(x, n); } DEVICE_EXTERN_C -float logf(float x) { - return __devicelib_logf(x); -} +float logf(float x) { return __devicelib_logf(x); } DEVICE_EXTERN_C -float expf(float x) { - return __devicelib_expf(x); -} +float expf(float x) { return __devicelib_expf(x); } DEVICE_EXTERN_C -float frexpf(float x, int *exp) { - return __devicelib_frexpf(x, exp); -} +float frexpf(float x, int *exp) { return __devicelib_frexpf(x, exp); } DEVICE_EXTERN_C -float ldexpf(float x, int exp) { - return __devicelib_ldexpf(x, exp); -} +float ldexpf(float x, int exp) { return __devicelib_ldexpf(x, exp); } DEVICE_EXTERN_C -float log10f(float x) { - return __devicelib_log10f(x); -} +float log10f(float x) { return __devicelib_log10f(x); } DEVICE_EXTERN_C -float modff(float x, float *intpart) { - return __devicelib_modff(x, intpart); -} +float modff(float x, float *intpart) { return __devicelib_modff(x, intpart); } DEVICE_EXTERN_C -float exp2f(float x) { - return __devicelib_exp2f(x); -} +float exp2f(float x) { return __devicelib_exp2f(x); } DEVICE_EXTERN_C -float expm1f(float x) { - return __devicelib_expm1f(x); -} +float expm1f(float x) { return __devicelib_expm1f(x); } DEVICE_EXTERN_C -int ilogbf(float x) { - return __devicelib_ilogbf(x); -} +int ilogbf(float x) { return __devicelib_ilogbf(x); } DEVICE_EXTERN_C -float log1pf(float x) { - return __devicelib_log1pf(x); -} +float log1pf(float x) { return __devicelib_log1pf(x); } DEVICE_EXTERN_C -float log2f(float x) { - return __devicelib_log2f(x); -} +float log2f(float x) { return __devicelib_log2f(x); } DEVICE_EXTERN_C -float logbf(float x) { - return __devicelib_logbf(x); -} +float logbf(float x) { return __devicelib_logbf(x); } DEVICE_EXTERN_C -float sqrtf(float x) { - return __devicelib_sqrtf(x); -} +float sqrtf(float x) { return __devicelib_sqrtf(x); } DEVICE_EXTERN_C -float cbrtf(float x) { - return __devicelib_cbrtf(x); -} +float cbrtf(float x) { return __devicelib_cbrtf(x); } DEVICE_EXTERN_C -float hypotf(float x, float y) { - return __devicelib_hypotf(x, y); -} +float hypotf(float x, float y) { return __devicelib_hypotf(x, y); } DEVICE_EXTERN_C -float erff(float x) { - return __devicelib_erff(x); -} +float erff(float x) { return __devicelib_erff(x); } DEVICE_EXTERN_C -float erfcf(float x) { - return __devicelib_erfcf(x); -} +float erfcf(float x) { return __devicelib_erfcf(x); } DEVICE_EXTERN_C -float tgammaf(float x) { - return __devicelib_tgammaf(x); -} +float tgammaf(float x) { return __devicelib_tgammaf(x); } DEVICE_EXTERN_C -float lgammaf(float x) { - return __devicelib_lgammaf(x); -} +float lgammaf(float x) { return __devicelib_lgammaf(x); } DEVICE_EXTERN_C -float fmodf(float x, float y) { - return __devicelib_fmodf(x, y); -} +float fmodf(float x, float y) { return __devicelib_fmodf(x, y); } DEVICE_EXTERN_C -float remainderf(float x, float y) { - return __devicelib_remainderf(x, y); -} +float remainderf(float x, float y) { return __devicelib_remainderf(x, y); } DEVICE_EXTERN_C -float remquof(float x, float y, int *q) { - return __devicelib_remquof(x, y, q); -} +float remquof(float x, float y, int *q) { return __devicelib_remquof(x, y, q); } DEVICE_EXTERN_C -float nextafterf(float x, float y) { - return __devicelib_nextafterf(x, y); -} +float nextafterf(float x, float y) { return __devicelib_nextafterf(x, y); } DEVICE_EXTERN_C -float fdimf(float x, float y) { - return __devicelib_fdimf(x, y); -} +float fdimf(float x, float y) { return __devicelib_fdimf(x, y); } DEVICE_EXTERN_C -float fmaf(float x, float y, float z) { - return __devicelib_fmaf(x, y, z); -} +float fmaf(float x, float y, float z) { return __devicelib_fmaf(x, y, z); } DEVICE_EXTERN_C -float sinf(float x) { - return __devicelib_sinf(x); -} +float sinf(float x) { return __devicelib_sinf(x); } DEVICE_EXTERN_C -float cosf(float x) { - return __devicelib_cosf(x); -} +float cosf(float x) { return __devicelib_cosf(x); } DEVICE_EXTERN_C -float tanf(float x) { - return __devicelib_tanf(x); -} +float tanf(float x) { return __devicelib_tanf(x); } DEVICE_EXTERN_C -float powf(float x, float y) { - return __devicelib_powf(x, y); -} +float powf(float x, float y) { return __devicelib_powf(x, y); } DEVICE_EXTERN_C -float acosf(float x) { - return __devicelib_acosf(x); -} +float acosf(float x) { return __devicelib_acosf(x); } DEVICE_EXTERN_C -float asinf(float x) { - return __devicelib_asinf(x); -} +float asinf(float x) { return __devicelib_asinf(x); } DEVICE_EXTERN_C -float atanf(float x) { - return __devicelib_atanf(x); -} +float atanf(float x) { return __devicelib_atanf(x); } DEVICE_EXTERN_C -float atan2f(float x, float y) { - return __devicelib_atan2f(x, y); -} +float atan2f(float x, float y) { return __devicelib_atan2f(x, y); } DEVICE_EXTERN_C -float coshf(float x) { - return __devicelib_coshf(x); -} +float coshf(float x) { return __devicelib_coshf(x); } DEVICE_EXTERN_C -float sinhf(float x) { - return __devicelib_sinhf(x); -} +float sinhf(float x) { return __devicelib_sinhf(x); } DEVICE_EXTERN_C -float tanhf(float x) { - return __devicelib_tanhf(x); -} +float tanhf(float x) { return __devicelib_tanhf(x); } DEVICE_EXTERN_C -float acoshf(float x) { - return __devicelib_acoshf(x); -} +float acoshf(float x) { return __devicelib_acoshf(x); } DEVICE_EXTERN_C -float asinhf(float x) { - return __devicelib_asinhf(x); -} +float asinhf(float x) { return __devicelib_asinhf(x); } DEVICE_EXTERN_C -float atanhf(float x) { - return __devicelib_atanhf(x); -} +float atanhf(float x) { return __devicelib_atanhf(x); } diff --git a/libdevice/cmath_wrapper_fp64.cpp b/libdevice/cmath_wrapper_fp64.cpp index 2752273c05d5e..ef8d8e6c50504 100644 --- a/libdevice/cmath_wrapper_fp64.cpp +++ b/libdevice/cmath_wrapper_fp64.cpp @@ -14,109 +14,67 @@ // the prototype), functions in device libraries will be ignored and // overrided by users' version. DEVICE_EXTERN_C -double log(double x) { - return __devicelib_log(x); -} +double log(double x) { return __devicelib_log(x); } DEVICE_EXTERN_C -double exp(double x) { - return __devicelib_exp(x); -} +double exp(double x) { return __devicelib_exp(x); } DEVICE_EXTERN_C -double frexp(double x, int *exp) { - return __devicelib_frexp(x, exp); -} +double frexp(double x, int *exp) { return __devicelib_frexp(x, exp); } DEVICE_EXTERN_C -double ldexp(double x, int exp) { - return __devicelib_ldexp(x, exp); -} +double ldexp(double x, int exp) { return __devicelib_ldexp(x, exp); } DEVICE_EXTERN_C -double log10(double x) { - return __devicelib_log10(x); -} +double log10(double x) { return __devicelib_log10(x); } DEVICE_EXTERN_C -double modf(double x, double *intpart) { - return __devicelib_modf(x, intpart); -} +double modf(double x, double *intpart) { return __devicelib_modf(x, intpart); } DEVICE_EXTERN_C -double exp2(double x) { - return __devicelib_exp2(x); -} +double exp2(double x) { return __devicelib_exp2(x); } DEVICE_EXTERN_C -double expm1(double x) { - return __devicelib_expm1(x); -} +double expm1(double x) { return __devicelib_expm1(x); } DEVICE_EXTERN_C -int ilogb(double x) { - return __devicelib_ilogb(x); -} +int ilogb(double x) { return __devicelib_ilogb(x); } DEVICE_EXTERN_C -double log1p(double x) { - return __devicelib_log1p(x); -} +double log1p(double x) { return __devicelib_log1p(x); } DEVICE_EXTERN_C -double log2(double x) { - return __devicelib_log2(x); -} +double log2(double x) { return __devicelib_log2(x); } DEVICE_EXTERN_C -double logb(double x) { - return __devicelib_logb(x); -} +double logb(double x) { return __devicelib_logb(x); } DEVICE_EXTERN_C -double sqrt(double x) { - return __devicelib_sqrt(x); -} +double sqrt(double x) { return __devicelib_sqrt(x); } DEVICE_EXTERN_C -double cbrt(double x) { - return __devicelib_cbrt(x); -} +double cbrt(double x) { return __devicelib_cbrt(x); } DEVICE_EXTERN_C -double hypot(double x, double y) { - return __devicelib_hypot(x, y); -} +double hypot(double x, double y) { return __devicelib_hypot(x, y); } DEVICE_EXTERN_C -double erf(double x) { - return __devicelib_erf(x); -} +double erf(double x) { return __devicelib_erf(x); } DEVICE_EXTERN_C -double erfc(double x) { - return __devicelib_erfc(x); -} +double erfc(double x) { return __devicelib_erfc(x); } DEVICE_EXTERN_C -double tgamma(double x) { - return __devicelib_tgamma(x); -} +double tgamma(double x) { return __devicelib_tgamma(x); } DEVICE_EXTERN_C -double lgamma(double x) { - return __devicelib_lgamma(x); -} +double lgamma(double x) { return __devicelib_lgamma(x); } DEVICE_EXTERN_C -double fmod(double x, double y) { - return __devicelib_fmod(x, y); -} +double fmod(double x, double y) { return __devicelib_fmod(x, y); } DEVICE_EXTERN_C -double remainder(double x, double y) { - return __devicelib_remainder(x, y); -} +double remainder(double x, double y) { return __devicelib_remainder(x, y); } DEVICE_EXTERN_C double remquo(double x, double y, int *q) { @@ -124,86 +82,52 @@ double remquo(double x, double y, int *q) { } DEVICE_EXTERN_C -double nextafter(double x, double y) { - return __devicelib_nextafter(x, y); -} +double nextafter(double x, double y) { return __devicelib_nextafter(x, y); } DEVICE_EXTERN_C -double fdim(double x, double y) { - return __devicelib_fdim(x, y); -} +double fdim(double x, double y) { return __devicelib_fdim(x, y); } DEVICE_EXTERN_C -double fma(double x, double y, double z) { - return __devicelib_fma(x, y, z); -} +double fma(double x, double y, double z) { return __devicelib_fma(x, y, z); } DEVICE_EXTERN_C -double sin(double x) { - return __devicelib_sin(x); -} +double sin(double x) { return __devicelib_sin(x); } DEVICE_EXTERN_C -double cos(double x) { - return __devicelib_cos(x); -} +double cos(double x) { return __devicelib_cos(x); } DEVICE_EXTERN_C -double tan(double x) { - return __devicelib_tan(x); -} +double tan(double x) { return __devicelib_tan(x); } DEVICE_EXTERN_C -double pow(double x, double y) { - return __devicelib_pow(x, y); -} +double pow(double x, double y) { return __devicelib_pow(x, y); } DEVICE_EXTERN_C -double acos(double x) { - return __devicelib_acos(x); -} +double acos(double x) { return __devicelib_acos(x); } DEVICE_EXTERN_C -double asin(double x) { - return __devicelib_asin(x); -} +double asin(double x) { return __devicelib_asin(x); } DEVICE_EXTERN_C -double atan(double x) { - return __devicelib_atan(x); -} +double atan(double x) { return __devicelib_atan(x); } DEVICE_EXTERN_C -double atan2(double x, double y) { - return __devicelib_atan2(x, y); -} +double atan2(double x, double y) { return __devicelib_atan2(x, y); } DEVICE_EXTERN_C -double cosh(double x) { - return __devicelib_cosh(x); -} +double cosh(double x) { return __devicelib_cosh(x); } DEVICE_EXTERN_C -double sinh(double x) { - return __devicelib_sinh(x); -} +double sinh(double x) { return __devicelib_sinh(x); } DEVICE_EXTERN_C -double tanh(double x) { - return __devicelib_tanh(x); -} +double tanh(double x) { return __devicelib_tanh(x); } DEVICE_EXTERN_C -double acosh(double x) { - return __devicelib_acosh(x); -} +double acosh(double x) { return __devicelib_acosh(x); } DEVICE_EXTERN_C -double asinh(double x) { - return __devicelib_asinh(x); -} +double asinh(double x) { return __devicelib_asinh(x); } DEVICE_EXTERN_C -double atanh(double x) { - return __devicelib_atanh(x); -} +double atanh(double x) { return __devicelib_atanh(x); } diff --git a/libdevice/complex_wrapper.cpp b/libdevice/complex_wrapper.cpp index eb2a8dbbcfb11..845aad2f5ecb7 100644 --- a/libdevice/complex_wrapper.cpp +++ b/libdevice/complex_wrapper.cpp @@ -10,43 +10,28 @@ #include "device_complex.h" DEVICE_EXTERN_C -float cimagf(float __complex__ z) { - return __devicelib_cimagf(z); -} +float cimagf(float __complex__ z) { return __devicelib_cimagf(z); } DEVICE_EXTERN_C -float crealf(float __complex__ z) { - return __devicelib_crealf(z); -} +float crealf(float __complex__ z) { return __devicelib_crealf(z); } DEVICE_EXTERN_C -float cargf(float __complex__ z) { - return __devicelib_cargf(z); -} +float cargf(float __complex__ z) { return __devicelib_cargf(z); } DEVICE_EXTERN_C -float cabsf(float __complex__ z) { - return __devicelib_cabsf(z); -} +float cabsf(float __complex__ z) { return __devicelib_cabsf(z); } DEVICE_EXTERN_C -float __complex__ cprojf(float __complex__ z) { - return __devicelib_cprojf(z); -} +float __complex__ cprojf(float __complex__ z) { return __devicelib_cprojf(z); } DEVICE_EXTERN_C -float __complex__ cexpf(float __complex__ z) { - return __devicelib_cexpf(z); -} +float __complex__ cexpf(float __complex__ z) { return __devicelib_cexpf(z); } DEVICE_EXTERN_C -float __complex__ clogf(float __complex__ z) { - return __devicelib_clogf(z); -} +float __complex__ clogf(float __complex__ z) { return __devicelib_clogf(z); } DEVICE_EXTERN_C -float __complex__ cpowf(float __complex__ x, - float __complex__ y) { +float __complex__ cpowf(float __complex__ x, float __complex__ y) { return __devicelib_cpowf(x, y); } @@ -56,44 +41,28 @@ float __complex__ cpolarf(float rho, float theta) { } DEVICE_EXTERN_C -float __complex__ csqrtf(float __complex__ z) { - return __devicelib_csqrtf(z); -} +float __complex__ csqrtf(float __complex__ z) { return __devicelib_csqrtf(z); } DEVICE_EXTERN_C -float __complex__ csinhf(float __complex__ z) { - return __devicelib_csinhf(z); -} +float __complex__ csinhf(float __complex__ z) { return __devicelib_csinhf(z); } DEVICE_EXTERN_C -float __complex__ ccoshf(float __complex__ z) { - return __devicelib_ccoshf(z); -} +float __complex__ ccoshf(float __complex__ z) { return __devicelib_ccoshf(z); } DEVICE_EXTERN_C -float __complex__ ctanhf(float __complex__ z) { - return __devicelib_ctanhf(z); -} +float __complex__ ctanhf(float __complex__ z) { return __devicelib_ctanhf(z); } DEVICE_EXTERN_C -float __complex__ csinf(float __complex__ z) { - return __devicelib_csinf(z); -} +float __complex__ csinf(float __complex__ z) { return __devicelib_csinf(z); } DEVICE_EXTERN_C -float __complex__ ccosf(float __complex__ z) { - return __devicelib_ccosf(z); -} +float __complex__ ccosf(float __complex__ z) { return __devicelib_ccosf(z); } DEVICE_EXTERN_C -float __complex__ ctanf(float __complex__ z) { - return __devicelib_ctanf(z); -} +float __complex__ ctanf(float __complex__ z) { return __devicelib_ctanf(z); } DEVICE_EXTERN_C -float __complex__ cacosf(float __complex__ z) { - return __devicelib_cacosf(z); -} +float __complex__ cacosf(float __complex__ z) { return __devicelib_cacosf(z); } DEVICE_EXTERN_C float __complex__ casinhf(float __complex__ z) { @@ -101,9 +70,7 @@ float __complex__ casinhf(float __complex__ z) { } DEVICE_EXTERN_C -float __complex__ casinf(float __complex__ z) { - return __devicelib_casinf(z); -} +float __complex__ casinf(float __complex__ z) { return __devicelib_casinf(z); } DEVICE_EXTERN_C float __complex__ cacoshf(float __complex__ z) { @@ -116,22 +83,18 @@ float __complex__ catanhf(float __complex__ z) { } DEVICE_EXTERN_C -float __complex__ catanf(float __complex__ z) { - return __devicelib_catanf(z); -} +float __complex__ catanf(float __complex__ z) { return __devicelib_catanf(z); } // __mulsc3 // Returns: the product of a + ib and c + id DEVICE_EXTERN_C -float __complex__ __mulsc3(float __a, float __b, - float __c, float __d) { +float __complex__ __mulsc3(float __a, float __b, float __c, float __d) { return __devicelib___mulsc3(__a, __b, __c, __d); } // __divsc3 // Returns: the quotient of (a + ib) / (c + id) DEVICE_EXTERN_C -float __complex__ __divsc3(float __a, float __b, - float __c, float __d) { +float __complex__ __divsc3(float __a, float __b, float __c, float __d) { return __devicelib___divsc3(__a, __b, __c, __d); } diff --git a/libdevice/complex_wrapper_fp64.cpp b/libdevice/complex_wrapper_fp64.cpp index 190405b9a549f..d4dfe3733c2ed 100644 --- a/libdevice/complex_wrapper_fp64.cpp +++ b/libdevice/complex_wrapper_fp64.cpp @@ -10,43 +10,28 @@ #include "device_complex.h" DEVICE_EXTERN_C -double cimag(double __complex__ z) { - return __devicelib_cimag(z); -} +double cimag(double __complex__ z) { return __devicelib_cimag(z); } DEVICE_EXTERN_C -double creal(double __complex__ z) { - return __devicelib_creal(z); -} +double creal(double __complex__ z) { return __devicelib_creal(z); } DEVICE_EXTERN_C -double cabs(double __complex__ z) { - return __devicelib_cabs(z); -} +double cabs(double __complex__ z) { return __devicelib_cabs(z); } DEVICE_EXTERN_C -double carg(double __complex__ z) { - return __devicelib_carg(z); -} +double carg(double __complex__ z) { return __devicelib_carg(z); } DEVICE_EXTERN_C -double __complex__ cproj(double __complex__ z) { - return __devicelib_cproj(z); -} +double __complex__ cproj(double __complex__ z) { return __devicelib_cproj(z); } DEVICE_EXTERN_C -double __complex__ cexp(double __complex__ z) { - return __devicelib_cexp(z); -} +double __complex__ cexp(double __complex__ z) { return __devicelib_cexp(z); } DEVICE_EXTERN_C -double __complex__ clog(double __complex__ z) { - return __devicelib_clog(z); -} +double __complex__ clog(double __complex__ z) { return __devicelib_clog(z); } DEVICE_EXTERN_C -double __complex__ cpow(double __complex__ x, - double __complex__ y) { +double __complex__ cpow(double __complex__ x, double __complex__ y) { return __devicelib_cpow(x, y); } @@ -56,44 +41,28 @@ double __complex__ cpolar(double rho, double theta) { } DEVICE_EXTERN_C -double __complex__ csqrt(double __complex__ z) { - return __devicelib_csqrt(z); -} +double __complex__ csqrt(double __complex__ z) { return __devicelib_csqrt(z); } DEVICE_EXTERN_C -double __complex__ csinh(double __complex__ z) { - return __devicelib_csinh(z); -} +double __complex__ csinh(double __complex__ z) { return __devicelib_csinh(z); } DEVICE_EXTERN_C -double __complex__ ccosh(double __complex__ z) { - return __devicelib_ccosh(z); -} +double __complex__ ccosh(double __complex__ z) { return __devicelib_ccosh(z); } DEVICE_EXTERN_C -double __complex__ ctanh(double __complex__ z) { - return __devicelib_ctanh(z); -} +double __complex__ ctanh(double __complex__ z) { return __devicelib_ctanh(z); } DEVICE_EXTERN_C -double __complex__ csin(double __complex__ z) { - return __devicelib_csin(z); -} +double __complex__ csin(double __complex__ z) { return __devicelib_csin(z); } DEVICE_EXTERN_C -double __complex__ ccos(double __complex__ z) { - return __devicelib_ccos(z); -} +double __complex__ ccos(double __complex__ z) { return __devicelib_ccos(z); } DEVICE_EXTERN_C -double __complex__ ctan(double __complex__ z) { - return __devicelib_ctan(z); -} +double __complex__ ctan(double __complex__ z) { return __devicelib_ctan(z); } DEVICE_EXTERN_C -double __complex__ cacos(double __complex__ z) { - return __devicelib_cacos(z); -} +double __complex__ cacos(double __complex__ z) { return __devicelib_cacos(z); } DEVICE_EXTERN_C double __complex__ casinh(double __complex__ z) { @@ -101,9 +70,7 @@ double __complex__ casinh(double __complex__ z) { } DEVICE_EXTERN_C -double __complex__ casin(double __complex__ z) { - return __devicelib_casin(z); -} +double __complex__ casin(double __complex__ z) { return __devicelib_casin(z); } DEVICE_EXTERN_C double __complex__ cacosh(double __complex__ z) { @@ -116,22 +83,18 @@ double __complex__ catanh(double __complex__ z) { } DEVICE_EXTERN_C -double __complex__ catan(double __complex__ z) { - return __devicelib_catan(z); -} +double __complex__ catan(double __complex__ z) { return __devicelib_catan(z); } // __muldc3 // Returns: the product of a + ib and c + id DEVICE_EXTERN_C -double __complex__ __muldc3(double __a, double __b, - double __c, double __d) { +double __complex__ __muldc3(double __a, double __b, double __c, double __d) { return __devicelib___muldc3(__a, __b, __c, __d); } // __divdc3 // Returns: the quotient of (a + ib) / (c + id) DEVICE_EXTERN_C -double __complex__ __divdc3(double __a, double __b, - double __c, double __d) { +double __complex__ __divdc3(double __a, double __b, double __c, double __d) { return __devicelib___divdc3(__a, __b, __c, __d); } diff --git a/libdevice/device.h b/libdevice/device.h index f0c4fcd6bd9da..1258deda031a4 100644 --- a/libdevice/device.h +++ b/libdevice/device.h @@ -11,26 +11,26 @@ #ifdef __cplusplus #define EXTERN_C extern "C" -#else // __cplusplus +#else // __cplusplus #define EXTERN_C -#endif // __cplusplus +#endif // __cplusplus #ifdef CL_SYCL_LANGUAGE_VERSION #ifndef SYCL_EXTERNAL #define SYCL_EXTERNAL -#endif // SYCL_EXTERNAL +#endif // SYCL_EXTERNAL #ifdef __SYCL_DEVICE_ONLY__ -#define DEVICE_EXTERNAL SYCL_EXTERNAL __attribute__((weak)) -#else // __SYCL_DEVICE_ONLY__ +#define DEVICE_EXTERNAL SYCL_EXTERNAL __attribute__((weak)) +#else // __SYCL_DEVICE_ONLY__ #define DEVICE_EXTERNAL static #undef EXTERN_C #define EXTERN_C #endif // __SYCL_DEVICE_ONLY__ -#else // CL_SYCL_LANGUAGE_VERSION +#else // CL_SYCL_LANGUAGE_VERSION #define DEVICE_EXTERNAL -#endif // CL_SYCL_LANGUAGE_VERSION +#endif // CL_SYCL_LANGUAGE_VERSION #define DEVICE_EXTERN_C DEVICE_EXTERNAL EXTERN_C -#endif // __LIBDEVICE_DEVICE_H__ +#endif // __LIBDEVICE_DEVICE_H__ diff --git a/libdevice/device_complex.h b/libdevice/device_complex.h index b45701affcb26..ff8b4f0730d5d 100644 --- a/libdevice/device_complex.h +++ b/libdevice/device_complex.h @@ -14,159 +14,153 @@ // clang doesn't recognize the c11 CMPLX macro, but it does have // its own syntax extension for initializing a complex as a struct. #ifndef CMPLX -#define CMPLX(r, i) ((double __complex__){ (double)(r), (double)(i) }) +#define CMPLX(r, i) ((double __complex__){(double)(r), (double)(i)}) #endif #ifndef CMPLXF -#define CMPLXF(r, i) ((float __complex__){ (float)(r), (float)(i) }) +#define CMPLXF(r, i) ((float __complex__){(float)(r), (float)(i)}) #endif DEVICE_EXTERN_C double __devicelib_cimag(double __complex__ z); DEVICE_EXTERN_C -float __devicelib_cimagf(float __complex__ z); +float __devicelib_cimagf(float __complex__ z); DEVICE_EXTERN_C double __devicelib_creal(double __complex__ z); DEVICE_EXTERN_C -float __devicelib_crealf(float __complex__ z); +float __devicelib_crealf(float __complex__ z); DEVICE_EXTERN_C double __devicelib_carg(double __complex__ z); DEVICE_EXTERN_C -float __devicelib_cargf(float __complex__ z); +float __devicelib_cargf(float __complex__ z); DEVICE_EXTERN_C double __devicelib_cabs(double __complex__ z); DEVICE_EXTERN_C -float __devicelib_cabsf(float __complex__ z); +float __devicelib_cabsf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_cproj(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_cprojf(float __complex__ z); +float __complex__ __devicelib_cprojf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_cexp(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_cexpf(float __complex__ z); +float __complex__ __devicelib_cexpf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_clog(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_clogf(float __complex__ z); +float __complex__ __devicelib_clogf(float __complex__ z); DEVICE_EXTERN_C -double __complex__ __devicelib_cpow(double __complex__ x, - double __complex__ y); +double __complex__ __devicelib_cpow(double __complex__ x, double __complex__ y); DEVICE_EXTERN_C -float __complex__ __devicelib_cpowf(float __complex__ x, - float __complex__ y); +float __complex__ __devicelib_cpowf(float __complex__ x, float __complex__ y); DEVICE_EXTERN_C double __complex__ __devicelib_cpolar(double x, double y); DEVICE_EXTERN_C -float __complex__ __devicelib_cpolarf(float x, float y); +float __complex__ __devicelib_cpolarf(float x, float y); DEVICE_EXTERN_C double __complex__ __devicelib_csqrt(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_csqrtf(float __complex__ z); +float __complex__ __devicelib_csqrtf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_csinh(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_csinhf(float __complex__ z); +float __complex__ __devicelib_csinhf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_ccosh(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_ccoshf(float __complex__ z); +float __complex__ __devicelib_ccoshf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_ctanh(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_ctanhf(float __complex__ z); +float __complex__ __devicelib_ctanhf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_csin(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_csinf(float __complex__ z); +float __complex__ __devicelib_csinf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_ccos(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_ccosf(float __complex__ z); +float __complex__ __devicelib_ccosf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_ctan(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_ctanf(float __complex__ z); +float __complex__ __devicelib_ctanf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_cacos(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_cacosf(float __complex__ z); +float __complex__ __devicelib_cacosf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_casinh(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_casinhf(float __complex__ z); +float __complex__ __devicelib_casinhf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_casin(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_casinf(float __complex__ z); +float __complex__ __devicelib_casinf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_cacosh(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_cacoshf(float __complex__ z); +float __complex__ __devicelib_cacoshf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_catanh(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_catanhf(float __complex__ z); +float __complex__ __devicelib_catanhf(float __complex__ z); DEVICE_EXTERN_C double __complex__ __devicelib_catan(double __complex__ z); DEVICE_EXTERN_C -float __complex__ __devicelib_catanf(float __complex__ z); +float __complex__ __devicelib_catanf(float __complex__ z); DEVICE_EXTERN_C -double __complex__ __devicelib___muldc3(double a, double b, - double c, double d); +double __complex__ __devicelib___muldc3(double a, double b, double c, double d); DEVICE_EXTERN_C -float __complex__ __devicelib___mulsc3(float a, float b, - float c, float d); +float __complex__ __devicelib___mulsc3(float a, float b, float c, float d); DEVICE_EXTERN_C -double __complex__ __devicelib___divdc3(double a, double b, - double c, double d); +double __complex__ __devicelib___divdc3(double a, double b, double c, double d); DEVICE_EXTERN_C -float __complex__ __devicelib___divsc3(float a, float b, - float c, float d); -#endif // __LIBDEVICE_DEVICE_COMPLEX_H_ +float __complex__ __devicelib___divsc3(float a, float b, float c, float d); +#endif // __LIBDEVICE_DEVICE_COMPLEX_H_ diff --git a/libdevice/device_math.h b/libdevice/device_math.h index de9ea229db8d8..a811ca4384b47 100644 --- a/libdevice/device_math.h +++ b/libdevice/device_math.h @@ -123,166 +123,166 @@ DEVICE_EXTERN_C double __devicelib_log(double x); DEVICE_EXTERN_C -float __devicelib_logf(float x); +float __devicelib_logf(float x); DEVICE_EXTERN_C double __devicelib_sin(double x); DEVICE_EXTERN_C -float __devicelib_sinf(float x); +float __devicelib_sinf(float x); DEVICE_EXTERN_C double __devicelib_cos(double x); DEVICE_EXTERN_C -float __devicelib_cosf(float x); +float __devicelib_cosf(float x); DEVICE_EXTERN_C double __devicelib_tan(double x); DEVICE_EXTERN_C -float __devicelib_tanf(float x); +float __devicelib_tanf(float x); DEVICE_EXTERN_C double __devicelib_acos(double x); DEVICE_EXTERN_C -float __devicelib_acosf(float x); +float __devicelib_acosf(float x); DEVICE_EXTERN_C double __devicelib_pow(double x, double y); DEVICE_EXTERN_C -float __devicelib_powf(float x, float y); +float __devicelib_powf(float x, float y); DEVICE_EXTERN_C double __devicelib_sqrt(double x); DEVICE_EXTERN_C -float __devicelib_sqrtf(float x); +float __devicelib_sqrtf(float x); DEVICE_EXTERN_C double __devicelib_cbrt(double x); DEVICE_EXTERN_C -float __devicelib_cbrtf(float x); +float __devicelib_cbrtf(float x); DEVICE_EXTERN_C double __devicelib_hypot(double x, double y); DEVICE_EXTERN_C -float __devicelib_hypotf(float x, float y); +float __devicelib_hypotf(float x, float y); DEVICE_EXTERN_C double __devicelib_erf(double x); DEVICE_EXTERN_C -float __devicelib_erff(float x); +float __devicelib_erff(float x); DEVICE_EXTERN_C double __devicelib_erfc(double x); DEVICE_EXTERN_C -float __devicelib_erfcf(float x); +float __devicelib_erfcf(float x); DEVICE_EXTERN_C double __devicelib_tgamma(double x); DEVICE_EXTERN_C -float __devicelib_tgammaf(float x); +float __devicelib_tgammaf(float x); DEVICE_EXTERN_C double __devicelib_lgamma(double x); DEVICE_EXTERN_C -float __devicelib_lgammaf(float x); +float __devicelib_lgammaf(float x); DEVICE_EXTERN_C double __devicelib_fmod(double x, double y); DEVICE_EXTERN_C -float __devicelib_fmodf(float x, float y); +float __devicelib_fmodf(float x, float y); DEVICE_EXTERN_C double __devicelib_remainder(double x, double y); DEVICE_EXTERN_C -float __devicelib_remainderf(float x, float y); +float __devicelib_remainderf(float x, float y); DEVICE_EXTERN_C double __devicelib_remquo(double x, double y, int *q); DEVICE_EXTERN_C -float __devicelib_remquof(float x, float y, int *q); +float __devicelib_remquof(float x, float y, int *q); DEVICE_EXTERN_C double __devicelib_nextafter(double x, double y); DEVICE_EXTERN_C -float __devicelib_nextafterf(float x, float y); +float __devicelib_nextafterf(float x, float y); DEVICE_EXTERN_C double __devicelib_fdim(double x, double y); DEVICE_EXTERN_C -float __devicelib_fdimf(float x, float y); +float __devicelib_fdimf(float x, float y); DEVICE_EXTERN_C double __devicelib_fma(double x, double y, double z); DEVICE_EXTERN_C -float __devicelib_fmaf(float x, float y, float z); +float __devicelib_fmaf(float x, float y, float z); DEVICE_EXTERN_C -float __devicelib_asinf(float x); +float __devicelib_asinf(float x); DEVICE_EXTERN_C double __devicelib_asin(double x); DEVICE_EXTERN_C -float __devicelib_atanf(float x); +float __devicelib_atanf(float x); DEVICE_EXTERN_C double __devicelib_atan(double x); DEVICE_EXTERN_C -float __devicelib_atan2f(float x, float y); +float __devicelib_atan2f(float x, float y); DEVICE_EXTERN_C double __devicelib_atan2(double x, double y); DEVICE_EXTERN_C -float __devicelib_coshf(float x); +float __devicelib_coshf(float x); DEVICE_EXTERN_C double __devicelib_cosh(double x); DEVICE_EXTERN_C -float __devicelib_sinhf(float x); +float __devicelib_sinhf(float x); DEVICE_EXTERN_C double __devicelib_sinh(double x); DEVICE_EXTERN_C -float __devicelib_tanhf(float x); +float __devicelib_tanhf(float x); DEVICE_EXTERN_C double __devicelib_tanh(double x); DEVICE_EXTERN_C -float __devicelib_acoshf(float x); +float __devicelib_acoshf(float x); DEVICE_EXTERN_C double __devicelib_acosh(double x); DEVICE_EXTERN_C -float __devicelib_asinhf(float x); +float __devicelib_asinhf(float x); DEVICE_EXTERN_C double __devicelib_asinh(double x); DEVICE_EXTERN_C -float __devicelib_atanhf(float x); +float __devicelib_atanhf(float x); DEVICE_EXTERN_C double __devicelib_atanh(double x); @@ -291,68 +291,68 @@ DEVICE_EXTERN_C double __devicelib_frexp(double x, int *exp); DEVICE_EXTERN_C -float __devicelib_frexpf(float x, int *exp); +float __devicelib_frexpf(float x, int *exp); DEVICE_EXTERN_C double __devicelib_ldexp(double x, int exp); DEVICE_EXTERN_C -float __devicelib_ldexpf(float x, int exp); +float __devicelib_ldexpf(float x, int exp); DEVICE_EXTERN_C double __devicelib_log10(double x); DEVICE_EXTERN_C -float __devicelib_log10f(float x); +float __devicelib_log10f(float x); DEVICE_EXTERN_C double __devicelib_modf(double x, double *intpart); DEVICE_EXTERN_C -float __devicelib_modff(float x, float *intpart); +float __devicelib_modff(float x, float *intpart); DEVICE_EXTERN_C double __devicelib_exp(double x); DEVICE_EXTERN_C -float __devicelib_expf(float x); +float __devicelib_expf(float x); DEVICE_EXTERN_C double __devicelib_exp2(double x); DEVICE_EXTERN_C -float __devicelib_exp2f(float x); +float __devicelib_exp2f(float x); DEVICE_EXTERN_C double __devicelib_expm1(double x); DEVICE_EXTERN_C -float __devicelib_expm1f(float x); +float __devicelib_expm1f(float x); DEVICE_EXTERN_C -int __devicelib_ilogb(double x); +int __devicelib_ilogb(double x); DEVICE_EXTERN_C -int __devicelib_ilogbf(float x); +int __devicelib_ilogbf(float x); DEVICE_EXTERN_C double __devicelib_log1p(double x); DEVICE_EXTERN_C -float __devicelib_log1pf(float x); +float __devicelib_log1pf(float x); DEVICE_EXTERN_C double __devicelib_log2(double x); DEVICE_EXTERN_C -float __devicelib_log2f(float x); +float __devicelib_log2f(float x); DEVICE_EXTERN_C double __devicelib_logb(double x); DEVICE_EXTERN_C -float __devicelib_logbf(float x); +float __devicelib_logbf(float x); DEVICE_EXTERN_C -float __devicelib_scalbnf(float x, int n); -#endif // __LIBDEVICE_DEVICE_MATH_H__ +float __devicelib_scalbnf(float x, int n); +#endif // __LIBDEVICE_DEVICE_MATH_H__ diff --git a/libdevice/fallback-cassert.cpp b/libdevice/fallback-cassert.cpp index 4c92dde4a24ac..bb3849aaf4e49 100644 --- a/libdevice/fallback-cassert.cpp +++ b/libdevice/fallback-cassert.cpp @@ -14,24 +14,19 @@ static const __attribute__((opencl_constant)) char assert_fmt[] = "%s:%d: %s: global id: [%lu,%lu,%lu], local id: [%lu,%lu,%lu] " "Assertion `%s` failed.\n"; -DEVICE_EXTERN_C void __devicelib_assert_fail( - const char *expr, const char *file, - int32_t line, const char *func, - uint64_t gid0, uint64_t gid1, uint64_t gid2, - uint64_t lid0, uint64_t lid1, uint64_t lid2) { +DEVICE_EXTERN_C void __devicelib_assert_fail(const char *expr, const char *file, + int32_t line, const char *func, + uint64_t gid0, uint64_t gid1, + uint64_t gid2, uint64_t lid0, + uint64_t lid1, uint64_t lid2) { // intX_t types are used instead of `int' and `long' because the format string // is defined in terms of *device* types (OpenCL types): %d matches a 32 bit // integer, %lu matches a 64 bit unsigned integer. Host `int' and // `long' types may be different, so we cannot use them. - __spirv_ocl_printf( - assert_fmt, - file, (int32_t)line, - // WORKAROUND: IGC does not handle this well - // (func) ? func : "", - func, - gid0, gid1, gid2, - lid0, lid1, lid2, - expr); + __spirv_ocl_printf(assert_fmt, file, (int32_t)line, + // WORKAROUND: IGC does not handle this well + // (func) ? func : "", + func, gid0, gid1, gid2, lid0, lid1, lid2, expr); // FIXME: call SPIR-V unreachable instead // volatile int *die = (int *)0x0; diff --git a/libdevice/fallback-cmath-fp64.cpp b/libdevice/fallback-cmath-fp64.cpp index 5c6b155dab46f..a0693d6b44c8a 100644 --- a/libdevice/fallback-cmath-fp64.cpp +++ b/libdevice/fallback-cmath-fp64.cpp @@ -9,14 +9,10 @@ #include "device_math.h" DEVICE_EXTERN_C -double __devicelib_log(double x) { - return __spirv_ocl_log(x); -} +double __devicelib_log(double x) { return __spirv_ocl_log(x); } DEVICE_EXTERN_C -double __devicelib_exp(double x) { - return __spirv_ocl_exp(x); -} +double __devicelib_exp(double x) { return __spirv_ocl_exp(x); } DEVICE_EXTERN_C double __devicelib_frexp(double x, int *exp) { @@ -29,9 +25,7 @@ double __devicelib_ldexp(double x, int exp) { } DEVICE_EXTERN_C -double __devicelib_log10(double x) { - return __spirv_ocl_log10(x); -} +double __devicelib_log10(double x) { return __spirv_ocl_log10(x); } DEVICE_EXTERN_C double __devicelib_modf(double x, double *intpart) { @@ -39,74 +33,46 @@ double __devicelib_modf(double x, double *intpart) { } DEVICE_EXTERN_C -double __devicelib_exp2(double x) { - return __spirv_ocl_exp2(x); -} +double __devicelib_exp2(double x) { return __spirv_ocl_exp2(x); } DEVICE_EXTERN_C -double __devicelib_expm1(double x) { - return __spirv_ocl_expm1(x); -} +double __devicelib_expm1(double x) { return __spirv_ocl_expm1(x); } DEVICE_EXTERN_C -int __devicelib_ilogb(double x) { - return __spirv_ocl_ilogb(x); -} +int __devicelib_ilogb(double x) { return __spirv_ocl_ilogb(x); } DEVICE_EXTERN_C -double __devicelib_log1p(double x) { - return __spirv_ocl_log1p(x); -} +double __devicelib_log1p(double x) { return __spirv_ocl_log1p(x); } DEVICE_EXTERN_C -double __devicelib_log2(double x) { - return __spirv_ocl_log2(x); -} +double __devicelib_log2(double x) { return __spirv_ocl_log2(x); } DEVICE_EXTERN_C -double __devicelib_logb(double x) { - return __spirv_ocl_logb(x); -} +double __devicelib_logb(double x) { return __spirv_ocl_logb(x); } DEVICE_EXTERN_C -double __devicelib_sqrt(double x) { - return __spirv_ocl_sqrt(x); -} +double __devicelib_sqrt(double x) { return __spirv_ocl_sqrt(x); } DEVICE_EXTERN_C -double __devicelib_cbrt(double x) { - return __spirv_ocl_cbrt(x); -} +double __devicelib_cbrt(double x) { return __spirv_ocl_cbrt(x); } DEVICE_EXTERN_C -double __devicelib_hypot(double x, double y) { - return __spirv_ocl_hypot(x, y); -} +double __devicelib_hypot(double x, double y) { return __spirv_ocl_hypot(x, y); } DEVICE_EXTERN_C -double __devicelib_erf(double x) { - return __spirv_ocl_erf(x); -} +double __devicelib_erf(double x) { return __spirv_ocl_erf(x); } DEVICE_EXTERN_C -double __devicelib_erfc(double x) { - return __spirv_ocl_erfc(x); -} +double __devicelib_erfc(double x) { return __spirv_ocl_erfc(x); } DEVICE_EXTERN_C -double __devicelib_tgamma(double x) { - return __spirv_ocl_tgamma(x); -} +double __devicelib_tgamma(double x) { return __spirv_ocl_tgamma(x); } DEVICE_EXTERN_C -double __devicelib_lgamma(double x) { - return __spirv_ocl_lgamma(x); -} +double __devicelib_lgamma(double x) { return __spirv_ocl_lgamma(x); } DEVICE_EXTERN_C -double __devicelib_fmod(double x, double y) { - return __spirv_ocl_fmod(x, y); -} +double __devicelib_fmod(double x, double y) { return __spirv_ocl_fmod(x, y); } DEVICE_EXTERN_C double __devicelib_remainder(double x, double y) { @@ -124,9 +90,7 @@ double __devicelib_nextafter(double x, double y) { } DEVICE_EXTERN_C -double __devicelib_fdim(double x, double y) { - return __spirv_ocl_fdim(x, y); -} +double __devicelib_fdim(double x, double y) { return __spirv_ocl_fdim(x, y); } DEVICE_EXTERN_C double __devicelib_fma(double x, double y, double z) { @@ -134,71 +98,43 @@ double __devicelib_fma(double x, double y, double z) { } DEVICE_EXTERN_C -double __devicelib_sin(double x) { - return __spirv_ocl_sin(x); -} +double __devicelib_sin(double x) { return __spirv_ocl_sin(x); } DEVICE_EXTERN_C -double __devicelib_cos(double x) { - return __spirv_ocl_cos(x); -} +double __devicelib_cos(double x) { return __spirv_ocl_cos(x); } DEVICE_EXTERN_C -double __devicelib_tan(double x) { - return __spirv_ocl_tan(x); -} +double __devicelib_tan(double x) { return __spirv_ocl_tan(x); } DEVICE_EXTERN_C -double __devicelib_pow(double x, double y) { - return __spirv_ocl_pow(x, y); -} +double __devicelib_pow(double x, double y) { return __spirv_ocl_pow(x, y); } DEVICE_EXTERN_C -double __devicelib_acos(double x) { - return __spirv_ocl_acos(x); -} +double __devicelib_acos(double x) { return __spirv_ocl_acos(x); } DEVICE_EXTERN_C -double __devicelib_asin(double x) { - return __spirv_ocl_asin(x); -} +double __devicelib_asin(double x) { return __spirv_ocl_asin(x); } DEVICE_EXTERN_C -double __devicelib_atan(double x) { - return __spirv_ocl_atan(x); -} +double __devicelib_atan(double x) { return __spirv_ocl_atan(x); } DEVICE_EXTERN_C -double __devicelib_atan2(double x, double y) { - return __spirv_ocl_atan2(x, y); -} +double __devicelib_atan2(double x, double y) { return __spirv_ocl_atan2(x, y); } DEVICE_EXTERN_C -double __devicelib_cosh(double x) { - return __spirv_ocl_cosh(x); -} +double __devicelib_cosh(double x) { return __spirv_ocl_cosh(x); } DEVICE_EXTERN_C -double __devicelib_sinh(double x) { - return __spirv_ocl_sinh(x); -} +double __devicelib_sinh(double x) { return __spirv_ocl_sinh(x); } DEVICE_EXTERN_C -double __devicelib_tanh(double x) { - return __spirv_ocl_tanh(x); -} +double __devicelib_tanh(double x) { return __spirv_ocl_tanh(x); } DEVICE_EXTERN_C -double __devicelib_acosh(double x) { - return __spirv_ocl_acosh(x); -} +double __devicelib_acosh(double x) { return __spirv_ocl_acosh(x); } DEVICE_EXTERN_C -double __devicelib_asinh(double x) { - return __spirv_ocl_asinh(x); -} +double __devicelib_asinh(double x) { return __spirv_ocl_asinh(x); } DEVICE_EXTERN_C -double __devicelib_atanh(double x) { - return __spirv_ocl_atanh(x); -} +double __devicelib_atanh(double x) { return __spirv_ocl_atanh(x); } diff --git a/libdevice/fallback-cmath.cpp b/libdevice/fallback-cmath.cpp index c76848fdf56a1..61904143a72f2 100644 --- a/libdevice/fallback-cmath.cpp +++ b/libdevice/fallback-cmath.cpp @@ -9,19 +9,13 @@ #include "device_math.h" DEVICE_EXTERN_C -float __devicelib_scalbnf(float x, int n) { - return __spirv_ocl_ldexp(x, n); -} +float __devicelib_scalbnf(float x, int n) { return __spirv_ocl_ldexp(x, n); } DEVICE_EXTERN_C -float __devicelib_logf(float x) { - return __spirv_ocl_log(x); -} +float __devicelib_logf(float x) { return __spirv_ocl_log(x); } DEVICE_EXTERN_C -float __devicelib_expf(float x) { - return __spirv_ocl_exp(x); -} +float __devicelib_expf(float x) { return __spirv_ocl_exp(x); } DEVICE_EXTERN_C float __devicelib_frexpf(float x, int *exp) { @@ -29,14 +23,10 @@ float __devicelib_frexpf(float x, int *exp) { } DEVICE_EXTERN_C -float __devicelib_ldexpf(float x, int exp) { - return __spirv_ocl_ldexp(x, exp); -} +float __devicelib_ldexpf(float x, int exp) { return __spirv_ocl_ldexp(x, exp); } DEVICE_EXTERN_C -float __devicelib_log10f(float x) { - return __spirv_ocl_log10(x); -} +float __devicelib_log10f(float x) { return __spirv_ocl_log10(x); } DEVICE_EXTERN_C float __devicelib_modff(float x, float *intpart) { @@ -44,74 +34,46 @@ float __devicelib_modff(float x, float *intpart) { } DEVICE_EXTERN_C -float __devicelib_exp2f(float x) { - return __spirv_ocl_exp2(x); -} +float __devicelib_exp2f(float x) { return __spirv_ocl_exp2(x); } DEVICE_EXTERN_C -float __devicelib_expm1f(float x) { - return __spirv_ocl_expm1(x); -} +float __devicelib_expm1f(float x) { return __spirv_ocl_expm1(x); } DEVICE_EXTERN_C -int __devicelib_ilogbf(float x) { - return __spirv_ocl_ilogb(x); -} +int __devicelib_ilogbf(float x) { return __spirv_ocl_ilogb(x); } DEVICE_EXTERN_C -float __devicelib_log1pf(float x) { - return __spirv_ocl_log1p(x); -} +float __devicelib_log1pf(float x) { return __spirv_ocl_log1p(x); } DEVICE_EXTERN_C -float __devicelib_log2f(float x) { - return __spirv_ocl_log2(x); -} +float __devicelib_log2f(float x) { return __spirv_ocl_log2(x); } DEVICE_EXTERN_C -float __devicelib_logbf(float x) { - return __spirv_ocl_logb(x); -} +float __devicelib_logbf(float x) { return __spirv_ocl_logb(x); } DEVICE_EXTERN_C -float __devicelib_sqrtf(float x) { - return __spirv_ocl_sqrt(x); -} +float __devicelib_sqrtf(float x) { return __spirv_ocl_sqrt(x); } DEVICE_EXTERN_C -float __devicelib_cbrtf(float x) { - return __spirv_ocl_cbrt(x); -} +float __devicelib_cbrtf(float x) { return __spirv_ocl_cbrt(x); } DEVICE_EXTERN_C -float __devicelib_hypotf(float x, float y) { - return __spirv_ocl_hypot(x, y); -} +float __devicelib_hypotf(float x, float y) { return __spirv_ocl_hypot(x, y); } DEVICE_EXTERN_C -float __devicelib_erff(float x) { - return __spirv_ocl_erf(x); -} +float __devicelib_erff(float x) { return __spirv_ocl_erf(x); } DEVICE_EXTERN_C -float __devicelib_erfcf(float x) { - return __spirv_ocl_erfc(x); -} +float __devicelib_erfcf(float x) { return __spirv_ocl_erfc(x); } DEVICE_EXTERN_C -float __devicelib_tgammaf(float x) { - return __spirv_ocl_tgamma(x); -} +float __devicelib_tgammaf(float x) { return __spirv_ocl_tgamma(x); } DEVICE_EXTERN_C -float __devicelib_lgammaf(float x) { - return __spirv_ocl_lgamma(x); -} +float __devicelib_lgammaf(float x) { return __spirv_ocl_lgamma(x); } DEVICE_EXTERN_C -float __devicelib_fmodf(float x, float y) { - return __spirv_ocl_fmod(x, y); -} +float __devicelib_fmodf(float x, float y) { return __spirv_ocl_fmod(x, y); } DEVICE_EXTERN_C float __devicelib_remainderf(float x, float y) { @@ -129,9 +91,7 @@ float __devicelib_nextafterf(float x, float y) { } DEVICE_EXTERN_C -float __devicelib_fdimf(float x, float y) { - return __spirv_ocl_fdim(x, y); -} +float __devicelib_fdimf(float x, float y) { return __spirv_ocl_fdim(x, y); } DEVICE_EXTERN_C float __devicelib_fmaf(float x, float y, float z) { @@ -139,71 +99,43 @@ float __devicelib_fmaf(float x, float y, float z) { } DEVICE_EXTERN_C -float __devicelib_sinf(float x) { - return __spirv_ocl_sin(x); -} +float __devicelib_sinf(float x) { return __spirv_ocl_sin(x); } DEVICE_EXTERN_C -float __devicelib_cosf(float x) { - return __spirv_ocl_cos(x); -} +float __devicelib_cosf(float x) { return __spirv_ocl_cos(x); } DEVICE_EXTERN_C -float __devicelib_tanf(float x) { - return __spirv_ocl_tan(x); -} +float __devicelib_tanf(float x) { return __spirv_ocl_tan(x); } DEVICE_EXTERN_C -float __devicelib_powf(float x, float y) { - return __spirv_ocl_pow(x, y); -} +float __devicelib_powf(float x, float y) { return __spirv_ocl_pow(x, y); } DEVICE_EXTERN_C -float __devicelib_acosf(float x) { - return __spirv_ocl_acos(x); -} +float __devicelib_acosf(float x) { return __spirv_ocl_acos(x); } DEVICE_EXTERN_C -float __devicelib_asinf(float x) { - return __spirv_ocl_asin(x); -} +float __devicelib_asinf(float x) { return __spirv_ocl_asin(x); } DEVICE_EXTERN_C -float __devicelib_atanf(float x) { - return __spirv_ocl_atan(x); -} +float __devicelib_atanf(float x) { return __spirv_ocl_atan(x); } DEVICE_EXTERN_C -float __devicelib_atan2f(float x, float y) { - return __spirv_ocl_atan2(x, y); -} +float __devicelib_atan2f(float x, float y) { return __spirv_ocl_atan2(x, y); } DEVICE_EXTERN_C -float __devicelib_coshf(float x) { - return __spirv_ocl_cosh(x); -} +float __devicelib_coshf(float x) { return __spirv_ocl_cosh(x); } DEVICE_EXTERN_C -float __devicelib_sinhf(float x) { - return __spirv_ocl_sinh(x); -} +float __devicelib_sinhf(float x) { return __spirv_ocl_sinh(x); } DEVICE_EXTERN_C -float __devicelib_tanhf(float x) { - return __spirv_ocl_tanh(x); -} +float __devicelib_tanhf(float x) { return __spirv_ocl_tanh(x); } DEVICE_EXTERN_C -float __devicelib_acoshf(float x) { - return __spirv_ocl_acosh(x); -} +float __devicelib_acoshf(float x) { return __spirv_ocl_acosh(x); } DEVICE_EXTERN_C -float __devicelib_asinhf(float x) { - return __spirv_ocl_asinh(x); -} +float __devicelib_asinhf(float x) { return __spirv_ocl_asinh(x); } DEVICE_EXTERN_C -float __devicelib_atanhf(float x) { - return __spirv_ocl_atanh(x); -} +float __devicelib_atanhf(float x) { return __spirv_ocl_atanh(x); } diff --git a/libdevice/fallback-complex-fp64.cpp b/libdevice/fallback-complex-fp64.cpp index 343e7cb620450..69d23ea472c45 100644 --- a/libdevice/fallback-complex-fp64.cpp +++ b/libdevice/fallback-complex-fp64.cpp @@ -1,4 +1,4 @@ -//==----- fallback-complex.cpp - complex math functions for SPIR-V device ----==// +//==----- fallback-complex.cpp - complex math functions for SPIR-V device --==// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -6,25 +6,21 @@ // //===----------------------------------------------------------------------===// -#include "device_math.h" #include "device_complex.h" +#include "device_math.h" #include DEVICE_EXTERN_C -double __devicelib_creal(double __complex__ z) { - return __real__(z); -} +double __devicelib_creal(double __complex__ z) { return __real__(z); } DEVICE_EXTERN_C -double __devicelib_cimag(double __complex__ z) { - return __imag__(z); -} +double __devicelib_cimag(double __complex__ z) { return __imag__(z); } // __muldc3 // Returns: the product of a + ib and c + id DEVICE_EXTERN_C -double __complex__ __devicelib___muldc3(double __a, double __b, - double __c, double __d) { +double __complex__ __devicelib___muldc3(double __a, double __b, double __c, + double __d) { double __ac = __a * __c; double __bd = __b * __d; double __ad = __a * __d; @@ -75,11 +71,11 @@ double __complex__ __devicelib___muldc3(double __a, double __b, // __divdc3 // Returns: the quotient of (a + ib) / (c + id) DEVICE_EXTERN_C -double __complex__ __devicelib___divdc3(double __a, double __b, - double __c, double __d) { +double __complex__ __devicelib___divdc3(double __a, double __b, double __c, + double __d) { int __ilogbw = 0; - double __logbw = __spirv_ocl_logb(__spirv_ocl_fmax(__spirv_ocl_fabs(__c), - __spirv_ocl_fabs(__d))); + double __logbw = __spirv_ocl_logb( + __spirv_ocl_fmax(__spirv_ocl_fabs(__c), __spirv_ocl_fabs(__d))); if (__spirv_IsFinite(__logbw)) { __ilogbw = (int)__logbw; __c = __spirv_ocl_ldexp(__c, -__ilogbw); @@ -87,8 +83,10 @@ double __complex__ __devicelib___divdc3(double __a, double __b, } double __denom = __c * __c + __d * __d; double __complex__ z; - double z_real = __spirv_ocl_ldexp((__a*__c+__b*__d) / __denom, -__ilogbw); - double z_imag = __spirv_ocl_ldexp((__b*__c-__a*__d) / __denom, -__ilogbw); + double z_real = + __spirv_ocl_ldexp((__a * __c + __b * __d) / __denom, -__ilogbw); + double z_imag = + __spirv_ocl_ldexp((__b * __c - __a * __d) / __denom, -__ilogbw); z = CMPLX(z_real, z_imag); if (__spirv_IsNan(z_real) && __spirv_IsNan(z_imag)) { if ((__denom == 0.0) && (!__spirv_IsNan(__a) || !__spirv_IsNan(__b))) { @@ -96,16 +94,14 @@ double __complex__ __devicelib___divdc3(double __a, double __b, z_imag = __spirv_ocl_copysign((double)INFINITY, __c) * __b; z = CMPLX(z_real, z_imag); } else if ((__spirv_IsInf(__a) || __spirv_IsInf(__b)) && - __spirv_IsFinite(__c) && - __spirv_IsFinite(__d)) { + __spirv_IsFinite(__c) && __spirv_IsFinite(__d)) { __a = __spirv_ocl_copysign(__spirv_IsInf(__a) ? 1.0 : 0.0, __a); __b = __spirv_ocl_copysign(__spirv_IsInf(__b) ? 1.0 : 0.0, __b); z_real = INFINITY * (__a * __c + __b * __d); z_imag = INFINITY * (__b * __c - __a * __d); z = CMPLX(z_real, z_imag); - } else if (__spirv_IsInf(__logbw) && - __logbw > 0.0 && __spirv_IsFinite(__a) && - __spirv_IsFinite(__b)) { + } else if (__spirv_IsInf(__logbw) && __logbw > 0.0 && + __spirv_IsFinite(__a) && __spirv_IsFinite(__b)) { __c = __spirv_ocl_copysign(__spirv_IsInf(__c) ? 1.0 : 0.0, __c); __d = __spirv_ocl_copysign(__spirv_IsInf(__d) ? 1.0 : 0.0, __d); z_real = 0.0 * (__a * __c + __b * __d); @@ -118,14 +114,12 @@ double __complex__ __devicelib___divdc3(double __a, double __b, DEVICE_EXTERN_C double __devicelib_cabs(double __complex__ z) { - return __spirv_ocl_hypot(__devicelib_creal(z), - __devicelib_cimag(z)); + return __spirv_ocl_hypot(__devicelib_creal(z), __devicelib_cimag(z)); } DEVICE_EXTERN_C double __devicelib_carg(double __complex__ z) { - return __spirv_ocl_atan2(__devicelib_cimag(z), - __devicelib_creal(z)); + return __spirv_ocl_atan2(__devicelib_cimag(z), __devicelib_creal(z)); } DEVICE_EXTERN_C @@ -158,7 +152,6 @@ double __complex__ __devicelib_cexp(double __complex__ z) { (__e * __spirv_ocl_sin(z_imag))); } - DEVICE_EXTERN_C double __complex__ __devicelib_clog(double __complex__ z) { return CMPLX(__spirv_ocl_log(__devicelib_cabs(z)), __devicelib_carg(z)); @@ -168,10 +161,9 @@ DEVICE_EXTERN_C double __complex__ __devicelib_cpow(double __complex__ x, double __complex__ y) { double __complex__ t = __devicelib_clog(x); - double __complex__ w = __devicelib___muldc3(__devicelib_creal(y), - __devicelib_cimag(y), - __devicelib_creal(t), - __devicelib_cimag(t)); + double __complex__ w = + __devicelib___muldc3(__devicelib_creal(y), __devicelib_cimag(y), + __devicelib_creal(t), __devicelib_cimag(t)); return __devicelib_cexp(w); } @@ -199,17 +191,16 @@ double __complex__ __devicelib_cpolar(double rho, double theta) { } DEVICE_EXTERN_C -double __complex__ __devicelib_csqrt(double __complex__ z) -{ +double __complex__ __devicelib_csqrt(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); if (__spirv_IsInf(z_imag)) return CMPLX(INFINITY, z_imag); if (__spirv_IsInf(z_real)) { if (z_real > 0.0) - return CMPLX(z_real, - __spirv_IsNan(z_imag) ? z_imag - : __spirv_ocl_copysign(0.0, z_imag)); + return CMPLX(z_real, __spirv_IsNan(z_imag) + ? z_imag + : __spirv_ocl_copysign(0.0, z_imag)); return CMPLX(__spirv_IsNan(z_imag) ? z_imag : 0.0, __spirv_ocl_copysign(z_real, z_imag)); } @@ -263,28 +254,26 @@ double __complex__ __devicelib_ctanh(double __complex__ z) { double __d(__spirv_ocl_cosh(__2r) + __spirv_ocl_cos(__2i)); double __2rsh(__spirv_ocl_sinh(__2r)); if (__spirv_IsInf(__2rsh) && __spirv_IsInf(__d)) - return CMPLX(((__2rsh > 0.0) ? 1.0 : -1.0), - ((__2i > 0.0) ? 0.0 : -0.0)); - return CMPLX(__2rsh/__d, __spirv_ocl_sin(__2i)/__d); + return CMPLX(((__2rsh > 0.0) ? 1.0 : -1.0), ((__2i > 0.0) ? 0.0 : -0.0)); + return CMPLX(__2rsh / __d, __spirv_ocl_sin(__2i) / __d); } DEVICE_EXTERN_C double __complex__ __devicelib_csin(double __complex__ z) { - double __complex__ w = __devicelib_csinh(CMPLX(-__devicelib_cimag(z), - __devicelib_creal(z))); + double __complex__ w = + __devicelib_csinh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } DEVICE_EXTERN_C double __complex__ __devicelib_ccos(double __complex__ z) { - return __devicelib_ccosh(CMPLX(-__devicelib_cimag(z), - __devicelib_creal(z))); + return __devicelib_ccosh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); } DEVICE_EXTERN_C double __complex__ __devicelib_ctan(double __complex__ z) { - double __complex__ w = __devicelib_ctanh(CMPLX(-__devicelib_cimag(z), - __devicelib_creal(z))); + double __complex__ w = + __devicelib_ctanh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } @@ -292,8 +281,7 @@ DEVICE_EXTERN_C double __complex__ __sqr(double __complex__ z) { double z_real = __devicelib_creal(z); double z_imag = __devicelib_cimag(z); - return CMPLX((z_real + z_imag) * (z_real - z_imag), - 2.0 * z_real * z_imag); + return CMPLX((z_real + z_imag) * (z_real - z_imag), 2.0 * z_real * z_imag); } DEVICE_EXTERN_C @@ -319,11 +307,11 @@ double __complex__ __devicelib_cacos(double __complex__ z) { return CMPLX(z_real, z_real); } if (__spirv_IsInf(z_real)) - return CMPLX(__pi/2.0, -z_real); + return CMPLX(__pi / 2.0, -z_real); if (z_real == 0 && (z_imag == 0 || __spirv_IsNan(z_imag))) - return CMPLX(__pi/2.0, -z_imag); - double __complex__ w = __devicelib_clog(z + - __devicelib_csqrt(__sqr(z) - 1.0)); + return CMPLX(__pi / 2.0, -z_imag); + double __complex__ w = + __devicelib_clog(z + __devicelib_csqrt(__sqr(z) - 1.0)); if (__spirv_SignBitSet(z_imag)) return CMPLX(__spirv_ocl_fabs(__devicelib_cimagf(w)), __spirv_ocl_fabs(__devicelib_creal(w))); @@ -352,16 +340,17 @@ double __complex__ __devicelib_casinh(double __complex__ z) { } if (__spirv_IsInf(z_imag)) return CMPLX(__spirv_ocl_copysign(z_imag, z_real), - __spirv_ocl_copysign(__pi/2.0, z_imag)); - double __complex__ w = __devicelib_clog(z + __devicelib_csqrt(__sqr(z)+1.0)); + __spirv_ocl_copysign(__pi / 2.0, z_imag)); + double __complex__ w = + __devicelib_clog(z + __devicelib_csqrt(__sqr(z) + 1.0)); return CMPLX(__spirv_ocl_copysign(__devicelib_creal(w), z_real), __spirv_ocl_copysign(__devicelib_cimag(w), z_imag)); } DEVICE_EXTERN_C double __complex__ __devicelib_casin(double __complex__ z) { - double __complex__ w = __devicelib_casinh(CMPLX(-__devicelib_cimag(z), - __devicelib_creal(z))); + double __complex__ w = + __devicelib_casinh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } @@ -389,8 +378,10 @@ double __complex__ __devicelib_cacosh(double __complex__ z) { return CMPLX(z_real, z_real); } if (__spirv_IsInf(z_imag)) - return CMPLX(__spirv_ocl_fabs(z_imag), __spirv_ocl_copysign(__pi/2.0, z_imag)); - double __complex__ w = __devicelib_clog(z + __devicelib_csqrt(__sqr(z) - 1.0)); + return CMPLX(__spirv_ocl_fabs(z_imag), + __spirv_ocl_copysign(__pi / 2.0, z_imag)); + double __complex__ w = + __devicelib_clog(z + __devicelib_csqrt(__sqr(z) - 1.0)); return CMPLX(__spirv_ocl_copysign(__devicelib_creal(w), 0.0), __spirv_ocl_copysign(__devicelib_cimag(w), z_imag)); } @@ -402,7 +393,7 @@ double __complex__ __devicelib_catanh(double __complex__ z) { const double __pi(__spirv_ocl_atan2(+0.0, -0.0)); if (__spirv_IsInf(z_imag)) return CMPLX(__spirv_ocl_copysign(0.0, z_real), - __spirv_ocl_copysign(__pi/2.0, z_imag)); + __spirv_ocl_copysign(__pi / 2.0, z_imag)); if (__spirv_IsNan(z_imag)) { if (__spirv_IsInf(z_real) || z_real == 0) return CMPLX(__spirv_ocl_copysign(0.0, z_real), z_imag); @@ -412,16 +403,15 @@ double __complex__ __devicelib_catanh(double __complex__ z) { return CMPLX(z_real, z_real); if (__spirv_IsInf(z_real)) return CMPLX(__spirv_ocl_copysign(0.0, z_real), - __spirv_ocl_copysign(__pi/2.0, z_imag)); + __spirv_ocl_copysign(__pi / 2.0, z_imag)); if (__spirv_ocl_fabs(z_real) == 1.0 && z_imag == 0.0) return CMPLX(__spirv_ocl_copysign(static_cast(INFINITY), z_real), __spirv_ocl_copysign(0.0, z_imag)); double __complex__ t1 = 1.0 + z; double __complex__ t2 = 1.0 - z; - double __complex__ t3 = __devicelib___divdc3(__devicelib_creal(t1), - __devicelib_cimag(t1), - __devicelib_creal(t2), - __devicelib_cimag(t2)); + double __complex__ t3 = + __devicelib___divdc3(__devicelib_creal(t1), __devicelib_cimag(t1), + __devicelib_creal(t2), __devicelib_cimag(t2)); double __complex__ w = __devicelib_clog(t3) / 2.0; return CMPLX(__spirv_ocl_copysign(__devicelib_creal(w), z_real), __spirv_ocl_copysign(__devicelib_cimag(w), z_imag)); @@ -429,7 +419,7 @@ double __complex__ __devicelib_catanh(double __complex__ z) { DEVICE_EXTERN_C double __complex__ __devicelib_catan(double __complex__ z) { - double __complex__ w = __devicelib_catanh(CMPLX(-__devicelib_cimag(z), - __devicelib_creal(z))); + double __complex__ w = + __devicelib_catanh(CMPLX(-__devicelib_cimag(z), __devicelib_creal(z))); return CMPLX(__devicelib_cimag(w), -__devicelib_creal(w)); } diff --git a/libdevice/fallback-complex.cpp b/libdevice/fallback-complex.cpp index 5e40fc9321567..e83856dd469cf 100644 --- a/libdevice/fallback-complex.cpp +++ b/libdevice/fallback-complex.cpp @@ -1,4 +1,4 @@ -//==----- fallback-complex.cpp - complex math functions for SPIR-V device ----==// +//==----- fallback-complex.cpp - complex math functions for SPIR-V device --==// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -6,25 +6,21 @@ // //===----------------------------------------------------------------------===// -#include "device_math.h" #include "device_complex.h" +#include "device_math.h" #include DEVICE_EXTERN_C -float __devicelib_crealf(float __complex__ z) { - return __real__(z); -} +float __devicelib_crealf(float __complex__ z) { return __real__(z); } DEVICE_EXTERN_C -float __devicelib_cimagf(float __complex__ z) { - return __imag__(z); -} +float __devicelib_cimagf(float __complex__ z) { return __imag__(z); } // __mulsc3 // Returns: the product of a + ib and c + id DEVICE_EXTERN_C -float __complex__ __devicelib___mulsc3(float __a, float __b, - float __c, float __d) { +float __complex__ __devicelib___mulsc3(float __a, float __b, float __c, + float __d) { float __ac = __a * __c; float __bd = __b * __d; float __ad = __a * __d; @@ -77,11 +73,11 @@ float __complex__ __devicelib___mulsc3(float __a, float __b, // FIXME: divsc3/divdc3 have overflow issue when dealing with large number. // And this overflow issue is from libc++/compiler-rt's implementation. DEVICE_EXTERN_C -float __complex__ __devicelib___divsc3(float __a, float __b, - float __c, float __d) { +float __complex__ __devicelib___divsc3(float __a, float __b, float __c, + float __d) { int __ilogbw = 0; - float __logbw = __spirv_ocl_logb(__spirv_ocl_fmax(__spirv_ocl_fabs(__c), - __spirv_ocl_fabs(__d))); + float __logbw = __spirv_ocl_logb( + __spirv_ocl_fmax(__spirv_ocl_fabs(__c), __spirv_ocl_fabs(__d))); if (__spirv_IsFinite(__logbw)) { __ilogbw = (int)__logbw; __c = __spirv_ocl_ldexp(__c, -__ilogbw); @@ -89,8 +85,10 @@ float __complex__ __devicelib___divsc3(float __a, float __b, } float __denom = __c * __c + __d * __d; float __complex__ z; - float z_real = __spirv_ocl_ldexp((__a *__c+__b*__d) / __denom, -__ilogbw); - float z_imag = __spirv_ocl_ldexp((__b *__c-__a*__d) / __denom, -__ilogbw); + float z_real = + __spirv_ocl_ldexp((__a * __c + __b * __d) / __denom, -__ilogbw); + float z_imag = + __spirv_ocl_ldexp((__b * __c - __a * __d) / __denom, -__ilogbw); z = CMPLXF(z_real, z_imag); if (__spirv_IsNan(z_real) && __spirv_IsNan(z_imag)) { if ((__denom == 0.0f) && (!__spirv_IsNan(__a) || !__spirv_IsNan(__b))) { @@ -98,16 +96,14 @@ float __complex__ __devicelib___divsc3(float __a, float __b, z_imag = __spirv_ocl_copysign(INFINITY, __c) * __b; z = CMPLXF(z_real, z_imag); } else if ((__spirv_IsInf(__a) || __spirv_IsInf(__b)) && - __spirv_IsFinite(__c) && - __spirv_IsFinite(__d)) { + __spirv_IsFinite(__c) && __spirv_IsFinite(__d)) { __a = __spirv_ocl_copysign(__spirv_IsInf(__a) ? 1.0f : 0.0f, __a); __b = __spirv_ocl_copysign(__spirv_IsInf(__b) ? 1.0f : 0.0f, __b); z_real = INFINITY * (__a * __c + __b * __d); z_imag = INFINITY * (__b * __c - __a * __d); z = CMPLXF(z_real, z_imag); } else if (__spirv_IsInf(__logbw) && __logbw > 0.0f && - __spirv_IsFinite(__a) && - __spirv_IsFinite(__b)) { + __spirv_IsFinite(__a) && __spirv_IsFinite(__b)) { __c = __spirv_ocl_copysign(__spirv_IsInf(__c) ? 1.0f : 0.0f, __c); __d = __spirv_ocl_copysign(__spirv_IsInf(__d) ? 1.0f : 0.0f, __d); z_real = 0.0f * (__a * __c + __b * __d); @@ -120,14 +116,12 @@ float __complex__ __devicelib___divsc3(float __a, float __b, DEVICE_EXTERN_C float __devicelib_cargf(float __complex__ z) { - return __spirv_ocl_atan2(__devicelib_cimagf(z), - __devicelib_crealf(z)); + return __spirv_ocl_atan2(__devicelib_cimagf(z), __devicelib_crealf(z)); } DEVICE_EXTERN_C float __devicelib_cabsf(float __complex__ z) { - return __spirv_ocl_hypot(__devicelib_crealf(z), - __devicelib_cimagf(z)); + return __spirv_ocl_hypot(__devicelib_crealf(z), __devicelib_cimagf(z)); } DEVICE_EXTERN_C @@ -166,13 +160,11 @@ float __complex__ __devicelib_clogf(float __complex__ z) { } DEVICE_EXTERN_C -float __complex__ __devicelib_cpowf(float __complex__ x, - float __complex__ y) { +float __complex__ __devicelib_cpowf(float __complex__ x, float __complex__ y) { float __complex__ t = __devicelib_clogf(x); - float __complex__ w = __devicelib___mulsc3(__devicelib_crealf(y), - __devicelib_cimagf(y), - __devicelib_crealf(t), - __devicelib_cimagf(t)); + float __complex__ w = + __devicelib___mulsc3(__devicelib_crealf(y), __devicelib_cimagf(y), + __devicelib_crealf(t), __devicelib_cimagf(t)); return __devicelib_cexpf(w); } @@ -200,17 +192,16 @@ float __complex__ __devicelib_cpolarf(float rho, float theta) { } DEVICE_EXTERN_C -float __complex__ __devicelib_csqrtf(float __complex__ z) -{ +float __complex__ __devicelib_csqrtf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); if (__spirv_IsInf(z_imag)) return CMPLXF(INFINITY, z_imag); if (__spirv_IsInf(z_real)) { if (z_real > 0.0f) - return CMPLXF(z_real, - __spirv_IsNan(z_imag) ? z_imag - : __spirv_ocl_copysign(0.0f, z_imag)); + return CMPLXF(z_real, __spirv_IsNan(z_imag) + ? z_imag + : __spirv_ocl_copysign(0.0f, z_imag)); return CMPLXF(__spirv_IsNan(z_imag) ? z_imag : 0.0f, __spirv_ocl_copysign(z_real, z_imag)); } @@ -255,8 +246,8 @@ float __complex__ __devicelib_ctanhf(float __complex__ z) { if (__spirv_IsInf(z_real)) { if (!__spirv_IsFinite(z_imag)) return CMPLXF(1.0f, 0.0f); - return CMPLXF(1.0f, __spirv_ocl_copysign(0.0f, - __spirv_ocl_sin(2.0f * z_imag))); + return CMPLXF(1.0f, + __spirv_ocl_copysign(0.0f, __spirv_ocl_sin(2.0f * z_imag))); } if (__spirv_IsNan(z_real) && z_imag == 0) return z; @@ -267,26 +258,26 @@ float __complex__ __devicelib_ctanhf(float __complex__ z) { if (__spirv_IsInf(__2rsh) && __spirv_IsInf(__d)) return CMPLXF(((__2rsh > 0.0f) ? 1.0f : -1.0f), ((__2i > 0.0f) ? 0.0f : -0.0f)); - return CMPLXF(__2rsh/__d, __spirv_ocl_sin(__2i)/__d); + return CMPLXF(__2rsh / __d, __spirv_ocl_sin(__2i) / __d); } DEVICE_EXTERN_C float __complex__ __devicelib_csinf(float __complex__ z) { - float __complex__ w = __devicelib_csinhf(CMPLXF(-__devicelib_cimagf(z), - __devicelib_crealf(z))); + float __complex__ w = + __devicelib_csinhf(CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } DEVICE_EXTERN_C float __complex__ __devicelib_ccosf(float __complex__ z) { - return __devicelib_ccoshf(CMPLXF(-__devicelib_cimagf(z), - __devicelib_crealf(z))); + return __devicelib_ccoshf( + CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); } DEVICE_EXTERN_C float __complex__ __devicelib_ctanf(float __complex__ z) { - float __complex__ w = __devicelib_ctanhf(CMPLXF(-__devicelib_cimagf(z), - __devicelib_crealf(z))); + float __complex__ w = + __devicelib_ctanhf(CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } @@ -294,8 +285,7 @@ DEVICE_EXTERN_C float __complex__ __sqrf(float __complex__ z) { float z_real = __devicelib_crealf(z); float z_imag = __devicelib_cimagf(z); - return CMPLXF((z_real + z_imag) * (z_real - z_imag), - 2.0 * z_real * z_imag); + return CMPLXF((z_real + z_imag) * (z_real - z_imag), 2.0 * z_real * z_imag); } DEVICE_EXTERN_C @@ -321,11 +311,11 @@ float __complex__ __devicelib_cacosf(float __complex__ z) { return CMPLXF(z_real, z_real); } if (__spirv_IsInf(z_imag)) - return CMPLXF(__pi/2.0f, -z_imag); + return CMPLXF(__pi / 2.0f, -z_imag); if (z_real == 0 && (z_imag == 0 || __spirv_IsNan(z_imag))) - return CMPLXF(__pi/2.0f, -z_imag); - float __complex__ w = __devicelib_clogf(z + - __devicelib_csqrtf(__sqrf(z) - 1.0f)); + return CMPLXF(__pi / 2.0f, -z_imag); + float __complex__ w = + __devicelib_clogf(z + __devicelib_csqrtf(__sqrf(z) - 1.0f)); if (__spirv_SignBitSet(z_imag)) return CMPLXF(__spirv_ocl_fabs(__devicelib_cimagf(w)), __spirv_ocl_fabs(__devicelib_crealf(w))); @@ -354,17 +344,17 @@ float __complex__ __devicelib_casinhf(float __complex__ z) { } if (__spirv_IsInf(z_imag)) return CMPLXF(__spirv_ocl_copysign(z_imag, z_real), - __spirv_ocl_copysign(__pi/2.0f, z_imag)); - float __complex__ w = __devicelib_clogf(z + - __devicelib_csqrtf(__sqrf(z) + 1.0f)); + __spirv_ocl_copysign(__pi / 2.0f, z_imag)); + float __complex__ w = + __devicelib_clogf(z + __devicelib_csqrtf(__sqrf(z) + 1.0f)); return CMPLXF(__spirv_ocl_copysign(__devicelib_crealf(w), z_real), __spirv_ocl_copysign(__devicelib_cimagf(w), z_imag)); } DEVICE_EXTERN_C float __complex__ __devicelib_casinf(float __complex__ z) { - float __complex__ w = __devicelib_casinhf(CMPLXF(-__devicelib_cimagf(z), - __devicelib_crealf(z))); + float __complex__ w = __devicelib_casinhf( + CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } @@ -392,8 +382,10 @@ float __complex__ __devicelib_cacoshf(float __complex__ z) { return CMPLXF(z_real, z_real); } if (__spirv_IsInf(z_imag)) - return CMPLXF(__spirv_ocl_fabs(z_imag), __spirv_ocl_copysign(__pi/2.0f, z_imag)); - float __complex__ w = __devicelib_clogf(z + __devicelib_csqrtf(__sqrf(z) - 1.0f)); + return CMPLXF(__spirv_ocl_fabs(z_imag), + __spirv_ocl_copysign(__pi / 2.0f, z_imag)); + float __complex__ w = + __devicelib_clogf(z + __devicelib_csqrtf(__sqrf(z) - 1.0f)); return CMPLXF(__spirv_ocl_copysign(__devicelib_crealf(w), 0.0f), __spirv_ocl_copysign(__devicelib_cimagf(w), z_imag)); } @@ -405,7 +397,7 @@ float __complex__ __devicelib_catanhf(float __complex__ z) { const float __pi(__spirv_ocl_atan2(+0.0f, -0.0f)); if (__spirv_IsInf(z_imag)) return CMPLXF(__spirv_ocl_copysign(0.0f, z_real), - __spirv_ocl_copysign(__pi/2.0f, z_imag)); + __spirv_ocl_copysign(__pi / 2.0f, z_imag)); if (__spirv_IsNan(z_imag)) { if (__spirv_IsInf(z_real) || z_real == 0) return CMPLXF(__spirv_ocl_copysign(0.0f, z_real), z_imag); @@ -415,16 +407,15 @@ float __complex__ __devicelib_catanhf(float __complex__ z) { return CMPLXF(z_real, z_real); if (__spirv_IsInf(z_real)) return CMPLXF(__spirv_ocl_copysign(0.0f, z_real), - __spirv_ocl_copysign(__pi/2.0f, z_imag)); + __spirv_ocl_copysign(__pi / 2.0f, z_imag)); if (__spirv_ocl_fabs(z_real) == 1.0f && z_imag == 0.0f) return CMPLXF(__spirv_ocl_copysign(INFINITY, z_real), __spirv_ocl_copysign(0.0f, z_imag)); float __complex__ t1 = 1.0f + z; float __complex__ t2 = 1.0f - z; - float __complex__ t3 = __devicelib___divsc3(__devicelib_crealf(t1), - __devicelib_cimagf(t1), - __devicelib_crealf(t2), - __devicelib_cimagf(t2)); + float __complex__ t3 = + __devicelib___divsc3(__devicelib_crealf(t1), __devicelib_cimagf(t1), + __devicelib_crealf(t2), __devicelib_cimagf(t2)); float __complex__ w = __devicelib_clogf(t3) / 2.0f; return CMPLXF(__spirv_ocl_copysign(__devicelib_crealf(w), z_real), __spirv_ocl_copysign(__devicelib_cimagf(w), z_imag)); @@ -432,7 +423,7 @@ float __complex__ __devicelib_catanhf(float __complex__ z) { DEVICE_EXTERN_C float __complex__ __devicelib_catanf(float __complex__ z) { - float __complex__ w = __devicelib_catanhf(CMPLXF(-__devicelib_cimagf(z), - __devicelib_crealf(z))); + float __complex__ w = __devicelib_catanhf( + CMPLXF(-__devicelib_cimagf(z), __devicelib_crealf(z))); return CMPLXF(__devicelib_cimagf(w), -__devicelib_crealf(w)); } diff --git a/libdevice/glibc_wrapper.cpp b/libdevice/glibc_wrapper.cpp index b645c43431b90..1d0d1e4fa694d 100644 --- a/libdevice/glibc_wrapper.cpp +++ b/libdevice/glibc_wrapper.cpp @@ -10,13 +10,11 @@ #include "wrapper.h" DEVICE_EXTERN_C -void __assert_fail(const char *expr, const char *file, - unsigned int line, const char *func) { - __devicelib_assert_fail(expr, file, line, func, - __spirv_GlobalInvocationId_x(), - __spirv_GlobalInvocationId_y(), - __spirv_GlobalInvocationId_z(), - __spirv_LocalInvocationId_x(), - __spirv_LocalInvocationId_y(), - __spirv_LocalInvocationId_z()); +void __assert_fail(const char *expr, const char *file, unsigned int line, + const char *func) { + __devicelib_assert_fail( + expr, file, line, func, __spirv_GlobalInvocationId_x(), + __spirv_GlobalInvocationId_y(), __spirv_GlobalInvocationId_z(), + __spirv_LocalInvocationId_x(), __spirv_LocalInvocationId_y(), + __spirv_LocalInvocationId_z()); } diff --git a/libdevice/msvc_wrapper.cpp b/libdevice/msvc_wrapper.cpp index ca23996b2e9a4..61f357d8899fd 100644 --- a/libdevice/msvc_wrapper.cpp +++ b/libdevice/msvc_wrapper.cpp @@ -31,11 +31,9 @@ void _wassert(const wchar_t *wexpr, const wchar_t *wfile, unsigned line) { char expr[256]; __truncate_wchar_char_str(wexpr, expr, sizeof(expr)); - __devicelib_assert_fail(expr, file, line, /*func=*/nullptr, - __spirv_GlobalInvocationId_x(), - __spirv_GlobalInvocationId_y(), - __spirv_GlobalInvocationId_z(), - __spirv_LocalInvocationId_x(), - __spirv_LocalInvocationId_y(), - __spirv_LocalInvocationId_z()); + __devicelib_assert_fail( + expr, file, line, /*func=*/nullptr, __spirv_GlobalInvocationId_x(), + __spirv_GlobalInvocationId_y(), __spirv_GlobalInvocationId_z(), + __spirv_LocalInvocationId_x(), __spirv_LocalInvocationId_y(), + __spirv_LocalInvocationId_z()); } diff --git a/libdevice/wrapper.h b/libdevice/wrapper.h index 945acbe0d5e26..6e08fa07b2328 100644 --- a/libdevice/wrapper.h +++ b/libdevice/wrapper.h @@ -9,9 +9,9 @@ #ifndef __LIBDEVICE_WRAPPER_H__ #define __LIBDEVICE_WRAPPER_H__ +#include "device.h" #include #include -#include "device.h" DEVICE_EXTERNAL size_t __spirv_GlobalInvocationId_x(); DEVICE_EXTERNAL size_t __spirv_GlobalInvocationId_y(); @@ -22,10 +22,9 @@ DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_y(); DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_z(); DEVICE_EXTERN_C -void __devicelib_assert_fail( - const char *expr, const char *file, - int32_t line, const char *func, - uint64_t gid0, uint64_t gid1, uint64_t gid2, - uint64_t lid0, uint64_t lid1, uint64_t lid2); +void __devicelib_assert_fail(const char *expr, const char *file, int32_t line, + const char *func, uint64_t gid0, uint64_t gid1, + uint64_t gid2, uint64_t lid0, uint64_t lid1, + uint64_t lid2); #endif // __LIBDEVICE_WRAPPER_H__ From 0fc893385f7259301e81a64ec82950cb9c9a6cb8 Mon Sep 17 00:00:00 2001 From: Vyacheslav Zakharin Date: Tue, 17 Mar 2020 16:17:26 -0700 Subject: [PATCH 6/6] Extract SYCL build commands into a separate CMake module. Signed-off-by: Vyacheslav Zakharin --- libdevice/CMakeLists.txt | 165 +------------------- libdevice/cmake/modules/SYCLLibdevice.cmake | 163 +++++++++++++++++++ libdevice/fallback-cassert.cpp | 2 - libdevice/wrapper.h | 3 + 4 files changed, 171 insertions(+), 162 deletions(-) create mode 100644 libdevice/cmake/modules/SYCLLibdevice.cmake diff --git a/libdevice/CMakeLists.txt b/libdevice/CMakeLists.txt index 82cb24a5e35bc..d07ed3e5eaa88 100644 --- a/libdevice/CMakeLists.txt +++ b/libdevice/CMakeLists.txt @@ -1,165 +1,10 @@ # Utility project providing various functionalities for SPIR-V devices # without native support of these functionalities. -if (WIN32) - set(binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") -else() - set(binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") -endif() - -set(clang $) - -if (sycl IN_LIST LLVM_ENABLE_PROJECTS) - set(compile_opts - # suppress an error about SYCL_EXTERNAL being used for - # a function with a raw pointer parameter. - -Wno-sycl-strict - # Disable warnings for the host compilation, where - # we declare all functions as 'static'. - -Wno-undefined-internal - ) - - if (WIN32) - set(devicelib-obj-file ${binary_dir}/libsycl-msvc.o) - add_custom_command(OUTPUT ${devicelib-obj-file} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/msvc_wrapper.cpp - -o ${devicelib-obj-file} - MAIN_DEPENDENCY msvc_wrapper.cpp - DEPENDS wrapper.h device.h clang - VERBATIM) - else() - set(devicelib-obj-file ${binary_dir}/libsycl-glibc.o) - add_custom_command(OUTPUT ${devicelib-obj-file} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/glibc_wrapper.cpp - -o ${devicelib-obj-file} - MAIN_DEPENDENCY glibc_wrapper.cpp - DEPENDS wrapper.h device.h clang - VERBATIM) - endif() - - set(devicelib-obj-complex ${binary_dir}/libsycl-complex.o) - add_custom_command(OUTPUT ${devicelib-obj-complex} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper.cpp - -o ${devicelib-obj-complex} - MAIN_DEPENDENCY complex_wrapper.cpp - DEPENDS device_complex.h device.h clang - VERBATIM) - - set(devicelib-obj-complex-fp64 ${binary_dir}/libsycl-complex-fp64.o) - add_custom_command(OUTPUT ${devicelib-obj-complex-fp64} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper_fp64.cpp - -o ${devicelib-obj-complex-fp64} - MAIN_DEPENDENCY complex_wrapper_fp64.cpp - DEPENDS device_complex.h device.h clang - VERBATIM) - - set(devicelib-obj-cmath ${binary_dir}/libsycl-cmath.o) - add_custom_command(OUTPUT ${devicelib-obj-cmath} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper.cpp - -o ${devicelib-obj-cmath} - MAIN_DEPENDENCY cmath_wrapper.cpp - DEPENDS device_math.h device.h clang - VERBATIM) - - set(devicelib-obj-cmath-fp64 ${binary_dir}/libsycl-cmath-fp64.o) - add_custom_command(OUTPUT ${devicelib-obj-cmath-fp64} - COMMAND ${clang} -fsycl -c - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper_fp64.cpp - -o ${devicelib-obj-cmath-fp64} - MAIN_DEPENDENCY cmath_wrapper_fp64.cpp - DEPENDS device_math.h device.h clang - VERBATIM) - - add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cassert.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cassert.cpp - -o ${binary_dir}/libsycl-fallback-cassert.spv - MAIN_DEPENDENCY fallback-cassert.cpp - DEPENDS wrapper.h device.h clang llvm-spirv - VERBATIM) - - add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex.cpp - -o ${binary_dir}/libsycl-fallback-complex.spv - MAIN_DEPENDENCY fallback-complex.cpp - DEPENDS device_math.h device_complex.h device.h clang llvm-spirv - VERBATIM) - - add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex-fp64.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex-fp64.cpp - -o ${binary_dir}/libsycl-fallback-complex-fp64.spv - MAIN_DEPENDENCY fallback-complex-fp64.cpp - DEPENDS device_math.h device_complex.h device.h clang llvm-spirv - VERBATIM) - - add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath.cpp - -o ${binary_dir}/libsycl-fallback-cmath.spv - MAIN_DEPENDENCY fallback-cmath.cpp - DEPENDS device_math.h device.h clang llvm-spirv - VERBATIM) - - add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath-fp64.spv - COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode - ${compile_opts} - ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath-fp64.cpp - -o ${binary_dir}/libsycl-fallback-cmath-fp64.spv - MAIN_DEPENDENCY fallback-cmath-fp64.cpp - DEPENDS device_math.h device.h clang llvm-spirv - VERBATIM) - - add_custom_target(libsycldevice-obj DEPENDS - ${devicelib-obj-file} - ${devicelib-obj-complex} - ${devicelib-obj-complex-fp64} - ${devicelib-obj-cmath} - ${devicelib-obj-cmath-fp64} - ) - add_custom_target(libsycldevice-spv DEPENDS - ${binary_dir}/libsycl-fallback-cassert.spv - ${binary_dir}/libsycl-fallback-complex.spv - ${binary_dir}/libsycl-fallback-complex-fp64.spv - ${binary_dir}/libsycl-fallback-cmath.spv - ${binary_dir}/libsycl-fallback-cmath-fp64.spv +set(CMAKE_MODULE_PATH + ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ) - add_custom_target(libsycldevice DEPENDS libsycldevice-obj libsycldevice-spv) - - # Place device libraries near the libsycl.so library in an install - # directory as well - if (WIN32) - set(install_dest bin) - else() - set(install_dest lib${LLVM_LIBDIR_SUFFIX}) - endif() - install(FILES ${devicelib-obj-file} - ${binary_dir}/libsycl-fallback-cassert.spv - ${devicelib-obj-complex} - ${binary_dir}/libsycl-fallback-complex.spv - ${devicelib-obj-complex-fp64} - ${binary_dir}/libsycl-fallback-complex-fp64.spv - ${devicelib-obj-cmath} - ${binary_dir}/libsycl-fallback-cmath.spv - ${devicelib-obj-cmath-fp64} - ${binary_dir}/libsycl-fallback-cmath-fp64.spv - DESTINATION ${install_dest} - COMPONENT libsycldevice) -endif(sycl IN_LIST LLVM_ENABLE_PROJECTS) +# Build libdevice for SYCL. +include(SYCLLibdevice) diff --git a/libdevice/cmake/modules/SYCLLibdevice.cmake b/libdevice/cmake/modules/SYCLLibdevice.cmake new file mode 100644 index 0000000000000..847cac46f4a42 --- /dev/null +++ b/libdevice/cmake/modules/SYCLLibdevice.cmake @@ -0,0 +1,163 @@ +if (WIN32) + set(binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") +else() + set(binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") +endif() + +set(clang $) + +set(compile_opts + # suppress an error about SYCL_EXTERNAL being used for + # a function with a raw pointer parameter. + -Wno-sycl-strict + # Disable warnings for the host compilation, where + # we declare all functions as 'static'. + -Wno-undefined-internal + # Force definition of CL_SYCL_LANGUAGE_VERSION, as long as + # SYCL specific code is guarded by it. + -sycl-std=2017 + ) + +if (WIN32) + set(devicelib-obj-file ${binary_dir}/libsycl-msvc.o) + add_custom_command(OUTPUT ${devicelib-obj-file} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/msvc_wrapper.cpp + -o ${devicelib-obj-file} + MAIN_DEPENDENCY msvc_wrapper.cpp + DEPENDS wrapper.h device.h clang + VERBATIM) +else() + set(devicelib-obj-file ${binary_dir}/libsycl-glibc.o) + add_custom_command(OUTPUT ${devicelib-obj-file} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/glibc_wrapper.cpp + -o ${devicelib-obj-file} + MAIN_DEPENDENCY glibc_wrapper.cpp + DEPENDS wrapper.h device.h clang + VERBATIM) +endif() + +set(devicelib-obj-complex ${binary_dir}/libsycl-complex.o) +add_custom_command(OUTPUT ${devicelib-obj-complex} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper.cpp + -o ${devicelib-obj-complex} + MAIN_DEPENDENCY complex_wrapper.cpp + DEPENDS device_complex.h device.h clang + VERBATIM) + +set(devicelib-obj-complex-fp64 ${binary_dir}/libsycl-complex-fp64.o) +add_custom_command(OUTPUT ${devicelib-obj-complex-fp64} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper_fp64.cpp + -o ${devicelib-obj-complex-fp64} + MAIN_DEPENDENCY complex_wrapper_fp64.cpp + DEPENDS device_complex.h device.h clang + VERBATIM) + +set(devicelib-obj-cmath ${binary_dir}/libsycl-cmath.o) +add_custom_command(OUTPUT ${devicelib-obj-cmath} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper.cpp + -o ${devicelib-obj-cmath} + MAIN_DEPENDENCY cmath_wrapper.cpp + DEPENDS device_math.h device.h clang + VERBATIM) + +set(devicelib-obj-cmath-fp64 ${binary_dir}/libsycl-cmath-fp64.o) +add_custom_command(OUTPUT ${devicelib-obj-cmath-fp64} + COMMAND ${clang} -fsycl -c + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper_fp64.cpp + -o ${devicelib-obj-cmath-fp64} + MAIN_DEPENDENCY cmath_wrapper_fp64.cpp + DEPENDS device_math.h device.h clang + VERBATIM) + +add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cassert.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cassert.cpp + -o ${binary_dir}/libsycl-fallback-cassert.spv + MAIN_DEPENDENCY fallback-cassert.cpp + DEPENDS wrapper.h device.h clang llvm-spirv + VERBATIM) + +add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex.cpp + -o ${binary_dir}/libsycl-fallback-complex.spv + MAIN_DEPENDENCY fallback-complex.cpp + DEPENDS device_math.h device_complex.h device.h clang llvm-spirv + VERBATIM) + +add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-complex-fp64.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex-fp64.cpp + -o ${binary_dir}/libsycl-fallback-complex-fp64.spv + MAIN_DEPENDENCY fallback-complex-fp64.cpp + DEPENDS device_math.h device_complex.h device.h clang llvm-spirv + VERBATIM) + +add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath.cpp + -o ${binary_dir}/libsycl-fallback-cmath.spv + MAIN_DEPENDENCY fallback-cmath.cpp + DEPENDS device_math.h device.h clang llvm-spirv + VERBATIM) + +add_custom_command(OUTPUT ${binary_dir}/libsycl-fallback-cmath-fp64.spv + COMMAND ${clang} -S -fsycl-device-only -fno-sycl-use-bitcode + ${compile_opts} + ${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath-fp64.cpp + -o ${binary_dir}/libsycl-fallback-cmath-fp64.spv + MAIN_DEPENDENCY fallback-cmath-fp64.cpp + DEPENDS device_math.h device.h clang llvm-spirv + VERBATIM) + +add_custom_target(libsycldevice-obj DEPENDS + ${devicelib-obj-file} + ${devicelib-obj-complex} + ${devicelib-obj-complex-fp64} + ${devicelib-obj-cmath} + ${devicelib-obj-cmath-fp64} +) +add_custom_target(libsycldevice-spv DEPENDS + ${binary_dir}/libsycl-fallback-cassert.spv + ${binary_dir}/libsycl-fallback-complex.spv + ${binary_dir}/libsycl-fallback-complex-fp64.spv + ${binary_dir}/libsycl-fallback-cmath.spv + ${binary_dir}/libsycl-fallback-cmath-fp64.spv +) +add_custom_target(libsycldevice DEPENDS libsycldevice-obj libsycldevice-spv) + +# Place device libraries near the libsycl.so library in an install +# directory as well +if (WIN32) + set(install_dest bin) +else() + set(install_dest lib${LLVM_LIBDIR_SUFFIX}) +endif() + +install(FILES ${devicelib-obj-file} + ${binary_dir}/libsycl-fallback-cassert.spv + ${devicelib-obj-complex} + ${binary_dir}/libsycl-fallback-complex.spv + ${devicelib-obj-complex-fp64} + ${binary_dir}/libsycl-fallback-complex-fp64.spv + ${devicelib-obj-cmath} + ${binary_dir}/libsycl-fallback-cmath.spv + ${devicelib-obj-cmath-fp64} + ${binary_dir}/libsycl-fallback-cmath-fp64.spv + DESTINATION ${install_dest} + COMPONENT libsycldevice) diff --git a/libdevice/fallback-cassert.cpp b/libdevice/fallback-cassert.cpp index bb3849aaf4e49..9225189b1f992 100644 --- a/libdevice/fallback-cassert.cpp +++ b/libdevice/fallback-cassert.cpp @@ -8,8 +8,6 @@ #include "wrapper.h" -#include - static const __attribute__((opencl_constant)) char assert_fmt[] = "%s:%d: %s: global id: [%lu,%lu,%lu], local id: [%lu,%lu,%lu] " "Assertion `%s` failed.\n"; diff --git a/libdevice/wrapper.h b/libdevice/wrapper.h index 6e08fa07b2328..e91a47d5fd3c3 100644 --- a/libdevice/wrapper.h +++ b/libdevice/wrapper.h @@ -21,6 +21,9 @@ DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_x(); DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_y(); DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_z(); +DEVICE_EXTERNAL int +__spirv_ocl_printf(const __attribute__((opencl_constant)) char *fmt, ...); + DEVICE_EXTERN_C void __devicelib_assert_fail(const char *expr, const char *file, int32_t line, const char *func, uint64_t gid0, uint64_t gid1,