llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-flang-semantics Author: Krzysztof Parzyszek (kparzysz) <details> <summary>Changes</summary> CheckNestedBlock no longer calls itself, which was the primary reason for the code to be in a separate function. --- Full diff: https://github.com/llvm/llvm-project/pull/181732.diff 2 Files Affected: - (modified) flang/lib/Semantics/check-omp-loop.cpp (+20-26) - (modified) flang/lib/Semantics/check-omp-structure.h (-2) ``````````diff diff --git a/flang/lib/Semantics/check-omp-loop.cpp b/flang/lib/Semantics/check-omp-loop.cpp index 8a74f8b98686b..c46f2562bbf49 100644 --- a/flang/lib/Semantics/check-omp-loop.cpp +++ b/flang/lib/Semantics/check-omp-loop.cpp @@ -281,30 +281,6 @@ static bool IsFullUnroll(const parser::OpenMPLoopConstruct &x) { return false; } -void OmpStructureChecker::CheckNestedBlock( - const parser::OpenMPLoopConstruct &x, const parser::Block &body) { - using BlockRange = parser::omp::BlockRange; - for (auto &stmt : BlockRange(body, BlockRange::Step::Over)) { - if (auto *dir{parser::Unwrap<parser::CompilerDirective>(stmt)}) { - context_.Say(dir->source, - "Compiler directives are not allowed inside OpenMP loop constructs"_warn_en_US); - } else if (auto *omp{parser::Unwrap<parser::OpenMPLoopConstruct>(stmt)}) { - if (!IsLoopTransforming(omp->BeginDir().DirId())) { - context_.Say(omp->source, - "Only loop-transforming OpenMP constructs are allowed inside OpenMP loop constructs"_err_en_US); - } - if (IsFullUnroll(*omp)) { - context_.Say(x.source, - "OpenMP loop construct cannot apply to a fully unrolled loop"_err_en_US); - } - } else if (!parser::Unwrap<parser::DoConstruct>(stmt)) { - parser::CharBlock source{parser::GetSource(stmt).value_or(x.source)}; - context_.Say(source, - "OpenMP loop construct can only contain DO loops or loop-nest-generating OpenMP constructs"_err_en_US); - } - } -} - static std::optional<size_t> CountGeneratedNests( const parser::ExecutionPartConstruct &epc) { if (parser::Unwrap<parser::DoConstruct>(epc)) { @@ -386,9 +362,27 @@ void OmpStructureChecker::CheckNestedConstruct( } } + // Check constructs contained in the body of the loop construct. auto &body{std::get<parser::Block>(x.t)}; - - CheckNestedBlock(x, body); + for (auto &stmt : BlockRange(body, BlockRange::Step::Over)) { + if (auto *dir{parser::Unwrap<parser::CompilerDirective>(stmt)}) { + context_.Say(dir->source, + "Compiler directives are not allowed inside OpenMP loop constructs"_warn_en_US); + } else if (auto *omp{parser::Unwrap<parser::OpenMPLoopConstruct>(stmt)}) { + if (!IsLoopTransforming(*omp)) { + context_.Say(omp->source, + "Only loop-transforming OpenMP constructs are allowed inside OpenMP loop constructs"_err_en_US); + } + if (IsFullUnroll(*omp)) { + context_.Say(x.source, + "OpenMP loop construct cannot apply to a fully unrolled loop"_err_en_US); + } + } else if (!parser::Unwrap<parser::DoConstruct>(stmt)) { + parser::CharBlock source{parser::GetSource(stmt).value_or(x.source)}; + context_.Say(source, + "OpenMP loop construct can only contain DO loops or loop-nest-generating OpenMP constructs"_err_en_US); + } + } // Check if a loop-nest-associated construct has only one top-level loop // in it. diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h index 21460ab0fbe08..2b3407964aa2b 100644 --- a/flang/lib/Semantics/check-omp-structure.h +++ b/flang/lib/Semantics/check-omp-structure.h @@ -327,8 +327,6 @@ class OmpStructureChecker : public OmpStructureCheckerBase { void CheckLooprangeBounds(const parser::OpenMPLoopConstruct &x); void CheckDistLinear(const parser::OpenMPLoopConstruct &x); void CheckSIMDNest(const parser::OpenMPConstruct &x); - void CheckNestedBlock( - const parser::OpenMPLoopConstruct &x, const parser::Block &body); void CheckNestedConstruct(const parser::OpenMPLoopConstruct &x); void CheckTargetNest(const parser::OpenMPConstruct &x); void CheckTargetUpdate(); `````````` </details> https://github.com/llvm/llvm-project/pull/181732 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
