blob: d0b54f6a2c8d37bcda4cdba84483424a4c81732f [file]
// clang-format off
// RUN: %clang++ %flags -foffload-via-llvm --offload-arch=native %s -o %t
// RUN: %t | %fcheck-generic
// RUN: %clang++ %flags -foffload-via-llvm --offload-arch=native %s -o %t -fopenmp
// RUN: %t | %fcheck-generic
// clang-format on
// UNSUPPORTED: aarch64-unknown-linux-gnu
// UNSUPPORTED: x86_64-unknown-linux-gnu
// UNSUPPORTED: nvptx64-nvidia-cuda-LTO
// UNSUPPORTED: amdgcn-amd-amdhsa-LTO
// UNSUPPORTED: amdgpu-amd-amdhsa-LTO
// UNSUPPORTED: intelgpu
#include <stdio.h>
__global__ void incrementCounter(int *A) {
__scoped_atomic_fetch_add(A, 1, __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE);
}
int main(int argc, char **argv) {
int DevNo = 0;
int *Ptr, I;
hipMalloc(&Ptr, sizeof(int));
printf("Ptr %p\n", Ptr);
// CHECK: Ptr [[Ptr:0x.*]]
int Zero = 0;
hipMemcpy(Ptr, &Zero, sizeof(int), hipMemcpyHostToDevice);
incrementCounter<<<7, 6>>>(Ptr);
hipMemcpy(&I, Ptr, sizeof(int), hipMemcpyDeviceToHost);
printf("I: %i\n", I);
// CHECK: I: 42
}