blob: 2f7e5c3ead5527405525d38cb3d98582686e1799 [file] [log] [blame]
/*===---- __clang_openmp_math.h - OpenMP target math support ---------------===
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
* See 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_math_forward_declares.h>
#include <stdlib.h>
#include <stddef.h>
/// Include declarations for libdevice functions.
#include <__clang_cuda_libdevice_declares.h>
/// Provide definitions for these functions.
#include <__clang_cuda_device_functions.h>
#if defined(__cplusplus)
#include <__clang_cuda_cmath.h>
#undef __CUDA__
/// Magic macro for stopping the math.h/cmath host header from being included.
#define __CLANG_NO_HOST_MATH__