1/*===---- __clang_hip_runtime_wrapper.h - HIP runtime support ---------------=== 2 * 3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 * See https://llvm.org/LICENSE.txt for license information. 5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 * 7 *===-----------------------------------------------------------------------=== 8 */ 9 10/* 11 * WARNING: This header is intended to be directly -include'd by 12 * the compiler and is not supposed to be included by users. 13 * 14 */ 15 16#ifndef __CLANG_HIP_RUNTIME_WRAPPER_H__ 17#define __CLANG_HIP_RUNTIME_WRAPPER_H__ 18 19#if __HIP__ 20 21#if !defined(__HIPCC_RTC__) 22#include <cmath> 23#include <cstdlib> 24#include <stdlib.h> 25#else 26typedef __SIZE_TYPE__ size_t; 27// Define macros which are needed to declare HIP device API's without standard 28// C/C++ headers. This is for readability so that these API's can be written 29// the same way as non-hipRTC use case. These macros need to be popped so that 30// they do not pollute users' name space. 31#pragma push_macro("NULL") 32#pragma push_macro("uint32_t") 33#pragma push_macro("uint64_t") 34#pragma push_macro("CHAR_BIT") 35#pragma push_macro("INT_MAX") 36#define NULL (void *)0 37#define uint32_t __UINT32_TYPE__ 38#define uint64_t __UINT64_TYPE__ 39#define CHAR_BIT __CHAR_BIT__ 40#define INT_MAX __INTMAX_MAX__ 41#endif // __HIPCC_RTC__ 42 43#define __host__ __attribute__((host)) 44#define __device__ __attribute__((device)) 45#define __global__ __attribute__((global)) 46#define __shared__ __attribute__((shared)) 47#define __constant__ __attribute__((constant)) 48#define __managed__ __attribute__((managed)) 49 50#if !defined(__cplusplus) || __cplusplus < 201103L 51 #define nullptr NULL; 52#endif 53 54#if __HIP_ENABLE_DEVICE_MALLOC__ 55extern "C" __device__ void *__hip_malloc(size_t __size); 56extern "C" __device__ void *__hip_free(void *__ptr); 57static inline __device__ void *malloc(size_t __size) { 58 return __hip_malloc(__size); 59} 60static inline __device__ void *free(void *__ptr) { return __hip_free(__ptr); } 61#else 62static inline __device__ void *malloc(size_t __size) { 63 __builtin_trap(); 64 return nullptr; 65} 66static inline __device__ void *free(void *__ptr) { 67 __builtin_trap(); 68 return nullptr; 69} 70#endif 71 72#include <__clang_hip_libdevice_declares.h> 73#include <__clang_hip_math.h> 74 75#if !_OPENMP || __HIP_ENABLE_CUDA_WRAPPER_FOR_OPENMP__ 76#if defined(__HIPCC_RTC__) 77#include <__clang_hip_cmath.h> 78#else 79#include <__clang_cuda_math_forward_declares.h> 80#include <__clang_hip_cmath.h> 81#include <__clang_cuda_complex_builtins.h> 82#include <algorithm> 83#include <complex> 84#include <new> 85#endif // __HIPCC_RTC__ 86#endif // !_OPENMP || __HIP_ENABLE_CUDA_WRAPPER_FOR_OPENMP__ 87 88#define __CLANG_HIP_RUNTIME_WRAPPER_INCLUDED__ 1 89#if defined(__HIPCC_RTC__) 90#pragma pop_macro("NULL") 91#pragma pop_macro("uint32_t") 92#pragma pop_macro("uint64_t") 93#pragma pop_macro("CHAR_BIT") 94#pragma pop_macro("INT_MAX") 95#endif // __HIPCC_RTC__ 96#endif // __HIP__ 97#endif // __CLANG_HIP_RUNTIME_WRAPPER_H__ 98