52class ClauseProcessor {
56 const List<Clause> &clauses)
57 : converter(converter), semaCtx(semaCtx), clauses(clauses) {}
60 bool processBare(mlir::omp::BareClauseOps &result)
const;
61 bool processBind(mlir::omp::BindClauseOps &result)
const;
62 bool processCancelDirectiveName(
63 mlir::omp::CancelDirectiveNameClauseOps &result)
const;
66 mlir::omp::LoopRelatedClauseOps &loopResult,
67 mlir::omp::CollapseClauseOps &collapseResult,
68 llvm::SmallVectorImpl<const semantics::Symbol *> &iv)
const;
70 mlir::omp::SizesClauseOps &result)
const;
72 mlir::omp::DeviceClauseOps &result)
const;
73 bool processDeviceType(mlir::omp::DeviceTypeClauseOps &result)
const;
75 mlir::omp::DistScheduleClauseOps &result)
const;
76 bool processExclusive(mlir::Location currentLocation,
77 mlir::omp::ExclusiveClauseOps &result)
const;
79 mlir::omp::FilterClauseOps &result)
const;
81 mlir::omp::FinalClauseOps &result)
const;
83 mlir::omp::GrainsizeClauseOps &result)
const;
84 bool processHasDeviceAddr(
86 mlir::omp::HasDeviceAddrClauseOps &result,
87 llvm::SmallVectorImpl<const semantics::Symbol *> &hasDeviceSyms)
const;
88 bool processHint(mlir::omp::HintClauseOps &result)
const;
89 bool processInclusive(mlir::Location currentLocation,
90 mlir::omp::InclusiveClauseOps &result)
const;
91 bool processMergeable(mlir::omp::MergeableClauseOps &result)
const;
92 bool processNogroup(mlir::omp::NogroupClauseOps &result)
const;
93 bool processNowait(mlir::omp::NowaitClauseOps &result)
const;
95 mlir::omp::NumTasksClauseOps &result)
const;
97 mlir::omp::NumTeamsClauseOps &result)
const;
99 mlir::omp::NumThreadsClauseOps &result)
const;
100 bool processOrder(mlir::omp::OrderClauseOps &result)
const;
101 bool processOrdered(mlir::omp::OrderedClauseOps &result)
const;
103 mlir::omp::PriorityClauseOps &result)
const;
104 bool processProcBind(mlir::omp::ProcBindClauseOps &result)
const;
106 mlir::omp::LoopNestOperands &result)
const;
107 bool processSafelen(mlir::omp::SafelenClauseOps &result)
const;
109 mlir::omp::ScheduleClauseOps &result)
const;
110 bool processSimdlen(mlir::omp::SimdlenClauseOps &result)
const;
112 mlir::omp::ThreadLimitClauseOps &result)
const;
113 bool processUntied(mlir::omp::UntiedClauseOps &result)
const;
115 bool processDetach(mlir::omp::DetachClauseOps &result)
const;
117 bool processAligned(mlir::omp::AlignedClauseOps &result)
const;
118 bool processAllocate(mlir::omp::AllocateClauseOps &result)
const;
119 bool processCopyin()
const;
120 bool processCopyprivate(mlir::Location currentLocation,
121 mlir::omp::CopyprivateClauseOps &result)
const;
123 DefaultMapsTy &result)
const;
125 mlir::omp::DependClauseOps &result)
const;
127 processEnter(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
128 bool processIf(omp::clause::If::DirectiveNameModifier directiveName,
129 mlir::omp::IfClauseOps &result)
const;
130 bool processInReduction(
131 mlir::Location currentLocation, mlir::omp::InReductionClauseOps &result,
132 llvm::SmallVectorImpl<const semantics::Symbol *> &outReductionSyms)
const;
133 bool processIsDevicePtr(
134 mlir::omp::IsDevicePtrClauseOps &result,
135 llvm::SmallVectorImpl<const semantics::Symbol *> &isDeviceSyms)
const;
136 bool processLinear(mlir::omp::LinearClauseOps &result)
const;
138 processLink(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
144 bool processMap(mlir::Location currentLocation,
146 mlir::omp::MapClauseOps &result,
147 llvm::omp::Directive directive = llvm::omp::OMPD_unknown,
148 llvm::SmallVectorImpl<const semantics::Symbol *> *mapSyms =
151 mlir::omp::MapClauseOps &result);
152 bool processNontemporal(mlir::omp::NontemporalClauseOps &result)
const;
153 bool processReduction(
154 mlir::Location currentLocation, mlir::omp::ReductionClauseOps &result,
155 llvm::SmallVectorImpl<const semantics::Symbol *> &reductionSyms)
const;
156 bool processTaskReduction(
157 mlir::Location currentLocation, mlir::omp::TaskReductionClauseOps &result,
158 llvm::SmallVectorImpl<const semantics::Symbol *> &outReductionSyms)
const;
159 bool processTo(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
160 bool processUseDeviceAddr(
162 mlir::omp::UseDeviceAddrClauseOps &result,
163 llvm::SmallVectorImpl<const semantics::Symbol *> &useDeviceSyms)
const;
164 bool processUseDevicePtr(
166 mlir::omp::UseDevicePtrClauseOps &result,
167 llvm::SmallVectorImpl<const semantics::Symbol *> &useDeviceSyms)
const;
172 template <
typename... Ts>
173 void processTODO(mlir::Location currentLocation,
174 llvm::omp::Directive directive)
const;
177 using ClauseIterator = List<Clause>::const_iterator;
182 template <
typename T>
187 template <
typename T>
188 bool findRepeatableClause(
193 template <
typename T>
194 bool markClauseOccurrence(mlir::UnitAttr &result)
const;
196 void processMapObjects(
198 const omp::ObjectList &objects, mlir::omp::ClauseMapFlags mapTypeBits,
199 std::map<Object, OmpMapParentAndMemberData> &parentMemberIndices,
200 llvm::SmallVectorImpl<mlir::Value> &mapVars,
201 llvm::SmallVectorImpl<const semantics::Symbol *> &mapSyms,
202 llvm::StringRef mapperIdNameRef =
"")
const;
206 List<Clause> clauses;