[flang-commits] [flang] [flang][OpenMP] Use common utility functions to get affected nest depth (PR #191418)
Jason Van Beusekom via flang-commits
flang-commits at lists.llvm.org
Fri Apr 10 13:10:01 PDT 2026
================
@@ -2177,116 +2159,14 @@ bool OmpAttributeVisitor::Pre(const parser::DoConstruct &x) {
return true;
}
-static bool isSizesClause(const parser::OmpClause *clause) {
- return std::holds_alternative<parser::OmpClause::Sizes>(clause->u);
-}
-
-static bool isCollapseClause(const parser::OmpClause *clause) {
- return std::holds_alternative<parser::OmpClause::Collapse>(clause->u);
-}
-
-std::int64_t OmpAttributeVisitor::SetAssociatedMaxClause(
- llvm::SmallVector<std::int64_t> &levels,
- llvm::SmallVector<const parser::OmpClause *> &clauses) {
-
- // Find the tile level to ensure that the COLLAPSE clause value
- // does not exeed the number of tiled loops.
- std::int64_t tileLevel = 0;
- for (auto [level, clause] : llvm::zip_equal(levels, clauses))
- if (clause && isSizesClause(clause))
- tileLevel = level;
-
- std::int64_t maxLevel = 1;
- const parser::OmpClause *maxClause = nullptr;
- for (auto [level, clause] : llvm::zip_equal(levels, clauses)) {
- if (clause && isCollapseClause(clause) && tileLevel > 0 &&
- tileLevel < level) {
- return 1;
- }
-
- if (level > maxLevel) {
- maxLevel = level;
- maxClause = clause;
- }
- }
- if (maxClause)
- SetAssociatedClause(maxClause);
- return maxLevel;
-}
-
-std::int64_t OmpAttributeVisitor::GetNumAffectedLoopsFromLoopConstruct(
+int64_t OmpAttributeVisitor::GetNumAffectedLoopsFromLoopConstruct(
const parser::OpenMPLoopConstruct &x) {
- llvm::SmallVector<std::int64_t> levels;
- llvm::SmallVector<const parser::OmpClause *> clauses;
-
- CollectNumAffectedLoopsFromLoopConstruct(x, levels, clauses);
- return SetAssociatedMaxClause(levels, clauses);
-}
-
-void OmpAttributeVisitor::CollectNumAffectedLoopsFromLoopConstruct(
- const parser::OpenMPLoopConstruct &x,
- llvm::SmallVector<std::int64_t> &levels,
- llvm::SmallVector<const parser::OmpClause *> &clauses) {
- const auto &clauseList{x.BeginDir().Clauses()};
-
- CollectNumAffectedLoopsFromClauses(clauseList, levels, clauses);
- CollectNumAffectedLoopsFromInnerLoopContruct(x, levels, clauses);
-
- // OMPD_interchange with no permutation clause needs a level 2 nest
- if (x.BeginDir().DirId() == llvm::omp::Directive::OMPD_interchange &&
- !parser::omp::FindClause(
- x.BeginDir(), llvm::omp::Clause::OMPC_permutation)) {
- levels.push_back(2);
- clauses.push_back(nullptr);
- }
-}
-
-void OmpAttributeVisitor::CollectNumAffectedLoopsFromInnerLoopContruct(
- const parser::OpenMPLoopConstruct &x,
- llvm::SmallVector<std::int64_t> &levels,
- llvm::SmallVector<const parser::OmpClause *> &clauses) {
- for (auto &construct : std::get<parser::Block>(x.t)) {
- if (auto *innerConstruct{parser::omp::GetOmpLoop(construct)}) {
- CollectNumAffectedLoopsFromLoopConstruct(
- *innerConstruct, levels, clauses);
- }
- }
-}
-
-void OmpAttributeVisitor::CollectNumAffectedLoopsFromClauses(
- const parser::OmpClauseList &x, llvm::SmallVector<std::int64_t> &levels,
- llvm::SmallVector<const parser::OmpClause *> &clauses) {
- for (const auto &clause : x.v) {
- if (const auto oclause{
- std::get_if<parser::OmpClause::Ordered>(&clause.u)}) {
- std::int64_t level = 0;
- if (const auto v{EvaluateInt64(context_, oclause->v)}) {
- level = *v;
- }
- levels.push_back(level);
- clauses.push_back(&clause);
- }
-
- if (const auto cclause{
- std::get_if<parser::OmpClause::Collapse>(&clause.u)}) {
- std::int64_t level = 0;
- if (const auto v{EvaluateInt64(context_, cclause->v)}) {
- level = *v;
- }
- levels.push_back(level);
- clauses.push_back(&clause);
- }
-
- if (const auto tclause{std::get_if<parser::OmpClause::Sizes>(&clause.u)}) {
- levels.push_back(tclause->v.size());
- clauses.push_back(&clause);
- }
- if (const auto iclause{
- std::get_if<parser::OmpClause::Permutation>(&clause.u)}) {
- levels.push_back(iclause->v.size());
- clauses.push_back(&clause);
- }
- }
+ unsigned version{context_.langOptions().OpenMPVersion};
----------------
Jason-Van-Beusekom wrote:
Nit,
Do we still want this in a function? Couldn't we just have this logic where we call it
https://github.com/llvm/llvm-project/pull/191418
More information about the flang-commits
mailing list