52class ClauseProcessor {
56 const List<Clause> &clauses)
57 : converter(converter), semaCtx(semaCtx), clauses(clauses) {}
60 bool processAlign(mlir::omp::AlignClauseOps &result)
const;
62 mlir::omp::AllocatorClauseOps &result)
const;
63 bool processBare(mlir::omp::BareClauseOps &result)
const;
64 bool processBind(mlir::omp::BindClauseOps &result)
const;
65 bool processCancelDirectiveName(
66 mlir::omp::CancelDirectiveNameClauseOps &result)
const;
69 mlir::omp::LoopRelatedClauseOps &loopResult,
70 mlir::omp::CollapseClauseOps &collapseResult,
71 llvm::SmallVectorImpl<const semantics::Symbol *> &iv)
const;
73 mlir::omp::SizesClauseOps &result)
const;
75 mlir::omp::LooprangeClauseOps &result,
76 int64_t &count)
const;
78 mlir::omp::DeviceClauseOps &result)
const;
79 bool processDeviceType(mlir::omp::DeviceTypeClauseOps &result)
const;
81 mlir::omp::DistScheduleClauseOps &result)
const;
82 bool processExclusive(mlir::Location currentLocation,
83 mlir::omp::ExclusiveClauseOps &result)
const;
85 mlir::omp::FilterClauseOps &result)
const;
87 mlir::omp::FinalClauseOps &result)
const;
89 mlir::omp::GrainsizeClauseOps &result)
const;
90 bool processHasDeviceAddr(
92 mlir::omp::HasDeviceAddrClauseOps &result,
93 llvm::SmallVectorImpl<const semantics::Symbol *> &hasDeviceSyms)
const;
94 bool processHint(mlir::omp::HintClauseOps &result)
const;
95 bool processInbranch(mlir::omp::InbranchClauseOps &result)
const;
96 bool processInclusive(mlir::Location currentLocation,
97 mlir::omp::InclusiveClauseOps &result)
const;
98 bool processInitializer(
100 ReductionProcessor::GenInitValueCBTy &genInitValueCB)
const;
101 bool processMergeable(mlir::omp::MergeableClauseOps &result)
const;
102 bool processNogroup(mlir::omp::NogroupClauseOps &result)
const;
103 bool processNotinbranch(mlir::omp::NotinbranchClauseOps &result)
const;
104 bool processNowait(mlir::omp::NowaitClauseOps &result)
const;
106 mlir::omp::NumTasksClauseOps &result)
const;
108 mlir::omp::NumTeamsClauseOps &result)
const;
110 mlir::omp::NumThreadsClauseOps &result)
const;
111 bool processOrder(mlir::omp::OrderClauseOps &result)
const;
112 bool processOrdered(mlir::omp::OrderedClauseOps &result)
const;
114 mlir::omp::PriorityClauseOps &result)
const;
115 bool processProcBind(mlir::omp::ProcBindClauseOps &result)
const;
117 mlir::omp::LoopNestOperands &result)
const;
118 bool processSafelen(mlir::omp::SafelenClauseOps &result)
const;
120 mlir::omp::ScheduleClauseOps &result)
const;
121 bool processSimdlen(mlir::omp::SimdlenClauseOps &result)
const;
122 bool processSimd(mlir::omp::OrderedRegionOperands &result)
const;
124 mlir::omp::ThreadLimitClauseOps &result)
const;
125 bool processUntied(mlir::omp::UntiedClauseOps &result)
const;
127 bool processDetach(mlir::omp::DetachClauseOps &result)
const;
129 bool processAffinity(mlir::omp::AffinityClauseOps &result)
const;
130 bool processAligned(mlir::omp::AlignedClauseOps &result)
const;
131 bool processAllocate(mlir::omp::AllocateClauseOps &result)
const;
132 bool processCopyin()
const;
133 bool processCopyprivate(mlir::Location currentLocation,
134 mlir::omp::CopyprivateClauseOps &result)
const;
136 DefaultMapsTy &result)
const;
138 mlir::omp::DependClauseOps &result)
const;
140 processEnter(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
141 bool processIf(omp::clause::If::DirectiveNameModifier directiveName,
142 mlir::omp::IfClauseOps &result)
const;
143 bool processInReduction(
144 mlir::Location currentLocation, mlir::omp::InReductionClauseOps &result,
145 llvm::SmallVectorImpl<const semantics::Symbol *> &outReductionSyms)
const;
146 bool processIsDevicePtr(
148 llvm::SmallVectorImpl<const semantics::Symbol *> &isDeviceSyms)
const;
149 bool processLinear(mlir::omp::LinearClauseOps &result,
150 bool isDeclareSimd =
false)
const;
152 processLink(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
158 bool processMap(mlir::Location currentLocation,
160 mlir::omp::MapClauseOps &result,
161 llvm::omp::Directive directive = llvm::omp::OMPD_unknown,
162 llvm::SmallVectorImpl<const semantics::Symbol *> *mapSyms =
165 mlir::omp::MapClauseOps &result);
166 bool processNontemporal(mlir::omp::NontemporalClauseOps &result)
const;
167 bool processReduction(
168 mlir::Location currentLocation, mlir::omp::ReductionClauseOps &result,
169 llvm::SmallVectorImpl<const semantics::Symbol *> &reductionSyms)
const;
170 bool processTaskReduction(
171 mlir::Location currentLocation, mlir::omp::TaskReductionClauseOps &result,
172 llvm::SmallVectorImpl<const semantics::Symbol *> &outReductionSyms)
const;
173 bool processTo(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
174 bool processUseDeviceAddr(
176 mlir::omp::UseDeviceAddrClauseOps &result,
177 llvm::SmallVectorImpl<const semantics::Symbol *> &useDeviceSyms)
const;
178 bool processUseDevicePtr(
180 mlir::omp::UseDevicePtrClauseOps &result,
181 llvm::SmallVectorImpl<const semantics::Symbol *> &useDeviceSyms)
const;
182 bool processUniform(mlir::omp::UniformClauseOps &result)
const;
187 template <
typename... Ts>
188 void processTODO(mlir::Location currentLocation,
189 llvm::omp::Directive directive)
const;
192 using ClauseIterator = List<Clause>::const_iterator;
197 template <
typename T>
202 template <
typename T>
203 bool findRepeatableClause(
208 template <
typename T>
209 bool markClauseOccurrence(mlir::UnitAttr &result)
const;
211 void processMapObjects(
213 const omp::ObjectList &objects, mlir::omp::ClauseMapFlags mapTypeBits,
214 std::map<Object, OmpMapParentAndMemberData> &parentMemberIndices,
215 llvm::SmallVectorImpl<mlir::Value> &mapVars,
216 llvm::SmallVectorImpl<const semantics::Symbol *> &mapSyms,
217 llvm::StringRef mapperIdNameRef =
"",
bool isMotionModifier =
false,
218 llvm::omp::Directive directive = llvm::omp::OMPD_unknown)
const;
222 List<Clause> clauses;