| /*===---- __clang_openmp_math.h - OpenMP target math support ---------------=== |
| * |
| * 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 |
| * |
| *===-----------------------------------------------------------------------=== |
| */ |
| |
| #if defined(__NVPTX__) && defined(_OPENMP) |
| /// TODO: |
| /// We are currently reusing the functionality of the Clang-CUDA code path |
| /// as an alternative to the host declarations provided by math.h and cmath. |
| /// This is suboptimal. |
| /// |
| /// We should instead declare the device functions in a similar way, e.g., |
| /// through OpenMP 5.0 variants, and afterwards populate the module with the |
| /// host declarations by unconditionally including the host math.h or cmath, |
| /// respectively. This is actually what the Clang-CUDA code path does, using |
| /// __device__ instead of variants to avoid redeclarations and get the desired |
| /// overload resolution. |
| |
| #define __CUDA__ |
| |
| #if defined(__cplusplus) |
| #include <__clang_cuda_cmath.h> |
| #endif |
| |
| #undef __CUDA__ |
| |
| /// Magic macro for stopping the math.h/cmath host header from being included. |
| #define __CLANG_NO_HOST_MATH__ |
| |
| #endif |
| |