168 namespace tc = tomp::clause;
172 case llvm::omp::OMPC_map: {
173 tc::MapT<TypeTy, IdTy, ExprTy> m{
174 {std::nullopt, std::nullopt,
175 std::nullopt, std::nullopt,
176 std::nullopt, std::nullopt,
180 case llvm::omp::OMPC_firstprivate:
183 tc::FirstprivateT<TypeTy, IdTy, ExprTy>{
184 makeObjects(llvm::cast<clang::OMPFirstprivateClause>(c))},
186 case llvm::omp::OMPC_private:
189 llvm::cast<clang::OMPPrivateClause>(c))},
191 case llvm::omp::OMPC_shared:
194 llvm::cast<clang::OMPSharedClause>(c))},
196 case llvm::omp::OMPC_lastprivate:
199 tc::LastprivateT<TypeTy, IdTy, ExprTy>{
201 makeObjects(llvm::cast<clang::OMPLastprivateClause>(c))}},
203 case llvm::omp::OMPC_linear:
206 tc::LinearT<TypeTy, IdTy, ExprTy>{
209 makeObjects(llvm::cast<clang::OMPLinearClause>(c))}},
211 case llvm::omp::OMPC_reduction:
214 tc::ReductionT<TypeTy, IdTy, ExprTy>{
216 makeObjects(llvm::cast<clang::OMPReductionClause>(c))}},
218 case llvm::omp::OMPC_if: {
219 const auto &ic = llvm::cast<clang::OMPIfClause>(c);
220 std::optional<llvm::omp::Directive> mod;
221 if (ic.getNameModifier() != llvm::omp::OMPD_unknown)
222 mod = ic.getNameModifier();
225 tc::IfT<TypeTy, IdTy, ExprTy>{{mod,
231 case llvm::omp::OMPC_allocate:
233 tc::AllocateT<TypeTy, IdTy, ExprTy>{
234 {std::nullopt, std::nullopt, {}}},
236 case llvm::omp::OMPC_collapse:
237 return makeClause(
kind, tc::CollapseT<TypeTy, IdTy, ExprTy>{
nullptr},
239 case llvm::omp::OMPC_default:
242 tc::DefaultT<TypeTy, IdTy, ExprTy>{
243 tc::DefaultT<TypeTy, IdTy, ExprTy>::DataSharingAttribute::Shared},
245 case llvm::omp::OMPC_dyn_groupprivate:
247 tc::DynGroupprivateT<TypeTy, IdTy, ExprTy>{
248 {std::nullopt, std::nullopt,
nullptr}},
250 case llvm::omp::OMPC_nowait:
252 case llvm::omp::OMPC_ompx_attribute:
253 return makeClause(
kind, tc::OmpxAttributeT<TypeTy, IdTy, ExprTy>{}, c);
254 case llvm::omp::OMPC_ompx_bare:
255 return makeClause(
kind, tc::OmpxBareT<TypeTy, IdTy, ExprTy>{}, c);
256 case llvm::omp::OMPC_order:
259 tc::OrderT<TypeTy, IdTy, ExprTy>{
261 tc::OrderT<TypeTy, IdTy, ExprTy>::Ordering::Concurrent}},
263 case llvm::omp::OMPC_thread_limit:
264 return makeClause(
kind, tc::ThreadLimitT<TypeTy, IdTy, ExprTy>{{}},