| // RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -fexceptions -fcuda-is-device \ |
| // RUN: -triple nvptx-nvidia-cuda -emit-llvm -disable-llvm-passes -o - %s | \ |
| // RUN: FileCheck -check-prefix DEVICE %s |
| |
| // RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -fexceptions \ |
| // RUN: -triple x86_64-unknown-linux-gnu -emit-llvm -disable-llvm-passes -o - %s | \ |
| // RUN: FileCheck -check-prefix HOST %s |
| |
| #include "Inputs/cuda.h" |
| |
| __host__ __device__ void f(); |
| |
| // HOST: define void @_Z7host_fnv() [[HOST_ATTR:#[0-9]+]] |
| void host_fn() { f(); } |
| |
| // DEVICE: define void @_Z3foov() [[DEVICE_ATTR:#[0-9]+]] |
| __device__ void foo() { |
| // DEVICE: call void @_Z1fv |
| f(); |
| } |
| |
| // DEVICE: define void @_Z12foo_noexceptv() [[DEVICE_ATTR:#[0-9]+]] |
| __device__ void foo_noexcept() noexcept { |
| // DEVICE: call void @_Z1fv |
| f(); |
| } |
| |
| // This is nounwind only on the device side. |
| // CHECK: define void @_Z3foov() [[DEVICE_ATTR:#[0-9]+]] |
| __host__ __device__ void bar() { f(); } |
| |
| // DEVICE: define void @_Z3bazv() [[DEVICE_ATTR:#[0-9]+]] |
| __global__ void baz() { f(); } |
| |
| // DEVICE: attributes [[DEVICE_ATTR]] = { |
| // DEVICE-SAME: nounwind |
| // HOST: attributes [[HOST_ATTR]] = { |
| // HOST-NOT: nounwind |
| // HOST-SAME: } |