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 processBind(mlir::omp::BindClauseOps &result)
const;
64 bool processCancelDirectiveName(
65 mlir::omp::CancelDirectiveNameClauseOps &result)
const;
68 mlir::omp::LoopRelatedClauseOps &loopResult,
69 mlir::omp::CollapseClauseOps &collapseResult,
70 llvm::SmallVectorImpl<const semantics::Symbol *> &iv)
const;
72 mlir::omp::SizesClauseOps &result)
const;
74 mlir::omp::LooprangeClauseOps &result,
75 int64_t &count)
const;
77 mlir::omp::DeviceClauseOps &result)
const;
78 bool processDeviceType(mlir::omp::DeviceTypeClauseOps &result)
const;
80 mlir::omp::DistScheduleClauseOps &result)
const;
81 bool processExclusive(mlir::Location currentLocation,
82 mlir::omp::ExclusiveClauseOps &result)
const;
84 mlir::omp::FilterClauseOps &result)
const;
86 mlir::omp::FinalClauseOps &result)
const;
88 mlir::omp::GrainsizeClauseOps &result)
const;
91 mlir::omp::HasDeviceAddrClauseOps &result,
92 llvm::SmallVectorImpl<Object> &hasDeviceObjects)
const;
93 bool processHint(mlir::omp::HintClauseOps &result)
const;
94 bool processInbranch(mlir::omp::InbranchClauseOps &result)
const;
95 bool processInclusive(mlir::Location currentLocation,
96 mlir::omp::InclusiveClauseOps &result)
const;
97 bool processInitializer(
99 ReductionProcessor::GenInitValueCBTy &genInitValueCB,
101 unsigned instanceIdx = 0)
const;
102 bool processMergeable(mlir::omp::MergeableClauseOps &result)
const;
103 bool processNogroup(mlir::omp::NogroupClauseOps &result)
const;
104 bool processNotinbranch(mlir::omp::NotinbranchClauseOps &result)
const;
105 bool processNowait(mlir::omp::NowaitClauseOps &result)
const;
107 mlir::omp::NumTasksClauseOps &result)
const;
109 mlir::omp::NumTeamsClauseOps &result)
const;
111 mlir::omp::NumThreadsClauseOps &result)
const;
112 bool processOrder(mlir::omp::OrderClauseOps &result)
const;
113 bool processOrdered(mlir::omp::OrderedClauseOps &result)
const;
114 bool processFull()
const;
115 bool processPartial(std::optional<int64_t> &result)
const;
117 mlir::omp::PriorityClauseOps &result)
const;
118 bool processProcBind(mlir::omp::ProcBindClauseOps &result)
const;
120 mlir::omp::LoopNestOperands &result)
const;
121 bool processSafelen(mlir::omp::SafelenClauseOps &result)
const;
123 mlir::omp::ScheduleClauseOps &result)
const;
124 bool processSimdlen(mlir::omp::SimdlenClauseOps &result)
const;
125 bool processSimd(mlir::omp::OrderedRegionOperands &result)
const;
127 mlir::omp::ThreadLimitClauseOps &result)
const;
128 bool processThreadset(mlir::omp::ThreadsetClauseOps &result)
const;
129 bool processUntied(mlir::omp::UntiedClauseOps &result)
const;
130 bool processDetach(mlir::omp::DetachClauseOps &result)
const;
132 bool processAffinity(mlir::omp::AffinityClauseOps &result)
const;
133 bool processAligned(mlir::omp::AlignedClauseOps &result)
const;
134 bool processAllocate(mlir::omp::AllocateClauseOps &result,
135 bool supportAlignment =
false)
const;
136 bool processCopyin()
const;
137 bool processCopyprivate(mlir::Location currentLocation,
138 mlir::omp::CopyprivateClauseOps &result)
const;
140 DefaultMapsTy &result)
const;
142 mlir::omp::DependClauseOps &result)
const;
145 mlir::omp::DynGroupprivateClauseOps &result)
const;
147 processEnter(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
148 bool processIf(omp::clause::If::DirectiveNameModifier directiveName,
149 mlir::omp::IfClauseOps &result)
const;
151 processInReduction(mlir::Location currentLocation,
152 mlir::omp::InReductionClauseOps &result,
153 llvm::SmallVectorImpl<Object> &outReductionObjects)
const;
155 mlir::omp::IsDevicePtrClauseOps &result,
156 llvm::SmallVectorImpl<Object> &isDeviceObjects)
const;
157 bool processLinear(mlir::omp::LinearClauseOps &result,
158 bool isDeclareSimd =
false)
const;
160 processLink(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
166 bool processMap(mlir::Location currentLocation,
168 mlir::omp::MapClauseOps &result,
169 llvm::omp::Directive directive = llvm::omp::OMPD_unknown,
170 llvm::SmallVectorImpl<Object> *mapObjects =
nullptr)
const;
172 mlir::omp::MapClauseOps &result);
173 bool processNontemporal(mlir::omp::NontemporalClauseOps &result)
const;
174 bool processReduction(mlir::Location currentLocation,
175 mlir::omp::ReductionClauseOps &result,
176 llvm::SmallVectorImpl<Object> &reductionObjects,
177 llvm::DenseMap<const semantics::Symbol *, mlir::Value>
178 *reductionVarCache =
nullptr)
const;
179 bool processTaskReduction(
180 mlir::Location currentLocation, mlir::omp::TaskReductionClauseOps &result,
181 llvm::SmallVectorImpl<Object> &outReductionObjects)
const;
182 bool processTo(llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &result)
const;
185 mlir::omp::UseDeviceAddrClauseOps &result,
186 llvm::SmallVectorImpl<Object> &useDeviceObjects)
const;
189 mlir::omp::UseDevicePtrClauseOps &result,
190 llvm::SmallVectorImpl<Object> &useDeviceObjects)
const;
191 bool processUniform(mlir::omp::UniformClauseOps &result)
const;
196 template <
typename... Ts>
197 void processTODO(mlir::Location currentLocation,
198 llvm::omp::Directive directive)
const;
201 using ClauseIterator = List<Clause>::const_iterator;
206 template <
typename T>
211 template <
typename T>
212 bool findRepeatableClause(
217 template <
typename T>
218 bool markClauseOccurrence(mlir::UnitAttr &result)
const;
220 void processMapObjects(
222 const omp::ObjectList &objects, mlir::omp::ClauseMapFlags mapTypeBits,
223 std::map<Object, OmpMapParentAndMemberData> &parentMemberIndices,
224 llvm::SmallVectorImpl<mlir::Value> &mapVars,
225 llvm::SmallVectorImpl<Object> &mapObjects,
226 llvm::StringRef mapperIdNameRef =
"",
bool isMotionModifier =
false,
227 llvm::omp::Directive directive = llvm::omp::OMPD_unknown)
const;
231 List<Clause> clauses;