From a92eaa3ebee6ff85549e8f1c50da4958dbbdcb30 Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Mon, 13 Mar 2023 12:18:58 -0500 Subject: [PATCH] [Libomptarget] Use freestanding stdint.h header for DeviceRTL The `stdint.h` header provides the standard types. Previously we used `-nostdinc` and defined these ourselves. This patch switches to a freestanding version which should work properly. Without `-ffreestanding` the `stdint.h` header will include other libraries. But in a freestanding environment it should work given the primitives. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D145963 --- openmp/libomptarget/DeviceRTL/CMakeLists.txt | 2 +- openmp/libomptarget/DeviceRTL/include/Types.h | 29 +++---------------- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/openmp/libomptarget/DeviceRTL/CMakeLists.txt b/openmp/libomptarget/DeviceRTL/CMakeLists.txt index 53da2661011e..b36caf9fc564 100644 --- a/openmp/libomptarget/DeviceRTL/CMakeLists.txt +++ b/openmp/libomptarget/DeviceRTL/CMakeLists.txt @@ -121,7 +121,7 @@ list(TRANSFORM LIBOMPTARGET_LLVM_INCLUDE_DIRS_DEVICERTL PREPEND "-I") # Set flags for LLVM Bitcode compilation. set(bc_flags -c -foffload-lto -std=c++17 -fvisibility=hidden ${clang_opt_flags} --offload-device-only - -nocudalib -nogpulib -nostdinc + -nocudalib -nogpulib -nogpuinc -ffreestanding -fopenmp -fopenmp-cuda-mode -Wno-unknown-cuda-version -I${include_directory} diff --git a/openmp/libomptarget/DeviceRTL/include/Types.h b/openmp/libomptarget/DeviceRTL/include/Types.h index 628755bc55ed..76e8090fc3af 100644 --- a/openmp/libomptarget/DeviceRTL/include/Types.h +++ b/openmp/libomptarget/DeviceRTL/include/Types.h @@ -12,6 +12,10 @@ #ifndef OMPTARGET_TYPES_H #define OMPTARGET_TYPES_H +#include + +using size_t = decltype(sizeof(char)); + // Tell the compiler that we do not have any "call-like" inline assembly in the // device rutime. That means we cannot have inline assembly which will call // another function but only inline assembly that performs some operation or @@ -21,31 +25,6 @@ // TODO: Find a good place for this #pragma omp assumes ext_no_call_asm -/// Base type declarations for freestanding mode -/// -///{ -using int8_t = char; -using uint8_t = unsigned char; -using int16_t = short; -using uint16_t = unsigned short; -using int32_t = int; -using uint32_t = unsigned int; -using int64_t = long; -using uint64_t = unsigned long; -using size_t = decltype(sizeof(char)); -// TODO: Properly implement this -using intptr_t = int64_t; -using uintptr_t = uint64_t; - -static_assert(sizeof(int8_t) == 1, "type size mismatch"); -static_assert(sizeof(uint8_t) == 1, "type size mismatch"); -static_assert(sizeof(int16_t) == 2, "type size mismatch"); -static_assert(sizeof(uint16_t) == 2, "type size mismatch"); -static_assert(sizeof(int32_t) == 4, "type size mismatch"); -static_assert(sizeof(uint32_t) == 4, "type size mismatch"); -static_assert(sizeof(int64_t) == 8, "type size mismatch"); -static_assert(sizeof(uint64_t) == 8, "type size mismatch"); -///} enum omp_proc_bind_t { omp_proc_bind_false = 0,