[Mlir-commits] [mlir] [OpenACC] verify acc::DeclareEnterOp operand not BlockArgument (PR #158095)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Sep 11 08:11:21 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-openacc
Author: Scott Manley (rscottmanley)
<details>
<summary>Changes</summary>
Check that the operand of acc::DeclareEnterOp is a BlockArgument before trying to get its defining operation so it will not segfault and instead produce a clean error. Add test case.
---
Full diff: https://github.com/llvm/llvm-project/pull/158095.diff
2 Files Affected:
- (modified) mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp (+1-1)
- (modified) mlir/test/Dialect/OpenACC/invalid.mlir (+9)
``````````diff
diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
index ded4c7ab27274..ece7a243e1732 100644
--- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
+++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
@@ -3513,7 +3513,7 @@ checkDeclareOperands(Op &op, const mlir::ValueRange &operands,
"at least one operand must appear on the declare operation");
for (mlir::Value operand : operands) {
- if (!mlir::isa<acc::CopyinOp, acc::CopyoutOp, acc::CreateOp,
+ if (isa<BlockArgument>(operand) || !mlir::isa<acc::CopyinOp, acc::CopyoutOp, acc::CreateOp,
acc::DevicePtrOp, acc::GetDevicePtrOp, acc::PresentOp,
acc::DeclareDeviceResidentOp, acc::DeclareLinkOp>(
operand.getDefiningOp()))
diff --git a/mlir/test/Dialect/OpenACC/invalid.mlir b/mlir/test/Dialect/OpenACC/invalid.mlir
index 68afd9fccba79..24ce9784393b0 100644
--- a/mlir/test/Dialect/OpenACC/invalid.mlir
+++ b/mlir/test/Dialect/OpenACC/invalid.mlir
@@ -831,3 +831,12 @@ func.func @acc_loop_container() {
%value = memref.alloc() : memref<f32>
// expected-error @below {{invalid data clause modifiers: readonly}}
%0 = acc.create varPtr(%value : memref<f32>) -> memref<f32> {modifiers = #acc<data_clause_modifier readonly,zero,capture,always>}
+
+// -----
+
+func.func @verify_declare_enter(%arg0 : memref<i32>) {
+// expected-error @below {{expect valid declare data entry operation or acc.getdeviceptr as defining op}}
+ %0 = acc.declare_enter dataOperands(%arg0 : memref<i32>)
+ acc.declare_exit token(%0) dataOperands(%arg0 : memref<i32>)
+ return
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/158095
More information about the Mlir-commits
mailing list