| // RUN: %clang_cc1 -fsyntax-only -triple amdgcn -target-cpu gfx90a -verify=device,both %s -fcuda-is-device |
| // RUN: %clang_cc1 -fsyntax-only -triple x86_64 -aux-triple amdgcn -verify=host,both %s |
| |
| #define __device__ __attribute__((device)) |
| #define __shared__ __attribute__((shared)) |
| |
| __device__ void test_ds_atomic_fadd_f32_valid(__shared__ float *lds_ptr, float val) { |
| float result; |
| result = __builtin_amdgcn_ds_atomic_fadd_f32(lds_ptr, val); |
| } |
| |
| __device__ void test_ds_atomic_fadd_f32_errors(__shared__ float *lds_ptr, float val, |
| __shared__ double *lds_ptr_d, |
| float *global_ptr) { |
| float result; |
| result = __builtin_amdgcn_ds_atomic_fadd_f32(lds_ptr, val, 0); // both-error{{too many arguments to function call, expected 2, have 3}} |
| result = __builtin_amdgcn_ds_atomic_fadd_f32(global_ptr, val); |
| result = __builtin_amdgcn_ds_atomic_fadd_f32(lds_ptr_d, val); // device-error{{cannot initialize a parameter of type '__shared__ float *' with an rvalue of type '__shared__ double *'}} host-error{{cannot initialize a parameter of type '__attribute__((address_space(3))) float *' with an rvalue of type '__attribute__((address_space(3))) double *'}} |
| } |
| |
| __device__ void test_ds_atomic_fadd_f64_valid(__shared__ double *lds_ptr, double val) { |
| double result; |
| result = __builtin_amdgcn_ds_atomic_fadd_f64(lds_ptr, val); |
| } |
| |
| __device__ void test_ds_atomic_fadd_f64_errors(__shared__ double *lds_ptr, double val, |
| __shared__ float *lds_ptr_f, |
| double *global_ptr) { |
| double result; |
| result = __builtin_amdgcn_ds_atomic_fadd_f64(lds_ptr, val, 0); // both-error{{too many arguments to function call, expected 2, have 3}} |
| result = __builtin_amdgcn_ds_atomic_fadd_f64(global_ptr, val); |
| result = __builtin_amdgcn_ds_atomic_fadd_f64(lds_ptr_f, val); // device-error{{cannot initialize a parameter of type '__shared__ double *' with an rvalue of type '__shared__ float *'}} host-error{{cannot initialize a parameter of type '__attribute__((address_space(3))) double *' with an rvalue of type '__attribute__((address_space(3))) float *'}} |
| } |