[flang-commits] [flang] 3064646 - [flang][OpenMP] Handle multiple ranges in `num_teams` clause (#102535)
via flang-commits
flang-commits at lists.llvm.org
Fri Aug 9 05:55:30 PDT 2024
Author: Krzysztof Parzyszek
Date: 2024-08-09T07:55:26-05:00
New Revision: 306464615a7977cd73f16e3e3cea5528f37e1645
URL: https://github.com/llvm/llvm-project/commit/306464615a7977cd73f16e3e3cea5528f37e1645
DIFF: https://github.com/llvm/llvm-project/commit/306464615a7977cd73f16e3e3cea5528f37e1645.diff
LOG: [flang][OpenMP] Handle multiple ranges in `num_teams` clause (#102535)
Commit cee594cf36 added support to clang for multiple expressions in
`num_teams` clause. Add follow-up changes to flang.
Added:
Modified:
flang/lib/Lower/OpenMP/ClauseProcessor.cpp
flang/lib/Lower/OpenMP/Clauses.cpp
llvm/include/llvm/Frontend/OpenMP/ClauseT.h
Removed:
################################################################################
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
index 310c0b0b5fb636..c30844f40b7e04 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
@@ -382,8 +382,12 @@ bool ClauseProcessor::processNumTeams(
// TODO Get lower and upper bounds for num_teams when parser is updated to
// accept both.
if (auto *clause = findUniqueClause<omp::clause::NumTeams>()) {
- // auto lowerBound = std::get<std::optional<ExprTy>>(clause->t);
- auto &upperBound = std::get<ExprTy>(clause->t);
+ // The num_teams directive accepts a list of team lower/upper bounds.
+ // This is an extension to support grid specification for ompx_bare.
+ // Here, only expect a single element in the list.
+ assert(clause->v.size() == 1);
+ // auto lowerBound = std::get<std::optional<ExprTy>>(clause->v[0]->t);
+ auto &upperBound = std::get<ExprTy>(clause->v[0].t);
result.numTeamsUpper =
fir::getBase(converter.genExprValue(upperBound, stmtCtx));
return true;
diff --git a/flang/lib/Lower/OpenMP/Clauses.cpp b/flang/lib/Lower/OpenMP/Clauses.cpp
index 256a603014e496..75054204bb19db 100644
--- a/flang/lib/Lower/OpenMP/Clauses.cpp
+++ b/flang/lib/Lower/OpenMP/Clauses.cpp
@@ -935,8 +935,9 @@ NumTasks make(const parser::OmpClause::NumTasks &inp,
NumTeams make(const parser::OmpClause::NumTeams &inp,
semantics::SemanticsContext &semaCtx) {
// inp.v -> parser::ScalarIntExpr
- return NumTeams{{/*LowerBound=*/std::nullopt,
- /*UpperBound=*/makeExpr(inp.v, semaCtx)}};
+ List<NumTeams::Range> v{{{/*LowerBound=*/std::nullopt,
+ /*UpperBound=*/makeExpr(inp.v, semaCtx)}}};
+ return NumTeams{/*List=*/v};
}
NumThreads make(const parser::OmpClause::NumThreads &inp,
diff --git a/llvm/include/llvm/Frontend/OpenMP/ClauseT.h b/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
index a16673f82aa9c7..43b2fb558e0ead 100644
--- a/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
+++ b/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
@@ -885,10 +885,20 @@ struct NumTasksT {
// V5.2: [10.2.1] `num_teams` clause
template <typename T, typename I, typename E> //
struct NumTeamsT {
- using TupleTrait = std::true_type;
using LowerBound = E;
using UpperBound = E;
- std::tuple<OPT(LowerBound), UpperBound> t;
+
+ // The name Range is not a spec name.
+ struct Range {
+ using TupleTrait = std::true_type;
+ std::tuple<OPT(LowerBound), UpperBound> t;
+ };
+
+ // The name List is not a spec name. The list is an extension to allow
+ // specifying a grid with connection with the ompx_bare clause.
+ using List = ListT<Range>;
+ using WrapperTrait = std::true_type;
+ List v;
};
// V5.2: [10.1.2] `num_threads` clause
More information about the flang-commits
mailing list