[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