[Mlir-commits] [mlir] [mlir][OpenMP] add verifier and tests for cancel taskgroup (PR #137154)
Tom Eccles
llvmlistbot at llvm.org
Thu Apr 24 03:58:07 PDT 2025
https://github.com/tblah created https://github.com/llvm/llvm-project/pull/137154
None
>From c4a98c15e55cad5e3cb943451fca2dbc44467fa4 Mon Sep 17 00:00:00 2001
From: Tom Eccles <tom.eccles at arm.com>
Date: Thu, 24 Apr 2025 10:56:29 +0000
Subject: [PATCH] [mlir][OpenMP] add verifier and tests for cancel taskgroup
---
mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp | 12 +++-
mlir/test/Dialect/OpenMP/invalid.mlir | 24 ++++++++
mlir/test/Dialect/OpenMP/ops.mlir | 61 ++++++++++++++++++++
3 files changed, 95 insertions(+), 2 deletions(-)
diff --git a/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp b/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp
index dd701da507fc6..0f65ace0186db 100644
--- a/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp
+++ b/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp
@@ -3216,7 +3216,11 @@ LogicalResult CancelOp::verify() {
<< "must not have a nowait clause";
}
}
- // TODO : Add more when we support taskgroup.
+ if ((cct == ClauseCancellationConstructType::Taskgroup) &&
+ !mlir::isa<omp::TaskOp>(structuralParent)) {
+ return emitOpError() << "cancel taskgroup must appear "
+ << "inside a task region";
+ }
return success();
}
@@ -3253,7 +3257,11 @@ LogicalResult CancellationPointOp::verify() {
return emitOpError() << "cancellation point sections must appear "
<< "inside a sections region";
}
- // TODO : Add more when we support taskgroup.
+ if ((cct == ClauseCancellationConstructType::Taskgroup) &&
+ !mlir::isa<omp::TaskOp>(structuralParent)) {
+ return emitOpError() << "cancellation point taskgroup must appear "
+ << "inside a task region";
+ }
return success();
}
diff --git a/mlir/test/Dialect/OpenMP/invalid.mlir b/mlir/test/Dialect/OpenMP/invalid.mlir
index 41e17881afd30..060b3cd2455a0 100644
--- a/mlir/test/Dialect/OpenMP/invalid.mlir
+++ b/mlir/test/Dialect/OpenMP/invalid.mlir
@@ -1754,6 +1754,18 @@ func.func @omp_cancel2() {
// -----
+func.func @omp_cancel_taskloop() {
+ omp.sections {
+ // expected-error @below {{cancel taskgroup must appear inside a task region}}
+ omp.cancel cancellation_construct_type(taskgroup)
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ return
+}
+
+// -----
+
func.func @omp_cancel3(%arg1 : i32, %arg2 : i32, %arg3 : i32) -> () {
omp.wsloop nowait {
omp.loop_nest (%0) : i32 = (%arg1) to (%arg2) step (%arg3) {
@@ -1841,6 +1853,18 @@ func.func @omp_cancellationpoint2() {
// -----
+func.func @omp_cancellationpoint_taskgroup() {
+ omp.sections {
+ // expected-error @below {{cancellation point taskgroup must appear inside a task region}}
+ omp.cancellation_point cancellation_construct_type(taskgroup)
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ return
+}
+
+// -----
+
omp.declare_reduction @add_f32 : f32
init {
^bb0(%arg: f32):
diff --git a/mlir/test/Dialect/OpenMP/ops.mlir b/mlir/test/Dialect/OpenMP/ops.mlir
index d5e2bfa5d3949..a3c591799b27e 100644
--- a/mlir/test/Dialect/OpenMP/ops.mlir
+++ b/mlir/test/Dialect/OpenMP/ops.mlir
@@ -2201,6 +2201,20 @@ func.func @omp_cancel_sections() -> () {
return
}
+func.func @omp_cancel_taskgroup() -> () {
+ omp.taskgroup {
+ omp.task {
+ // CHECK: omp.cancel cancellation_construct_type(taskgroup)
+ omp.cancel cancellation_construct_type(taskgroup)
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ return
+}
+
func.func @omp_cancel_parallel_nested(%if_cond : i1) -> () {
omp.parallel {
scf.if %if_cond {
@@ -2243,6 +2257,22 @@ func.func @omp_cancel_sections_nested(%if_cond : i1) -> () {
return
}
+func.func @omp_cancel_taskgroup_nested(%if_cond : i1) -> () {
+ omp.taskgroup {
+ omp.task {
+ scf.if %if_cond {
+ // CHECK: omp.cancel cancellation_construct_type(taskgroup)
+ omp.cancel cancellation_construct_type(taskgroup)
+ }
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ return
+}
+
func.func @omp_cancellationpoint_parallel() -> () {
omp.parallel {
// CHECK: omp.cancellation_point cancellation_construct_type(parallel)
@@ -2283,6 +2313,22 @@ func.func @omp_cancellationpoint_sections() -> () {
return
}
+func.func @omp_cancellationpoint_taskgroup() -> () {
+ omp.taskgroup {
+ omp.task {
+ // CHECK: omp.cancellation_point cancellation_construct_type(taskgroup)
+ omp.cancellation_point cancellation_construct_type(taskgroup)
+ // CHECK: omp.cancel cancellation_construct_type(taskgroup)
+ omp.cancel cancellation_construct_type(taskgroup)
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ return
+}
+
func.func @omp_cancellationpoint_parallel_nested(%if_cond : i1) -> () {
omp.parallel {
scf.if %if_cond {
@@ -2323,6 +2369,21 @@ func.func @omp_cancellationpoint_sections_nested(%if_cond : i1) -> () {
return
}
+func.func @omp_cancellationpoint_taskgroup_nested(%if_cond : i1) -> () {
+ omp.taskgroup {
+ omp.task {
+ scf.if %if_cond {
+ // CHECK: omp.cancellation_point cancellation_construct_type(taskgroup)
+ omp.cancellation_point cancellation_construct_type(taskgroup)
+ }
+ omp.terminator
+ }
+ // CHECK: omp.terminator
+ omp.terminator
+ }
+ return
+}
+
// CHECK-LABEL: @omp_taskgroup_no_tasks
func.func @omp_taskgroup_no_tasks() -> () {
More information about the Mlir-commits
mailing list