| // Tests CUDA kernel arguments get copied by value when targeting SPIR-V, even with |
| // destructor, copy constructor or move constructor defined by user. |
| |
| // RUN: %clang -emit-llvm --cuda-device-only --offload=spirv32 \ |
| // RUN: -nocudalib -nocudainc %s -o %t.bc -c 2>&1 |
| // RUN: llvm-dis %t.bc -o %t.ll |
| // RUN: FileCheck %s --input-file=%t.ll |
| |
| // RUN: %clang -emit-llvm --cuda-device-only --offload=spirv64 \ |
| // RUN: -nocudalib -nocudainc %s -o %t.bc -c 2>&1 |
| // RUN: llvm-dis %t.bc -o %t.ll |
| // RUN: FileCheck %s --input-file=%t.ll |
| |
| class GpuData { |
| public: |
| __attribute__((host)) __attribute__((device)) GpuData(int* src) {} |
| __attribute__((host)) __attribute__((device)) ~GpuData() {} |
| __attribute__((host)) __attribute__((device)) GpuData(const GpuData& other) {} |
| __attribute__((host)) __attribute__((device)) GpuData(GpuData&& other) {} |
| }; |
| |
| // CHECK: define |
| // CHECK-SAME: spir_kernel void @_Z6kernel7GpuData(ptr noundef byval(%class.GpuData) align |
| |
| __attribute__((global)) void kernel(GpuData output) {} |