mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-02 00:26:06 +00:00

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
21 lines
766 B
Plaintext
21 lines
766 B
Plaintext
// 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)
|
|
|