diff options
| author | Yaxun Liu <Yaxun.Liu@amd.com> | 2019-10-09 23:54:10 +0000 |
|---|---|---|
| committer | Yaxun Liu <Yaxun.Liu@amd.com> | 2019-10-09 23:54:10 +0000 |
| commit | 229c78d3a5d107e1f7436e5afda7b7c80d1da394 (patch) | |
| tree | c07d0bfb4e7783e90c8836ce22fab9c057470f13 /clang/test/CodeGenCUDA | |
| parent | 80b080723ff7f8a0097d76a322b241514a7f3864 (diff) | |
| download | bcm5719-llvm-229c78d3a5d107e1f7436e5afda7b7c80d1da394.tar.gz bcm5719-llvm-229c78d3a5d107e1f7436e5afda7b7c80d1da394.zip | |
[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
Diffstat (limited to 'clang/test/CodeGenCUDA')
| -rw-r--r-- | clang/test/CodeGenCUDA/openmp-target.cu | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/test/CodeGenCUDA/openmp-target.cu b/clang/test/CodeGenCUDA/openmp-target.cu new file mode 100644 index 00000000000..869bde60729 --- /dev/null +++ b/clang/test/CodeGenCUDA/openmp-target.cu @@ -0,0 +1,20 @@ +// REQUIRES: x86-registered-target +// REQUIRES: nvptx-registered-target + +// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm \ +// RUN: -fopenmp -fopenmp-version=50 -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm \ +// RUN: -fopenmp -fopenmp-version=50 -o - -x c++ %s | FileCheck %s +// RUN: %clang_cc1 -triple nvptx64-nvidia-cuda -fcuda-is-device \ +// RUN: -emit-llvm -o - %s | FileCheck -check-prefixes=DEV %s + +// CHECK: declare{{.*}}@_Z7nohost1v() +// DEV-NOT: _Z7nohost1v +void nohost1() {} +#pragma omp declare target to(nohost1) device_type(nohost) + +// CHECK: declare{{.*}}@_Z7nohost2v() +// DEV-NOT: _Z7nohost2v +void nohost2() {nohost1();} +#pragma omp declare target to(nohost2) device_type(nohost) + |

