[llvm-branch-commits] [flang] [flang][OpenMP] Inline CheckNestedBlock, NFC (PR #181732)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Feb 16 11:34:58 PST 2026
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
More information about the llvm-branch-commits
mailing list