Author: erichkeane
Date: 2025-06-06T11:58:58-07:00
New Revision: 39bb267445ffee980c313285f09814ab12e3a847

URL: 
https://github.com/llvm/llvm-project/commit/39bb267445ffee980c313285f09814ab12e3a847
DIFF: 
https://github.com/llvm/llvm-project/commit/39bb267445ffee980c313285f09814ab12e3a847.diff

LOG: [OpenACC][CIR][NFC] Add device_ptr async clause tests

Add a test to ensure that device_ptr properly respects the 'async'
functionality we added for copy/etc.

Added: 
    

Modified: 
    clang/test/CIR/CodeGenOpenACC/combined.cpp
    clang/test/CIR/CodeGenOpenACC/kernels.c
    clang/test/CIR/CodeGenOpenACC/parallel.c
    clang/test/CIR/CodeGenOpenACC/serial.c

Removed: 
    


################################################################################
diff  --git a/clang/test/CIR/CodeGenOpenACC/combined.cpp 
b/clang/test/CIR/CodeGenOpenACC/combined.cpp
index fec6ec688a44d..5107ee56c568c 100644
--- a/clang/test/CIR/CodeGenOpenACC/combined.cpp
+++ b/clang/test/CIR/CodeGenOpenACC/combined.cpp
@@ -1048,4 +1048,35 @@ extern "C" void acc_combined_deviceptr(int *arg1, int 
*arg2) {
   // CHECK-NEXT: } loc
   // CHECK-NEXT: acc.terminator
   // CHECK-NEXT: } loc
+
+#pragma acc parallel loop deviceptr(arg1) async
+  for(unsigned I = 0; I < 5; ++I);
+  // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
+  // CHECK-NEXT: acc.parallel combined(loop) dataOperands(%[[DEVPTR1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async {
+  // CHECK-NEXT: acc.loop combined(parallel) {
+  // CHECK: acc.yield
+  // CHECK-NEXT: } loc
+  // CHECK-NEXT: acc.yield
+  // CHECK-NEXT: } loc
+
+#pragma acc serial loop deviceptr(arg2) async device_type(nvidia)
+  for(unsigned I = 0; I < 5; ++I);
+  // CHECK-NEXT: %[[DEVPTR2:.*]] = acc.deviceptr varPtr(%[[ARG2]] : 
!cir.ptr<!cir.ptr<!s32i>>) async -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
+  // CHECK-NEXT: acc.serial combined(loop) dataOperands(%[[DEVPTR2]] : 
!cir.ptr<!cir.ptr<!s32i>>) async {
+  // CHECK-NEXT: acc.loop combined(serial) {
+  // CHECK: acc.yield
+  // CHECK-NEXT: } loc
+  // CHECK-NEXT: acc.yield
+  // CHECK-NEXT: } loc
+
+#pragma acc kernels loop deviceptr(arg1, arg2) device_type(nvidia) async
+  for(unsigned I = 0; I < 5; ++I);
+  // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<nvidia>]) -> 
!cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
+  // CHECK-NEXT: %[[DEVPTR2:.*]] = acc.deviceptr varPtr(%[[ARG2]] : 
!cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<nvidia>]) -> 
!cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
+  // CHECK-NEXT: acc.kernels combined(loop) dataOperands(%[[DEVPTR1]], 
%[[DEVPTR2]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) 
async([#acc.device_type<nvidia>]) {
+  // CHECK-NEXT: acc.loop combined(kernels) {
+  // CHECK: acc.yield
+  // CHECK-NEXT: } loc
+  // CHECK-NEXT: acc.terminator
+  // CHECK-NEXT: } loc
 }

diff  --git a/clang/test/CIR/CodeGenOpenACC/kernels.c 
b/clang/test/CIR/CodeGenOpenACC/kernels.c
index e940b84fb7461..d276c2c23fbed 100644
--- a/clang/test/CIR/CodeGenOpenACC/kernels.c
+++ b/clang/test/CIR/CodeGenOpenACC/kernels.c
@@ -437,4 +437,18 @@ void acc_kernels_deviceptr(int *arg1, int *arg2) {
   // CHECK-NEXT: acc.kernels dataOperands(%[[DEVPTR1]], %[[DEVPTR2]] : 
!cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) {
   // CHECK-NEXT: acc.terminator
   // CHECK-NEXT: } loc
+
+#pragma acc kernels deviceptr(arg1) async
+  ;
+  // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
+  // CHECK-NEXT: acc.kernels dataOperands(%[[DEVPTR1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async {
+  // CHECK-NEXT: acc.terminator
+  // CHECK-NEXT: } loc
+#pragma acc kernels deviceptr(arg1, arg2) device_type(radeon) async
+  ;
+  // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) -> 
!cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
+  // CHECK-NEXT: %[[DEVPTR2:.*]] = acc.deviceptr varPtr(%[[ARG2]] : 
!cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) -> 
!cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
+  // CHECK-NEXT: acc.kernels dataOperands(%[[DEVPTR1]], %[[DEVPTR2]] : 
!cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) 
async([#acc.device_type<radeon>]) {
+  // CHECK-NEXT: acc.terminator
+  // CHECK-NEXT: } loc
 }

diff  --git a/clang/test/CIR/CodeGenOpenACC/parallel.c 
b/clang/test/CIR/CodeGenOpenACC/parallel.c
index 282a0218054d5..df05a7aa53bb8 100644
--- a/clang/test/CIR/CodeGenOpenACC/parallel.c
+++ b/clang/test/CIR/CodeGenOpenACC/parallel.c
@@ -464,4 +464,18 @@ void acc_parallel_deviceptr(int *arg1, int *arg2) {
   // CHECK-NEXT: acc.parallel dataOperands(%[[DEVPTR1]], %[[DEVPTR2]] : 
!cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) {
   // CHECK-NEXT: acc.yield
   // CHECK-NEXT: } loc
+
+#pragma acc parallel deviceptr(arg1) async
+  ;
+  // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
+  // CHECK-NEXT: acc.parallel dataOperands(%[[DEVPTR1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async {
+  // CHECK-NEXT: acc.yield
+  // CHECK-NEXT: } loc
+#pragma acc parallel deviceptr(arg1, arg2) device_type(radeon) async
+  ;
+  // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) -> 
!cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
+  // CHECK-NEXT: %[[DEVPTR2:.*]] = acc.deviceptr varPtr(%[[ARG2]] : 
!cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) -> 
!cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
+  // CHECK-NEXT: acc.parallel dataOperands(%[[DEVPTR1]], %[[DEVPTR2]] : 
!cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) 
async([#acc.device_type<radeon>]) {
+  // CHECK-NEXT: acc.yield
+  // CHECK-NEXT: } loc
 }

diff  --git a/clang/test/CIR/CodeGenOpenACC/serial.c 
b/clang/test/CIR/CodeGenOpenACC/serial.c
index a0967bea4c588..48bda5387dffb 100644
--- a/clang/test/CIR/CodeGenOpenACC/serial.c
+++ b/clang/test/CIR/CodeGenOpenACC/serial.c
@@ -287,4 +287,19 @@ void acc_serial_deviceptr(int *arg1, int *arg2) {
   // CHECK-NEXT: acc.serial dataOperands(%[[DEVPTR1]], %[[DEVPTR2]] : 
!cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) {
   // CHECK-NEXT: acc.yield
   // CHECK-NEXT: } loc
+
+#pragma acc serial deviceptr(arg1) async
+  ;
+  // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async -> !cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
+  // CHECK-NEXT: acc.serial dataOperands(%[[DEVPTR1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async {
+  // CHECK-NEXT: acc.yield
+  // CHECK-NEXT: } loc
+
+#pragma acc serial deviceptr(arg1, arg2) device_type(radeon) async
+  ;
+  // CHECK-NEXT: %[[DEVPTR1:.*]] = acc.deviceptr varPtr(%[[ARG1]] : 
!cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) -> 
!cir.ptr<!cir.ptr<!s32i>> {name = "arg1"}
+  // CHECK-NEXT: %[[DEVPTR2:.*]] = acc.deviceptr varPtr(%[[ARG2]] : 
!cir.ptr<!cir.ptr<!s32i>>) async([#acc.device_type<radeon>]) -> 
!cir.ptr<!cir.ptr<!s32i>> {name = "arg2"}
+  // CHECK-NEXT: acc.serial dataOperands(%[[DEVPTR1]], %[[DEVPTR2]] : 
!cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!cir.ptr<!s32i>>) 
async([#acc.device_type<radeon>]) {
+  // CHECK-NEXT: acc.yield
+  // CHECK-NEXT: } loc
 }


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to