forked from OSchip/llvm-project
[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:
parent
a224bf8ec4
commit
58f125493d
|
@ -10,4 +10,5 @@
|
|||
#
|
||||
##===----------------------------------------------------------------------===##
|
||||
|
||||
add_subdirectory(amdgcn)
|
||||
add_subdirectory(nvptx)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue