[flang-commits] [flang] [flang][OpenMP] Add lowering support for task detach (PR #119128)
via flang-commits
flang-commits at lists.llvm.org
Sun Dec 8 06:55:27 PST 2024
https://github.com/NimishMishra updated https://github.com/llvm/llvm-project/pull/119128
>From 0bcef33a6ab1f881b6fc57d8730bf4a12e92e1a7 Mon Sep 17 00:00:00 2001
From: Nimish Mishra <neelam.nimish at gmail.com>
Date: Sun, 8 Dec 2024 20:25:13 +0530
Subject: [PATCH] [flang] Add lowering support for task detach
---
flang/lib/Lower/OpenMP/ClauseProcessor.cpp | 10 ++++++++++
flang/lib/Lower/OpenMP/ClauseProcessor.h | 1 +
flang/lib/Lower/OpenMP/OpenMP.cpp | 6 ++++--
flang/test/Lower/OpenMP/{Todo => }/task_detach.f90 | 8 +++++---
4 files changed, 20 insertions(+), 5 deletions(-)
rename flang/test/Lower/OpenMP/{Todo => }/task_detach.f90 (57%)
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
index c251d8bbdaf043..48c559a78b9bc4 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
@@ -458,6 +458,16 @@ bool ClauseProcessor::processPriority(
return false;
}
+bool ClauseProcessor::processDetach(mlir::omp::DetachClauseOps &result) const {
+ if (auto *clause = findUniqueClause<omp::clause::Detach>()) {
+ semantics::Symbol *sym = clause->v.sym();
+ mlir::Value symVal = converter.getSymbolAddress(*sym);
+ result.eventHandle = symVal;
+ return true;
+ }
+ return false;
+}
+
bool ClauseProcessor::processProcBind(
mlir::omp::ProcBindClauseOps &result) const {
if (auto *clause = findUniqueClause<omp::clause::ProcBind>()) {
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.h b/flang/lib/Lower/OpenMP/ClauseProcessor.h
index 217d7c6917bd61..e0fe917c50e8f8 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.h
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.h
@@ -90,6 +90,7 @@ class ClauseProcessor {
mlir::omp::ThreadLimitClauseOps &result) const;
bool processUntied(mlir::omp::UntiedClauseOps &result) const;
+ bool processDetach(mlir::omp::DetachClauseOps &result) const;
// 'Repeatable' clauses: They can appear multiple times in the clause list.
bool processAligned(mlir::omp::AlignedClauseOps &result) const;
bool processAllocate(mlir::omp::AllocateClauseOps &result) const;
diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp
index cd30bbb89ce470..2ef4d184a6321f 100644
--- a/flang/lib/Lower/OpenMP/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP/OpenMP.cpp
@@ -1261,9 +1261,10 @@ static void genTaskClauses(lower::AbstractConverter &converter,
cp.processMergeable(clauseOps);
cp.processPriority(stmtCtx, clauseOps);
cp.processUntied(clauseOps);
+ cp.processDetach(clauseOps);
// TODO Support delayed privatization.
- cp.processTODO<clause::Affinity, clause::Detach, clause::InReduction>(
+ cp.processTODO<clause::Affinity, clause::InReduction>(
loc, llvm::omp::Directive::OMPD_task);
}
@@ -2869,7 +2870,8 @@ static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
!std::holds_alternative<clause::UseDevicePtr>(clause.u) &&
!std::holds_alternative<clause::InReduction>(clause.u) &&
!std::holds_alternative<clause::Mergeable>(clause.u) &&
- !std::holds_alternative<clause::TaskReduction>(clause.u)) {
+ !std::holds_alternative<clause::TaskReduction>(clause.u) &&
+ !std::holds_alternative<clause::Detach>(clause.u)) {
std::string name =
parser::ToUpperCaseLetters(llvm::omp::getOpenMPClauseName(clause.id));
TODO(clauseLocation, name + " clause is not implemented yet");
diff --git a/flang/test/Lower/OpenMP/Todo/task_detach.f90 b/flang/test/Lower/OpenMP/task_detach.f90
similarity index 57%
rename from flang/test/Lower/OpenMP/Todo/task_detach.f90
rename to flang/test/Lower/OpenMP/task_detach.f90
index cb6943073d4b3a..f943abe6c591a0 100644
--- a/flang/test/Lower/OpenMP/Todo/task_detach.f90
+++ b/flang/test/Lower/OpenMP/task_detach.f90
@@ -1,12 +1,14 @@
! REQUIRES: openmp_runtime
-! RUN: %not_todo_cmd bbc -emit-fir %openmp_flags -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s
-! RUN: %not_todo_cmd %flang_fc1 -emit-fir %openmp_flags -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s
+! RUN: %flang_fc1 -emit-fir %openmp_flags -fopenmp -fopenmp-version=50 -o - %s | FileCheck %s
!===============================================================================
! `detach` clause
!===============================================================================
-! CHECK: not yet implemented: DETACH clause is not implemented yet
+!CHECK: omp.task detach(%[[EVENT_HANDLE:.*]] : !fir.ref<i64>) {
+!CHECK: fir.call @_QPfoo() fastmath<contract> : () -> ()
+!CHECK: omp.terminator
+!CHECK: }
subroutine omp_task_detach()
use omp_lib
integer (kind=omp_event_handle_kind) :: event
More information about the flang-commits
mailing list