[Mlir-commits] [mlir] [flang][OpenACC] Fix acc.present in acc.data translation (PR #208806)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Fri Jul 10 11:56:46 PDT 2026


https://github.com/StarryCSF updated https://github.com/llvm/llvm-project/pull/208806

>From c7440ed854e41f87c622af83950f474a18d4b56d Mon Sep 17 00:00:00 2001
From: "ZhiQiang.Fan" <571253675 at QQ.com>
Date: Sat, 11 Jul 2026 02:01:34 +0800
Subject: [PATCH 1/2] [flang][OpenACC] Fix acc.present in acc.data translation

---
 .../OpenACC/OpenACCToLLVMIRTranslation.cpp       |  4 ++--
 mlir/test/Target/LLVMIR/openacc-llvm.mlir        | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
index 9bb6939043621..f198f114464a1 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
@@ -317,7 +317,7 @@ static LogicalResult convertDataOp(acc::DataOp &op,
       create.push_back(createOp.getVarPtr());
     } else if (auto presentOp = mlir::dyn_cast_or_null<acc::PresentOp>(
                    dataOp.getDefiningOp())) {
-      present.push_back(createOp.getVarPtr());
+      present.push_back(presentOp.getVarPtr());
     }
   }
 
@@ -517,7 +517,7 @@ LogicalResult OpenACCDialectLLVMIRTranslationInterface::convertOperation(
         return success();
       })
       .Case<acc::CreateOp, acc::CopyinOp, acc::CopyoutOp, acc::DeleteOp,
-            acc::UpdateDeviceOp, acc::GetDevicePtrOp>([](auto op) {
+            acc::UpdateDeviceOp, acc::GetDevicePtrOp, acc::PresentOp>([](auto op) {
         // NOP
         return success();
       })
diff --git a/mlir/test/Target/LLVMIR/openacc-llvm.mlir b/mlir/test/Target/LLVMIR/openacc-llvm.mlir
index c4b0b6a424417..f9234c1208c2f 100644
--- a/mlir/test/Target/LLVMIR/openacc-llvm.mlir
+++ b/mlir/test/Target/LLVMIR/openacc-llvm.mlir
@@ -189,3 +189,19 @@ llvm.func @testdataop(%arg0: !llvm.ptr, %arg1: !llvm.ptr, %arg2: !llvm.ptr) {
 
 // CHECK: declare void @__tgt_target_data_begin_mapper(ptr, i64, i32, ptr, ptr, ptr, ptr, ptr, ptr)
 // CHECK: declare void @__tgt_target_data_end_mapper(ptr, i64, i32, ptr, ptr, ptr, ptr, ptr, ptr)
+
+// -----
+
+// Test acc.present in acc.data
+llvm.func @test_present_in_data(%arg0: !llvm.ptr, %arg1: !llvm.ptr) {
+  %0 = acc.copyin varPtr(%arg0 : !llvm.ptr) varType(f32) -> !llvm.ptr
+  %1 = acc.present varPtr(%arg1 : !llvm.ptr) varType(f32) -> !llvm.ptr
+  acc.data dataOperands(%0, %1 : !llvm.ptr, !llvm.ptr) {
+    acc.terminator
+  }
+  llvm.return
+}
+
+// Verify present flag: 12288 = 0x3000 = kHoldFlag + kPresentFlag
+// CHECK: constant [{{[0-9]*}} x i64] [i64 8193, i64 12288]
+// CHECK: call void @__tgt_target_data_begin_mapper

>From 20c8f066df04749730a3c84029cd86f62e050ec9 Mon Sep 17 00:00:00 2001
From: "ZhiQiang.Fan" <571253675 at QQ.com>
Date: Sat, 11 Jul 2026 02:56:29 +0800
Subject: [PATCH 2/2] fix format

---
 .../Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp       | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
index f198f114464a1..e4fd2480b1132 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
@@ -517,10 +517,11 @@ LogicalResult OpenACCDialectLLVMIRTranslationInterface::convertOperation(
         return success();
       })
       .Case<acc::CreateOp, acc::CopyinOp, acc::CopyoutOp, acc::DeleteOp,
-            acc::UpdateDeviceOp, acc::GetDevicePtrOp, acc::PresentOp>([](auto op) {
-        // NOP
-        return success();
-      })
+            acc::UpdateDeviceOp, acc::GetDevicePtrOp, acc::PresentOp>(
+          [](auto op) {
+            // NOP
+            return success();
+          })
       .Default([&](Operation *op) {
         return op->emitError("unsupported OpenACC operation: ")
                << op->getName();



More information about the Mlir-commits mailing list