[flang-commits] [flang] [Flang][OpenMP] MLIR lowering support for grainsize and num_tasks clause (PR #128490)
Kaviya Rajendiran via flang-commits
flang-commits at lists.llvm.org
Thu May 8 07:24:45 PDT 2025
https://github.com/kaviya2510 updated https://github.com/llvm/llvm-project/pull/128490
>From 2075eb0739938946e80b8e632f6512be735a04c7 Mon Sep 17 00:00:00 2001
From: Kaviya Rajendiran <kaviyara2000 at gmail.com>
Date: Wed, 7 May 2025 11:53:51 +0530
Subject: [PATCH 1/4] [Flang][OpenMP]Added MLIR lowering for grainsize and
num_tasks clause
---
flang/lib/Lower/OpenMP/ClauseProcessor.cpp | 42 +++++++++++++++
flang/lib/Lower/OpenMP/ClauseProcessor.h | 4 ++
flang/lib/Lower/OpenMP/OpenMP.cpp | 26 ++++-----
.../test/Lower/OpenMP/taskloop-grainsize.f90 | 51 ++++++++++++++++++
flang/test/Lower/OpenMP/taskloop-numtasks.f90 | 54 +++++++++++++++++++
5 files changed, 165 insertions(+), 12 deletions(-)
create mode 100644 flang/test/Lower/OpenMP/taskloop-grainsize.f90
create mode 100644 flang/test/Lower/OpenMP/taskloop-numtasks.f90
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
index 77b4622547d7a..ac940b5c74152 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
@@ -365,6 +365,27 @@ bool ClauseProcessor::processHint(mlir::omp::HintClauseOps &result) const {
return false;
}
+bool ClauseProcessor::processGrainsize(
+ lower::StatementContext &stmtCtx,
+ mlir::omp::GrainsizeClauseOps &result) const {
+ using grainsize = omp::clause::Grainsize;
+ if (auto *clause = findUniqueClause<grainsize>()) {
+ fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
+ mlir::MLIRContext *context = firOpBuilder.getContext();
+ const auto &modifier =
+ std::get<std::optional<grainsize::Prescriptiveness>>(clause->t);
+ if (modifier) {
+ result.grainsizeMod = mlir::omp::ClauseGrainsizeTypeAttr::get(
+ context, mlir::omp::ClauseGrainsizeType::Strict);
+ }
+ const auto &grainsizeExpr = std::get<omp::SomeExpr>(clause->t);
+ result.grainsize =
+ fir::getBase(converter.genExprValue(grainsizeExpr, stmtCtx));
+ return true;
+ }
+ return false;
+}
+
bool ClauseProcessor::processInclusive(
mlir::Location currentLocation,
mlir::omp::InclusiveClauseOps &result) const {
@@ -388,6 +409,27 @@ bool ClauseProcessor::processNowait(mlir::omp::NowaitClauseOps &result) const {
return markClauseOccurrence<omp::clause::Nowait>(result.nowait);
}
+bool ClauseProcessor::processNumTasks(
+ lower::StatementContext &stmtCtx,
+ mlir::omp::NumTasksClauseOps &result) const {
+ using numtasks = omp::clause::NumTasks;
+ if (auto *clause = findUniqueClause<numtasks>()) {
+ fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
+ mlir::MLIRContext *context = firOpBuilder.getContext();
+ const auto &modifier =
+ std::get<std::optional<numtasks::Prescriptiveness>>(clause->t);
+ if (modifier) {
+ result.numTasksMod = mlir::omp::ClauseNumTasksTypeAttr::get(
+ context, mlir::omp::ClauseNumTasksType::Strict);
+ }
+ const auto &numtasksExpr = std::get<omp::SomeExpr>(clause->t);
+ result.numTasks =
+ fir::getBase(converter.genExprValue(numtasksExpr, stmtCtx));
+ return true;
+ }
+ return false;
+}
+
bool ClauseProcessor::processNumTeams(
lower::StatementContext &stmtCtx,
mlir::omp::NumTeamsClauseOps &result) const {
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.h b/flang/lib/Lower/OpenMP/ClauseProcessor.h
index bdddeb145b496..375e24b80fc21 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.h
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.h
@@ -78,10 +78,14 @@ class ClauseProcessor {
mlir::omp::HasDeviceAddrClauseOps &result,
llvm::SmallVectorImpl<const semantics::Symbol *> &hasDeviceSyms) const;
bool processHint(mlir::omp::HintClauseOps &result) const;
+ bool processGrainsize(lower::StatementContext &stmtCtx,
+ mlir::omp::GrainsizeClauseOps &result) const;
bool processInclusive(mlir::Location currentLocation,
mlir::omp::InclusiveClauseOps &result) const;
bool processMergeable(mlir::omp::MergeableClauseOps &result) const;
bool processNowait(mlir::omp::NowaitClauseOps &result) const;
+ bool processNumTasks(lower::StatementContext &stmtCtx,
+ mlir::omp::NumTasksClauseOps &result) const;
bool processNumTeams(lower::StatementContext &stmtCtx,
mlir::omp::NumTeamsClauseOps &result) const;
bool processNumThreads(lower::StatementContext &stmtCtx,
diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp
index fcd3de9671098..af227b28d35b3 100644
--- a/flang/lib/Lower/OpenMP/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP/OpenMP.cpp
@@ -1806,17 +1806,19 @@ static void genTaskgroupClauses(lower::AbstractConverter &converter,
static void genTaskloopClauses(lower::AbstractConverter &converter,
semantics::SemanticsContext &semaCtx,
+ lower::StatementContext &stmtCtx,
const List<Clause> &clauses, mlir::Location loc,
mlir::omp::TaskloopOperands &clauseOps) {
ClauseProcessor cp(converter, semaCtx, clauses);
+ cp.processGrainsize(stmtCtx, clauseOps);
+ cp.processNumTasks(stmtCtx, clauseOps);
cp.processTODO<clause::Allocate, clause::Collapse, clause::Default,
- clause::Final, clause::Grainsize, clause::If,
- clause::InReduction, clause::Lastprivate, clause::Mergeable,
- clause::Nogroup, clause::NumTasks, clause::Priority,
- clause::Reduction, clause::Shared, clause::Untied>(
- loc, llvm::omp::Directive::OMPD_taskloop);
+ clause::Final, clause::If, clause::InReduction,
+ clause::Lastprivate, clause::Mergeable, clause::Nogroup,
+ clause::Priority, clause::Reduction, clause::Shared,
+ clause::Untied>(loc, llvm::omp::Directive::OMPD_taskloop);
}
static void genTaskwaitClauses(lower::AbstractConverter &converter,
@@ -3268,12 +3270,12 @@ genStandaloneSimd(lower::AbstractConverter &converter, lower::SymMap &symTable,
static mlir::omp::TaskloopOp genStandaloneTaskloop(
lower::AbstractConverter &converter, lower::SymMap &symTable,
- semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval,
- mlir::Location loc, const ConstructQueue &queue,
- ConstructQueue::const_iterator item) {
+ lower::StatementContext &stmtCtx, semantics::SemanticsContext &semaCtx,
+ lower::pft::Evaluation &eval, mlir::Location loc,
+ const ConstructQueue &queue, ConstructQueue::const_iterator item) {
mlir::omp::TaskloopOperands taskloopClauseOps;
- genTaskloopClauses(converter, semaCtx, item->clauses, loc, taskloopClauseOps);
-
+ genTaskloopClauses(converter, semaCtx, stmtCtx, item->clauses, loc,
+ taskloopClauseOps);
DataSharingProcessor dsp(converter, semaCtx, item->clauses, eval,
/*shouldCollectPreDeterminedSymbols=*/true,
enableDelayedPrivatization, symTable);
@@ -3734,8 +3736,8 @@ static void genOMPDispatch(lower::AbstractConverter &converter,
genTaskgroupOp(converter, symTable, semaCtx, eval, loc, queue, item);
break;
case llvm::omp::Directive::OMPD_taskloop:
- newOp = genStandaloneTaskloop(converter, symTable, semaCtx, eval, loc,
- queue, item);
+ newOp = genStandaloneTaskloop(converter, symTable, stmtCtx, semaCtx, eval,
+ loc, queue, item);
break;
case llvm::omp::Directive::OMPD_taskwait:
newOp = genTaskwaitOp(converter, symTable, semaCtx, eval, loc, queue, item);
diff --git a/flang/test/Lower/OpenMP/taskloop-grainsize.f90 b/flang/test/Lower/OpenMP/taskloop-grainsize.f90
new file mode 100644
index 0000000000000..fa684ad213d0a
--- /dev/null
+++ b/flang/test/Lower/OpenMP/taskloop-grainsize.f90
@@ -0,0 +1,51 @@
+! This test checks lowering of grainsize clause in taskloop directive.
+
+! RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = private} @[[I_PRIVATE_TEST2:.*]] : i32
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = firstprivate} @[[X_FIRSTPRIVATE_TEST2:.*]] : i32
+! CHECK-SAME: copy {
+! CHECK: hlfir.assign
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = private} @[[I_PRIVATE:.*]] : i32
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = firstprivate} @[[X_FIRSTPRIVATE:.*]] : i32
+! CHECK-SAME: copy {
+! CHECK: hlfir.assign
+
+! CHECK-LABEL: func.func @_QPtest_grainsize
+! CHECK: %[[ALLOCA_I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFtest_grainsizeEi"}
+! CHECK: %[[DECL_I:.*]]:2 = hlfir.declare %[[ALLOCA_I]] {uniq_name = "_QFtest_grainsizeEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
+! CHECK: %[[ALLOCA_X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFtest_grainsizeEx"}
+! CHECK: %[[DECL_X:.*]]:2 = hlfir.declare %[[ALLOCA_X]] {uniq_name = "_QFtest_grainsizeEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
+! CHECK: %[[GRAINSIZE:.*]] = arith.constant 10 : i32
+subroutine test_grainsize
+ integer :: i, x
+ ! CHECK: omp.taskloop grainsize(%[[GRAINSIZE]]: i32)
+ ! CHECK-SAME: private(@[[X_FIRSTPRIVATE]] %[[DECL_X]]#0 -> %[[ARG0:.*]], @[[I_PRIVATE]] %[[DECL_I]]#0 -> %[[ARG1:.*]] : !fir.ref<i32>, !fir.ref<i32>) {
+ ! CHECK: omp.loop_nest (%[[ARG2:.*]]) : i32 = (%{{.*}}) to (%{{.*}}) inclusive step (%{{.*}}) {
+ !$omp taskloop grainsize(10)
+ do i = 1, 1000
+ x = x + 1
+ end do
+ !$omp end taskloop
+end subroutine test_grainsize
+
+!CHECK-LABEL: func.func @_QPtest_grainsize_strict()
+subroutine test_grainsize_strict
+ integer :: i, x
+ ! CHECK: %[[GRAINSIZE:.*]] = arith.constant 10 : i32
+ ! CHECK: omp.taskloop grainsize(strict, %[[GRAINSIZE]]: i32)
+ !$omp taskloop grainsize(strict:10)
+ do i = 1, 1000
+ !CHECK: arith.addi
+ x = x + 1
+ end do
+ !$omp end taskloop
+end subroutine
\ No newline at end of file
diff --git a/flang/test/Lower/OpenMP/taskloop-numtasks.f90 b/flang/test/Lower/OpenMP/taskloop-numtasks.f90
new file mode 100644
index 0000000000000..38f3975bbd371
--- /dev/null
+++ b/flang/test/Lower/OpenMP/taskloop-numtasks.f90
@@ -0,0 +1,54 @@
+! This test checks lowering of num_tasks clause in taskloop directive.
+
+! RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 -o - %s 2>&1 | FileCheck %s
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = private} @[[I_PRIVATE_TEST2:.*]] : i32
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = firstprivate} @[[X_FIRSTPRIVATE_TEST2:.*]] : i32
+! CHECK-SAME: copy {
+! CHECK: hlfir.assign
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = private} @[[I_PRIVATE:.*]] : i32
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = firstprivate} @[[X_FIRSTPRIVATE:.*]] : i32
+! CHECK-SAME: copy {
+! CHECK: hlfir.assign
+
+! CHECK-LABEL: func.func @_QPtest_num_tasks
+! CHECK: %[[ALLOCA_I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFtest_num_tasksEi"}
+! CHECK: %[[DECL_I:.*]]:2 = hlfir.declare %[[ALLOCA_I]] {uniq_name = "_QFtest_num_tasksEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
+! CHECK: %[[ALLOCA_X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFtest_num_tasksEx"}
+! CHECK: %[[DECL_X:.*]]:2 = hlfir.declare %[[ALLOCA_X]] {uniq_name = "_QFtest_num_tasksEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
+! CHECK: %[[VAL_NUMTASKS:.*]] = arith.constant 10 : i32
+subroutine test_num_tasks
+ integer :: i, x
+ ! CHECK: omp.taskloop num_tasks(%[[VAL_NUMTASKS]]: i32)
+ ! CHECK-SAME: private(@[[X_FIRSTPRIVATE]] %[[DECL_X]]#0 -> %[[ARG0:.*]], @[[I_PRIVATE]] %[[DECL_I]]#0 -> %[[ARG1:.*]] : !fir.ref<i32>, !fir.ref<i32>) {
+ ! CHECK: omp.loop_nest (%[[ARG2:.*]]) : i32 = (%{{.*}}) to (%{{.*}}) inclusive step (%{{.*}}) {
+ !$omp taskloop num_tasks(10)
+ do i = 1, 1000
+ x = x + 1
+ end do
+ !$omp end taskloop
+end subroutine test_num_tasks
+
+! CHECK-LABEL: func.func @_QPtest_num_tasks_strict
+subroutine test_num_tasks_strict
+ integer :: x, i
+ ! CHECK: %[[NUM_TASKS:.*]] = arith.constant 10 : i32
+ ! CHECK: omp.taskloop num_tasks(strict, %[[NUM_TASKS]]: i32)
+ !$omp taskloop num_tasks(strict:10)
+ do i = 1, 100
+ !CHECK: arith.addi
+ x = x + 1
+ end do
+ !$omp end taskloop
+end subroutine
+
+
+
>From 916889f13e0a5d2b67d370e338ed1fcfd8c62b2a Mon Sep 17 00:00:00 2001
From: Kaviya Rajendiran <kaviyara2000 at gmail.com>
Date: Wed, 7 May 2025 12:04:30 +0530
Subject: [PATCH 2/4] [Flang][OpenMP] Formatting fix
---
flang/test/Lower/OpenMP/taskloop-grainsize.f90 | 2 +-
flang/test/Lower/OpenMP/taskloop-numtasks.f90 | 3 ---
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/flang/test/Lower/OpenMP/taskloop-grainsize.f90 b/flang/test/Lower/OpenMP/taskloop-grainsize.f90
index fa684ad213d0a..43db8acdeceac 100644
--- a/flang/test/Lower/OpenMP/taskloop-grainsize.f90
+++ b/flang/test/Lower/OpenMP/taskloop-grainsize.f90
@@ -48,4 +48,4 @@ subroutine test_grainsize_strict
x = x + 1
end do
!$omp end taskloop
-end subroutine
\ No newline at end of file
+end subroutine
diff --git a/flang/test/Lower/OpenMP/taskloop-numtasks.f90 b/flang/test/Lower/OpenMP/taskloop-numtasks.f90
index 38f3975bbd371..f68f3a2d6ad26 100644
--- a/flang/test/Lower/OpenMP/taskloop-numtasks.f90
+++ b/flang/test/Lower/OpenMP/taskloop-numtasks.f90
@@ -49,6 +49,3 @@ subroutine test_num_tasks_strict
end do
!$omp end taskloop
end subroutine
-
-
-
>From 9558691252b5ab9ab693aa017a963f8a1a7fa1b1 Mon Sep 17 00:00:00 2001
From: Kaviya Rajendiran <kaviyara2000 at gmail.com>
Date: Thu, 8 May 2025 13:13:06 +0530
Subject: [PATCH 3/4] [Flang][OpenMP] Added a condition to checks if the
modifier is 'strict'
---
flang/lib/Lower/OpenMP/ClauseProcessor.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
index ac940b5c74152..e2a35cee5c75e 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
@@ -374,7 +374,7 @@ bool ClauseProcessor::processGrainsize(
mlir::MLIRContext *context = firOpBuilder.getContext();
const auto &modifier =
std::get<std::optional<grainsize::Prescriptiveness>>(clause->t);
- if (modifier) {
+ if (modifier && *modifier == grainsize::Prescriptiveness::Strict) {
result.grainsizeMod = mlir::omp::ClauseGrainsizeTypeAttr::get(
context, mlir::omp::ClauseGrainsizeType::Strict);
}
@@ -418,7 +418,7 @@ bool ClauseProcessor::processNumTasks(
mlir::MLIRContext *context = firOpBuilder.getContext();
const auto &modifier =
std::get<std::optional<numtasks::Prescriptiveness>>(clause->t);
- if (modifier) {
+ if (modifier && *modifier == numtasks::Prescriptiveness::Strict) {
result.numTasksMod = mlir::omp::ClauseNumTasksTypeAttr::get(
context, mlir::omp::ClauseNumTasksType::Strict);
}
>From eb8d4d78e04f5274028fd55160bc7063db9eae18 Mon Sep 17 00:00:00 2001
From: Kaviya Rajendiran <kaviyara2000 at gmail.com>
Date: Thu, 8 May 2025 19:44:09 +0530
Subject: [PATCH 4/4] Formatting fix and update variable names
---
flang/lib/Lower/OpenMP/ClauseProcessor.cpp | 50 +++++++++++-----------
flang/lib/Lower/OpenMP/ClauseProcessor.h | 4 +-
2 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
index e2a35cee5c75e..7fbbcec753221 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
@@ -365,27 +365,6 @@ bool ClauseProcessor::processHint(mlir::omp::HintClauseOps &result) const {
return false;
}
-bool ClauseProcessor::processGrainsize(
- lower::StatementContext &stmtCtx,
- mlir::omp::GrainsizeClauseOps &result) const {
- using grainsize = omp::clause::Grainsize;
- if (auto *clause = findUniqueClause<grainsize>()) {
- fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
- mlir::MLIRContext *context = firOpBuilder.getContext();
- const auto &modifier =
- std::get<std::optional<grainsize::Prescriptiveness>>(clause->t);
- if (modifier && *modifier == grainsize::Prescriptiveness::Strict) {
- result.grainsizeMod = mlir::omp::ClauseGrainsizeTypeAttr::get(
- context, mlir::omp::ClauseGrainsizeType::Strict);
- }
- const auto &grainsizeExpr = std::get<omp::SomeExpr>(clause->t);
- result.grainsize =
- fir::getBase(converter.genExprValue(grainsizeExpr, stmtCtx));
- return true;
- }
- return false;
-}
-
bool ClauseProcessor::processInclusive(
mlir::Location currentLocation,
mlir::omp::InclusiveClauseOps &result) const {
@@ -412,13 +391,13 @@ bool ClauseProcessor::processNowait(mlir::omp::NowaitClauseOps &result) const {
bool ClauseProcessor::processNumTasks(
lower::StatementContext &stmtCtx,
mlir::omp::NumTasksClauseOps &result) const {
- using numtasks = omp::clause::NumTasks;
- if (auto *clause = findUniqueClause<numtasks>()) {
+ using NumTasks = omp::clause::NumTasks;
+ if (auto *clause = findUniqueClause<NumTasks>()) {
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
mlir::MLIRContext *context = firOpBuilder.getContext();
const auto &modifier =
- std::get<std::optional<numtasks::Prescriptiveness>>(clause->t);
- if (modifier && *modifier == numtasks::Prescriptiveness::Strict) {
+ std::get<std::optional<NumTasks::Prescriptiveness>>(clause->t);
+ if (modifier && *modifier == NumTasks::Prescriptiveness::Strict) {
result.numTasksMod = mlir::omp::ClauseNumTasksTypeAttr::get(
context, mlir::omp::ClauseNumTasksType::Strict);
}
@@ -976,6 +955,27 @@ bool ClauseProcessor::processDepend(lower::SymMap &symMap,
return findRepeatableClause<omp::clause::Depend>(process);
}
+bool ClauseProcessor::processGrainsize(
+ lower::StatementContext &stmtCtx,
+ mlir::omp::GrainsizeClauseOps &result) const {
+ using Grainsize = omp::clause::Grainsize;
+ if (auto *clause = findUniqueClause<Grainsize>()) {
+ fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
+ mlir::MLIRContext *context = firOpBuilder.getContext();
+ const auto &modifier =
+ std::get<std::optional<Grainsize::Prescriptiveness>>(clause->t);
+ if (modifier && *modifier == Grainsize::Prescriptiveness::Strict) {
+ result.grainsizeMod = mlir::omp::ClauseGrainsizeTypeAttr::get(
+ context, mlir::omp::ClauseGrainsizeType::Strict);
+ }
+ const auto &grainsizeExpr = std::get<omp::SomeExpr>(clause->t);
+ result.grainsize =
+ fir::getBase(converter.genExprValue(grainsizeExpr, stmtCtx));
+ return true;
+ }
+ return false;
+}
+
bool ClauseProcessor::processHasDeviceAddr(
lower::StatementContext &stmtCtx, mlir::omp::HasDeviceAddrClauseOps &result,
llvm::SmallVectorImpl<const semantics::Symbol *> &hasDeviceSyms) const {
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.h b/flang/lib/Lower/OpenMP/ClauseProcessor.h
index 375e24b80fc21..9541f3585ead3 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.h
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.h
@@ -73,13 +73,13 @@ class ClauseProcessor {
mlir::omp::FilterClauseOps &result) const;
bool processFinal(lower::StatementContext &stmtCtx,
mlir::omp::FinalClauseOps &result) const;
+ bool processGrainsize(lower::StatementContext &stmtCtx,
+ mlir::omp::GrainsizeClauseOps &result) const;
bool processHasDeviceAddr(
lower::StatementContext &stmtCtx,
mlir::omp::HasDeviceAddrClauseOps &result,
llvm::SmallVectorImpl<const semantics::Symbol *> &hasDeviceSyms) const;
bool processHint(mlir::omp::HintClauseOps &result) const;
- bool processGrainsize(lower::StatementContext &stmtCtx,
- mlir::omp::GrainsizeClauseOps &result) const;
bool processInclusive(mlir::Location currentLocation,
mlir::omp::InclusiveClauseOps &result) const;
bool processMergeable(mlir::omp::MergeableClauseOps &result) const;
More information about the flang-commits
mailing list