42 const AccClauseSet &set, std::function<
void(llvm::acc::Clause)> func);
44class AccStructureChecker
45 :
public DirectiveStructureChecker<llvm::acc::Directive, llvm::acc::Clause,
46 parser::AccClause, AccClauseSet> {
49 : DirectiveStructureChecker(context,
50#define GEN_FLANG_DIRECTIVE_CLAUSE_MAP
51#include
"llvm/Frontend/OpenACC/ACC.inc"
93#define GEN_FLANG_CLAUSE_CHECK_ENTER
94#include "llvm/Frontend/OpenACC/ACC.inc"
100 const SomeExpr &updateVar,
const SomeExpr *captureVar);
102 const SomeExpr *updateVar,
const SomeExpr &captureVar);
104 const SomeExpr &updateVar,
const SomeExpr *captureVar);
105 void CheckAtomicUpdateVariable(
107 void CheckAtomicCaptureVariable(
110 bool CheckAllowedModifier(llvm::acc::Clause clause);
111 bool IsComputeConstruct(llvm::acc::Directive directive)
const;
112 bool IsLoopConstruct(llvm::acc::Directive directive)
const;
113 std::optional<llvm::acc::Directive> getParentComputeConstruct()
const;
114 bool IsInsideComputeConstruct()
const;
115 bool IsInsideKernelsConstruct()
const;
116 void CheckNotInComputeConstruct();
117 std::optional<std::int64_t> getGangDimensionSize(
118 DirectiveContext &dirContext);
119 void CheckNotInSameOrSubLevelLoopConstruct();
120 void CheckLoopLevelClauseValue(llvm::StringRef clauseName);
121 void CheckLoopLevelClauseKernelsConflicts();
122 void CheckRoutineCallInLoop(
const Symbol &);
123 void CheckMultipleOccurrenceInDeclare(
124 const parser::AccObjectList &, llvm::acc::Clause);
125 void CheckMultipleOccurrenceInDeclare(
127 llvm::StringRef getClauseName(llvm::acc::Clause clause)
override;
128 llvm::StringRef getDirectiveName(llvm::acc::Directive directive)
override;
130 llvm::SmallDenseMap<Symbol *, llvm::acc::Clause> declareSymbols;
131 unsigned loopNestLevel = 0;
Definition semantics.h:67