[flang-commits] [flang] a8c80fe - [flang][OpenMP] Clean up check-omp-structure.h, NFC (#192695)
via flang-commits
flang-commits at lists.llvm.org
Fri Apr 17 09:49:35 PDT 2026
Author: Krzysztof Parzyszek
Date: 2026-04-17T11:49:30-05:00
New Revision: a8c80fe41fde8c66434af91fd5a0f2d3b71b28be
URL: https://github.com/llvm/llvm-project/commit/a8c80fe41fde8c66434af91fd5a0f2d3b71b28be
DIFF: https://github.com/llvm/llvm-project/commit/a8c80fe41fde8c66434af91fd5a0f2d3b71b28be.diff
LOG: [flang][OpenMP] Clean up check-omp-structure.h, NFC (#192695)
Group declarations to make it clear in which of the check-omp-*.cpp
files a given function is defined.
Delete declarations that don't have corresponding definitions.
Rename private member variable to follow naming convention.
Added:
Modified:
flang/lib/Semantics/check-omp-structure.cpp
flang/lib/Semantics/check-omp-structure.h
Removed:
################################################################################
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index bcce423f622aa..33ea727343cf4 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -1938,12 +1938,12 @@ void OmpStructureChecker::Enter(const parser::OmpAllocateDirective &x) {
const parser::OmpDirectiveSpecification &beginSpec{x.BeginDir()};
const parser::OmpDirectiveName &dirName{beginSpec.DirName()};
PushContextAndClauseSets(dirName.source, dirName.v);
- ++allocateDirectiveLevel;
+ ++allocateDirectiveLevel_;
bool isExecutable{partStack_.back() == PartKind::ExecutionPart};
unsigned version{context_.langOptions().OpenMPVersion};
- if (isExecutable && allocateDirectiveLevel == 1 && version >= 52) {
+ if (isExecutable && allocateDirectiveLevel_ == 1 && version >= 52) {
context_.Warn(common::UsageWarning::OpenMPUsage, dirName.source,
"The executable form of the OpenMP ALLOCATE directive has been deprecated, please use ALLOCATORS instead"_warn_en_US);
}
@@ -1984,11 +1984,11 @@ void OmpStructureChecker::Enter(const parser::OmpAllocateDirective &x) {
void OmpStructureChecker::Leave(const parser::OmpAllocateDirective &x) {
bool isExecutable{partStack_.back() == PartKind::ExecutionPart};
- if (isExecutable && allocateDirectiveLevel == 1) {
+ if (isExecutable && allocateDirectiveLevel_ == 1) {
CheckExecutableAllocateDirective(x);
}
- --allocateDirectiveLevel;
+ --allocateDirectiveLevel_;
dirContext_.pop_back();
}
diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h
index 7228464e75757..d3bbab6156f8b 100644
--- a/flang/lib/Semantics/check-omp-structure.h
+++ b/flang/lib/Semantics/check-omp-structure.h
@@ -184,34 +184,65 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
#include "llvm/Frontend/OpenMP/OMP.inc"
private:
- bool CheckAllowedClause(llvmOmpClause clause);
- void CheckVariableListItem(const SymbolSourceMap &symbols);
- void CheckDirectiveSpelling(
- parser::CharBlock spelling, llvm::omp::Directive id);
- void AnalyzeObject(const parser::OmpObject &object);
- void AnalyzeObjects(const parser::OmpObjectList &objects);
- void CheckMultipleOccurrence(semantics::UnorderedSymbolSet &listVars,
- const std::list<parser::Name> &nameList, const parser::CharBlock &item,
- const std::string &clauseName);
- void CheckMultListItems();
- void CheckStructureComponent(
- const parser::OmpObjectList &objects, llvm::omp::Clause clauseId);
- bool HasInvalidWorksharingNesting(
- const parser::OmpDirectiveName &name, const OmpDirectiveSet &);
+ // Most of these functions are defined in check-omp-structure.cpp, but
+ // some groups have their own files.
- bool IsCloselyNestedRegion(const OmpDirectiveSet &set);
- bool IsNestedInDirective(llvm::omp::Directive directive);
- bool IsCombinedParallelWorksharing(llvm::omp::Directive directive) const;
- bool InTargetRegion();
- void HasInvalidTeamsNesting(
- const llvm::omp::Directive &dir, const parser::CharBlock &source);
+ // check-omp-atomic.cpp
+ void CheckStorageOverlap(const evaluate::Expr<evaluate::SomeType> &,
+ llvm::ArrayRef<evaluate::Expr<evaluate::SomeType>>, parser::CharBlock);
+ void ErrorShouldBeVariable(const MaybeExpr &expr, parser::CharBlock source);
+ void CheckAtomicType(SymbolRef sym, parser::CharBlock source,
+ std::string_view name, bool checkTypeOnPointer = true);
+ void CheckAtomicVariable(const evaluate::Expr<evaluate::SomeType> &,
+ parser::CharBlock, bool checkTypeOnPointer = true);
+ std::pair<const parser::ExecutionPartConstruct *,
+ const parser::ExecutionPartConstruct *>
+ CheckUpdateCapture(const parser::ExecutionPartConstruct *ec1,
+ const parser::ExecutionPartConstruct *ec2, parser::CharBlock source);
+ void CheckAtomicCaptureAssignment(const evaluate::Assignment &capture,
+ const SomeExpr &atom, parser::CharBlock source);
+ void CheckAtomicReadAssignment(
+ const evaluate::Assignment &read, parser::CharBlock source);
+ void CheckAtomicWriteAssignment(
+ const evaluate::Assignment &write, parser::CharBlock source);
+ std::optional<evaluate::Assignment> CheckAtomicUpdateAssignment(
+ const evaluate::Assignment &update, parser::CharBlock source);
+ std::pair<bool, bool> CheckAtomicUpdateAssignmentRhs(const SomeExpr &atom,
+ const SomeExpr &rhs, parser::CharBlock source, bool suppressDiagnostics);
+ void CheckAtomicConditionalUpdateAssignment(const SomeExpr &cond,
+ parser::CharBlock condSource, const evaluate::Assignment &assign,
+ parser::CharBlock assignSource);
+ void CheckAtomicConditionalUpdateStmt(
+ const AnalyzedCondStmt &update, parser::CharBlock source);
+ void CheckAtomicUpdateOnly(const parser::OpenMPAtomicConstruct &x,
+ const parser::Block &body, parser::CharBlock source);
+ void CheckAtomicConditionalUpdate(const parser::OpenMPAtomicConstruct &x,
+ const parser::Block &body, parser::CharBlock source);
+ void CheckAtomicUpdateCapture(const parser::OpenMPAtomicConstruct &x,
+ const parser::Block &body, parser::CharBlock source);
+ void CheckAtomicConditionalUpdateCapture(
+ const parser::OpenMPAtomicConstruct &x, const parser::Block &body,
+ parser::CharBlock source);
+ void CheckAtomicRead(const parser::OpenMPAtomicConstruct &x);
+ void CheckAtomicWrite(const parser::OpenMPAtomicConstruct &x);
+ void CheckAtomicUpdate(const parser::OpenMPAtomicConstruct &x);
+
+ // check-omp-loop.cpp
void HasInvalidDistributeNesting(const parser::OpenMPLoopConstruct &x);
void HasInvalidLoopBinding(const parser::OpenMPLoopConstruct &x);
- bool HasRequires(llvm::omp::Clause req);
- // specific clause related
- void CheckAllowedMapTypes(
- parser::OmpMapType::Value, llvm::ArrayRef<parser::OmpMapType::Value>);
+ void CheckSIMDNest(const parser::OpenMPConstruct &x);
+ void CheckRectangularNest(const parser::OmpDirectiveSpecification &spec,
+ const omp::LoopSequence &nest);
+ void CheckNestedConstruct(const parser::OpenMPLoopConstruct &x);
+ const parser::Name GetLoopIndex(const parser::DoConstruct *x);
+ void SetLoopInfo(const parser::OpenMPLoopConstruct &x);
+ void CheckIterationVariableType(const parser::OpenMPLoopConstruct &x);
+ std::int64_t GetOrdCollapseLevel(const parser::OpenMPLoopConstruct &x);
+ void CheckAssociatedLoopConstraints(const parser::OpenMPLoopConstruct &x);
+ void CheckScanModifier(const parser::OmpClause::Reduction &x);
+ void CheckDistLinear(const parser::OpenMPLoopConstruct &x);
+ // check-omp-metadirective.cpp
const std::list<parser::OmpTraitProperty> &GetTraitPropertyList(
const parser::OmpTraitSelector &);
std::optional<llvm::omp::Clause> GetClauseFromProperty(
@@ -235,6 +266,32 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
void CheckTraitSimd(
const parser::OmpTraitSetSelector &, const parser::OmpTraitSelector &);
+ // check-omp-structure.cpp
+ bool CheckAllowedClause(llvmOmpClause clause);
+ void CheckVariableListItem(const SymbolSourceMap &symbols);
+ void CheckDirectiveSpelling(
+ parser::CharBlock spelling, llvm::omp::Directive id);
+ void AnalyzeObject(const parser::OmpObject &object);
+ void AnalyzeObjects(const parser::OmpObjectList &objects);
+ void CheckMultipleOccurrence(semantics::UnorderedSymbolSet &listVars,
+ const std::list<parser::Name> &nameList, const parser::CharBlock &item,
+ const std::string &clauseName);
+ void CheckMultListItems();
+ void CheckStructureComponent(
+ const parser::OmpObjectList &objects, llvm::omp::Clause clauseId);
+ bool HasInvalidWorksharingNesting(
+ const parser::OmpDirectiveName &name, const OmpDirectiveSet &);
+
+ bool IsCloselyNestedRegion(const OmpDirectiveSet &set);
+ bool IsNestedInDirective(llvm::omp::Directive directive);
+ bool IsCombinedParallelWorksharing(llvm::omp::Directive directive) const;
+ bool InTargetRegion();
+ void HasInvalidTeamsNesting(
+ const llvm::omp::Directive &dir, const parser::CharBlock &source);
+ bool HasRequires(llvm::omp::Clause req);
+ void CheckAllowedMapTypes(
+ parser::OmpMapType::Value, llvm::ArrayRef<parser::OmpMapType::Value>);
+
llvm::StringRef getClauseName(llvm::omp::Clause clause) override;
llvm::StringRef getDirectiveName(llvm::omp::Directive directive) override;
@@ -244,8 +301,6 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
std::optional<IterTy> FindDuplicate(RangeTy &&);
void CheckDependList(const parser::DataRef &);
- void CheckDependArraySection(
- const common::Indirection<parser::ArrayElement> &, const parser::Name &);
void CheckDoacross(const parser::OmpDoacross &doa);
void CheckDimsModifier(parser::CharBlock source, size_t numValues,
const parser::OmpDimsModifier &x);
@@ -273,8 +328,6 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
SymbolSourceMap &, const llvm::omp::Clause);
void CheckPrivateSymbolsInOuterCxt(
SymbolSourceMap &, DirectivesClauseTriple &, const llvm::omp::Clause);
- const parser::Name GetLoopIndex(const parser::DoConstruct *x);
- void SetLoopInfo(const parser::OpenMPLoopConstruct &x);
void CheckIsLoopIvPartOfClause(
llvmOmpClause clause, const parser::OmpObjectList &ompObjectList);
bool CheckTargetBlockOnlyTeams(const parser::Block &);
@@ -286,56 +339,7 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
void CheckIteratorRange(const parser::OmpIteratorSpecifier &x);
void CheckIteratorModifier(const parser::OmpIterator &x);
- void CheckIterationVariableType(const parser::OpenMPLoopConstruct &x);
- void CheckDoWhile(const parser::OpenMPLoopConstruct &x);
- void CheckAssociatedLoopConstraints(const parser::OpenMPLoopConstruct &x);
- template <typename T, typename D> bool IsOperatorValid(const T &, const D &);
-
- void CheckStorageOverlap(const evaluate::Expr<evaluate::SomeType> &,
- llvm::ArrayRef<evaluate::Expr<evaluate::SomeType>>, parser::CharBlock);
- void ErrorShouldBeVariable(const MaybeExpr &expr, parser::CharBlock source);
- void CheckAtomicType(SymbolRef sym, parser::CharBlock source,
- std::string_view name, bool checkTypeOnPointer = true);
- void CheckAtomicVariable(const evaluate::Expr<evaluate::SomeType> &,
- parser::CharBlock, bool checkTypeOnPointer = true);
- std::pair<const parser::ExecutionPartConstruct *,
- const parser::ExecutionPartConstruct *>
- CheckUpdateCapture(const parser::ExecutionPartConstruct *ec1,
- const parser::ExecutionPartConstruct *ec2, parser::CharBlock source);
- void CheckAtomicCaptureAssignment(const evaluate::Assignment &capture,
- const SomeExpr &atom, parser::CharBlock source);
- void CheckAtomicReadAssignment(
- const evaluate::Assignment &read, parser::CharBlock source);
- void CheckAtomicWriteAssignment(
- const evaluate::Assignment &write, parser::CharBlock source);
- std::optional<evaluate::Assignment> CheckAtomicUpdateAssignment(
- const evaluate::Assignment &update, parser::CharBlock source);
- std::pair<bool, bool> CheckAtomicUpdateAssignmentRhs(const SomeExpr &atom,
- const SomeExpr &rhs, parser::CharBlock source, bool suppressDiagnostics);
- void CheckAtomicConditionalUpdateAssignment(const SomeExpr &cond,
- parser::CharBlock condSource, const evaluate::Assignment &assign,
- parser::CharBlock assignSource);
- void CheckAtomicConditionalUpdateStmt(
- const AnalyzedCondStmt &update, parser::CharBlock source);
- void CheckAtomicUpdateOnly(const parser::OpenMPAtomicConstruct &x,
- const parser::Block &body, parser::CharBlock source);
- void CheckAtomicConditionalUpdate(const parser::OpenMPAtomicConstruct &x,
- const parser::Block &body, parser::CharBlock source);
- void CheckAtomicUpdateCapture(const parser::OpenMPAtomicConstruct &x,
- const parser::Block &body, parser::CharBlock source);
- void CheckAtomicConditionalUpdateCapture(
- const parser::OpenMPAtomicConstruct &x, const parser::Block &body,
- parser::CharBlock source);
- void CheckAtomicRead(const parser::OpenMPAtomicConstruct &x);
- void CheckAtomicWrite(const parser::OpenMPAtomicConstruct &x);
- void CheckAtomicUpdate(const parser::OpenMPAtomicConstruct &x);
- void CheckScanModifier(const parser::OmpClause::Reduction &x);
- void CheckDistLinear(const parser::OpenMPLoopConstruct &x);
- void CheckSIMDNest(const parser::OpenMPConstruct &x);
- void CheckRectangularNest(const parser::OmpDirectiveSpecification &spec,
- const omp::LoopSequence &nest);
- void CheckNestedConstruct(const parser::OpenMPLoopConstruct &x);
void CheckTargetNest(const parser::OpenMPConstruct &x);
void CheckTargetUpdate();
void CheckTaskgraph(const parser::OmpBlockConstruct &x);
@@ -346,7 +350,6 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
const std::optional<parser::OmpClauseList> &maybeClauses);
void CheckCancellationNest(
const parser::CharBlock &source, llvm::omp::Directive type);
- std::int64_t GetOrdCollapseLevel(const parser::OpenMPLoopConstruct &x);
void CheckReductionObjects(
const parser::OmpObjectList &objects, llvm::omp::Clause clauseId);
bool CheckReductionOperator(const parser::OmpReductionIdentifier &ident,
@@ -373,20 +376,14 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
const parser::Name *GetObjectName(const parser::OmpObject &object);
void CheckInitOnDepobj(const parser::OpenMPDepobjConstruct &depobj,
const parser::OmpClause &initClause);
-
void CheckAllowedRequiresClause(llvmOmpClause clause);
- bool deviceConstructFound_{false};
-
void AddEndDirectiveClauses(const parser::OmpClauseList &clauses);
void EnterDirectiveNest(const int index) { directiveNest_[index]++; }
void ExitDirectiveNest(const int index) { directiveNest_[index]--; }
int GetDirectiveNest(const int index) { return directiveNest_[index]; }
- inline void ErrIfAllocatableVariable(const parser::Variable &);
- inline void ErrIfLHSAndRHSSymbolsMatch(
- const parser::Variable &, const parser::Expr &);
- inline void ErrIfNonScalarAssignmentStmt(
- const parser::Variable &, const parser::Expr &);
+
+ bool deviceConstructFound_{false};
enum directiveNestType : int {
SIMDNest,
TargetBlockOnlyTeams,
@@ -398,7 +395,7 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
};
int directiveNest_[LastType + 1] = {0};
- int allocateDirectiveLevel{0};
+ int allocateDirectiveLevel_{0};
parser::CharBlock visitedAtomicSource_;
SymbolSourceMap deferredNonVariables_;
More information about the flang-commits
mailing list