[CUDA][HIP] Fix host/device check with -fopenmp
authorYaxun Liu <Yaxun.Liu@amd.com>
Wed, 9 Oct 2019 23:54:10 +0000 (23:54 +0000)
committerYaxun Liu <Yaxun.Liu@amd.com>
Wed, 9 Oct 2019 23:54:10 +0000 (23:54 +0000)
commit229c78d3a5d107e1f7436e5afda7b7c80d1da394
treec07d0bfb4e7783e90c8836ce22fab9c057470f13
parent80b080723ff7f8a0097d76a322b241514a7f3864
[CUDA][HIP] Fix host/device check with -fopenmp

CUDA/HIP program may be compiled with -fopenmp. In this case, -fopenmp is only passed to host compilation
to take advantages of multi-threads computation.

CUDA/HIP and OpenMP both use Sema::DeviceCallGraph to store functions to be analyzed and remove them
once they decide the function is sure to be emitted. CUDA/HIP and OpenMP have different functions to determine
if a function is sure to be emitted.

To check host/device correctly for CUDA/HIP when -fopenmp is enabled, there needs a unified logic to determine
whether a function is to be emitted. The logic needs to be aware of both CUDA and OpenMP logic.

Differential Revision: https://reviews.llvm.org/D67837

llvm-svn: 374263
clang/include/clang/Sema/Sema.h
clang/lib/Sema/SemaCUDA.cpp
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaOpenMP.cpp
clang/test/CodeGenCUDA/openmp-target.cu [new file with mode: 0644]
clang/test/OpenMP/declare_target_messages.cpp
clang/test/SemaCUDA/call-device-fn-from-host.cu
clang/test/SemaCUDA/host-device-constexpr.cu
clang/test/SemaCUDA/openmp-static-func.cu [new file with mode: 0644]
clang/test/SemaCUDA/openmp-target.cu [new file with mode: 0644]