[libomptarget] Enable AMDGPU devicertl

[libomptarget] Enable AMDGPU devicertl

The amdgpu devicertl is written in freestanding openmp and compiles to a
bitcode library (per listed gfx arch) with no unresolved symbols. It requires
a recent clang, preferably the one from the same monorepo checkout.

This is D98658, with printf explicitly stubbed out, after patching clang to no
longer require an llvm with the amdgpu target enabled.

Reviewed By: tianshilei1992

Differential Revision: https://reviews.llvm.org/D101213
This commit is contained in:
Jon Chesterfield 2021-04-24 02:24:44 +01:00
parent a224bf8ec4
commit 58f125493d
3 changed files with 20 additions and 3 deletions

View File

@ -10,4 +10,5 @@
#
##===----------------------------------------------------------------------===##
add_subdirectory(amdgcn)
add_subdirectory(nvptx)

View File

@ -36,6 +36,18 @@ else()
set(AOMP_BINDIR ${LLVM_BUILD_BINARY_DIR}/bin)
endif()
# Copied from nvptx CMakeLists
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64")
set(aux_triple x86_64-unknown-linux-gnu)
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "ppc64le")
set(aux_triple powerpc64le-unknown-linux-gnu)
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
set(aux_triple aarch64-unknown-linux-gnu)
else()
libomptarget_say("Not building AMDGCN device RTL: unknown host arch: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
return()
endif()
libomptarget_say("Building AMDGCN device RTL. LLVM_COMPILER_PATH=${AOMP_BINDIR}")
project(omptarget-amdgcn)
@ -104,7 +116,7 @@ macro(add_cuda_bc_library)
-ffreestanding
-target amdgcn-amd-amdhsa
-emit-llvm
-Xclang -aux-triple -Xclang x86_64-unknown-linux-gnu # see nvptx
-Xclang -aux-triple -Xclang ${aux_triple}
-fopenmp -fopenmp-cuda-mode -Xclang -fopenmp-is-device
-D__AMDGCN__
-Xclang -target-cpu -Xclang ${mcpu}
@ -154,6 +166,6 @@ foreach(mcpu ${mcpus})
add_custom_target(lib${libname}-${mcpu} ALL DEPENDS ${bc_libname})
install(FILES ${OUTPUTDIR}/${bc_libname}
DESTINATION "${OPENMP_INSTALL_LIBDIR}/libdevice"
DESTINATION "${OPENMP_INSTALL_LIBDIR}"
)
endforeach()

View File

@ -67,6 +67,10 @@ enum : __kmpc_impl_lanemask_t {
__kmpc_impl_all_lanes = ~(__kmpc_impl_lanemask_t)0
};
EXTERN int printf(const char *, ...);
// The return code of printf is not checked in the call sites in this library.
// A call to a function named printf currently hits some special case handling
// for opencl, which translates to calls that do not presently exist for openmp
// Therefore, for now, stub out printf while building this library.
#define printf(...)
#endif