Lines Matching defs:clause

35 translateScheduleModifier(const omp::clause::Schedule::OrderingModifier &m) {
37 case omp::clause::Schedule::OrderingModifier::Monotonic:
39 case omp::clause::Schedule::OrderingModifier::Nonmonotonic:
46 getScheduleModifier(const omp::clause::Schedule &clause) {
47 using Schedule = omp::clause::Schedule;
49 std::get<std::optional<Schedule::OrderingModifier>>(clause.t);
56 getSimdModifier(const omp::clause::Schedule &clause) {
57 using Schedule = omp::clause::Schedule;
59 std::get<std::optional<Schedule::ChunkModifier>>(clause.t);
67 const omp::clause::Allocate &clause,
74 auto &objects = std::get<omp::ObjectList>(clause.t);
76 using Allocate = omp::clause::Allocate;
78 if (std::get<std::optional<Allocate::AlignModifier>>(clause.t))
81 // Check if allocate clause has allocator specified. If so, add it
85 if (auto &mod = std::get<std::optional<ComplexModifier>>(clause.t)) {
99 const omp::clause::Bind &clause) {
101 switch (clause.v) {
102 case omp::clause::Bind::Binding::Teams:
105 case omp::clause::Bind::Binding::Parallel:
108 case omp::clause::Bind::Binding::Thread:
118 const omp::clause::ProcBind &clause) {
120 switch (clause.v) {
121 case omp::clause::ProcBind::AffinityPolicy::Master:
124 case omp::clause::ProcBind::AffinityPolicy::Close:
127 case omp::clause::ProcBind::AffinityPolicy::Spread:
130 case omp::clause::ProcBind::AffinityPolicy::Primary:
140 const omp::clause::DependenceType kind) {
146 case omp::clause::DependenceType::In:
149 case omp::clause::DependenceType::Out:
152 case omp::clause::DependenceType::Inout:
155 case omp::clause::DependenceType::Mutexinoutset:
158 case omp::clause::DependenceType::Inoutset:
161 case omp::clause::DependenceType::Depobj:
164 case omp::clause::DependenceType::Sink:
165 case omp::clause::DependenceType::Source:
175 const omp::clause::If &clause,
176 omp::clause::If::DirectiveNameModifier directiveName,
178 // Only consider the clause if it's intended for the given directive.
180 std::get<std::optional<omp::clause::If::DirectiveNameModifier>>(clause.t);
187 converter.genExprValue(std::get<omp::SomeExpr>(clause.t), stmtCtx));
227 return markClauseOccurrence<omp::clause::OmpxBare>(result.bare);
231 if (auto *clause = findUniqueClause<omp::clause::Bind>()) {
233 result.bindKind = genBindKindAttr(firOpBuilder, *clause);
253 if (auto *clause = findUniqueClause<omp::clause::Collapse>()) {
254 collapseValue = evaluate::ToInt64(clause->v).value();
297 if (auto *clause = findUniqueClause<omp::clause::Device>(&source)) {
300 std::get<std::optional<omp::clause::Device::DeviceModifier>>(
301 clause->t)) {
302 if (deviceModifier == omp::clause::Device::DeviceModifier::Ancestor) {
306 const auto &deviceExpr = std::get<omp::SomeExpr>(clause->t);
315 if (auto *clause = findUniqueClause<omp::clause::DeviceType>()) {
317 switch (clause->v) {
318 case omp::clause::DeviceType::DeviceTypeDescription::Nohost:
321 case omp::clause::DeviceType::DeviceTypeDescription::Host:
324 case omp::clause::DeviceType::DeviceTypeDescription::Any:
336 if (auto *clause = findUniqueClause<omp::clause::DistSchedule>()) {
338 const auto &chunkSize = std::get<std::optional<ExprTy>>(clause->t);
349 if (auto *clause = findUniqueClause<omp::clause::Filter>()) {
351 fir::getBase(converter.genExprValue(clause->v, stmtCtx));
360 if (auto *clause = findUniqueClause<omp::clause::Final>(&source)) {
365 fir::getBase(converter.genExprValue(clause->v, stmtCtx));
374 if (auto *clause = findUniqueClause<omp::clause::Hint>()) {
376 int64_t hintValue = *evaluate::ToInt64(clause->v);
385 return markClauseOccurrence<omp::clause::Mergeable>(result.mergeable);
389 return markClauseOccurrence<omp::clause::Nowait>(result.nowait);
397 if (auto *clause = findUniqueClause<omp::clause::NumTeams>()) {
401 assert(clause->v.size() == 1);
402 // auto lowerBound = std::get<std::optional<ExprTy>>(clause->v[0]->t);
403 auto &upperBound = std::get<ExprTy>(clause->v[0].t);
414 if (auto *clause = findUniqueClause<omp::clause::NumThreads>()) {
415 // OMPIRBuilder expects `NUM_THREADS` clause as a `Value`.
417 fir::getBase(converter.genExprValue(clause->v, stmtCtx));
424 using Order = omp::clause::Order;
425 if (auto *clause = findUniqueClause<Order>()) {
430 std::get<std::optional<Order::OrderModifier>>(clause->t);
447 if (auto *clause = findUniqueClause<omp::clause::Ordered>()) {
450 if (clause->v.has_value())
451 orderedClauseValue = *evaluate::ToInt64(*clause->v);
461 if (auto *clause = findUniqueClause<omp::clause::Priority>()) {
462 result.priority = fir::getBase(converter.genExprValue(clause->v, stmtCtx));
469 if (auto *clause = findUniqueClause<omp::clause::Detach>()) {
470 semantics::Symbol *sym = clause->v.sym();
480 if (auto *clause = findUniqueClause<omp::clause::ProcBind>()) {
482 result.procBindKind = genProcBindKindAttr(firOpBuilder, *clause);
490 if (auto *clause = findUniqueClause<omp::clause::Safelen>()) {
492 const std::optional<std::int64_t> safelenVal = evaluate::ToInt64(clause->v);
502 if (auto *clause = findUniqueClause<omp::clause::Schedule>()) {
505 const auto &scheduleType = std::get<omp::clause::Schedule::Kind>(clause->t);
509 case omp::clause::Schedule::Kind::Static:
512 case omp::clause::Schedule::Kind::Dynamic:
515 case omp::clause::Schedule::Kind::Guided:
518 case omp::clause::Schedule::Kind::Auto:
521 case omp::clause::Schedule::Kind::Runtime:
529 mlir::omp::ScheduleModifier scheduleMod = getScheduleModifier(*clause);
534 if (getSimdModifier(*clause) != mlir::omp::ScheduleModifier::none)
537 if (const auto &chunkExpr = std::get<omp::MaybeExpr>(clause->t))
548 if (auto *clause = findUniqueClause<omp::clause::Simdlen>()) {
550 const std::optional<std::int64_t> simdlenVal = evaluate::ToInt64(clause->v);
560 if (auto *clause = findUniqueClause<omp::clause::ThreadLimit>()) {
562 fir::getBase(converter.genExprValue(clause->v, stmtCtx));
569 return markClauseOccurrence<omp::clause::Untied>(result.untied);
591 const omp::clause::Aligned &clause,
594 using Aligned = omp::clause::Aligned;
601 std::get<std::optional<Aligned::Alignment>>(clause.t)) {
618 auto &objects = std::get<omp::ObjectList>(clause.t);
622 // All the list items in a aligned clause will have same alignment
630 return findRepeatableClause<omp::clause::Aligned>(
631 [&](const omp::clause::Aligned &clause, const parser::CharBlock &) {
632 addAlignedClause(converter, clause, result.alignedVars,
639 return findRepeatableClause<omp::clause::Allocate>(
640 [&](const omp::clause::Allocate &clause, const parser::CharBlock &) {
641 genAllocateClause(converter, clause, result.allocatorVars,
658 bool hasCopyin = findRepeatableClause<omp::clause::Copyin>(
659 [&](const omp::clause::Copyin &clause, const parser::CharBlock &) {
660 for (const omp::Object &object : clause.v) {
830 bool hasCopyPrivate = findRepeatableClause<clause::Copyprivate>(
831 [&](const clause::Copyprivate &clause, const parser::CharBlock &) {
832 for (const Object &object : clause.v) {
848 auto process = [&](const omp::clause::Depend &clause,
850 using Depend = omp::clause::Depend;
851 if (!std::holds_alternative<Depend::TaskDep>(clause.u)) {
853 "DEPEND clause with SINK or SOURCE is not supported yet");
855 auto &taskDep = std::get<Depend::TaskDep>(clause.u);
856 auto depType = std::get<clause::DependenceType>(taskDep.t);
859 if (std::get<std::optional<omp::clause::Iterator>>(taskDep.t)) {
884 return findRepeatableClause<omp::clause::Depend>(process);
890 return findRepeatableClause<omp::clause::HasDeviceAddr>(
891 [&](const omp::clause::HasDeviceAddr &devAddrClause,
899 omp::clause::If::DirectiveNameModifier directiveName,
902 findRepeatableClause<omp::clause::If>([&](const omp::clause::If &clause,
906 getIfClauseOperand(converter, clause, directiveName, clauseLocation);
907 // Assume that, at most, a single 'if' clause will be applicable to the
920 return findRepeatableClause<omp::clause::IsDevicePtr>(
921 [&](const omp::clause::IsDevicePtr &devPtrClause,
930 return findRepeatableClause<omp::clause::Link>(
931 [&](const omp::clause::Link &clause, const parser::CharBlock &) {
934 clause.v, mlir::omp::DeclareTargetCaptureClause::link, result);
1015 auto process = [&](const omp::clause::Map &clause,
1017 using Map = omp::clause::Map;
1019 const auto &[mapType, typeMods, mappers, iterator, objects] = clause.t;
1070 std::get<omp::ObjectList>(clause.t), mapTypeBits,
1074 bool clauseFound = findRepeatableClause<omp::clause::Map>(process);
1086 auto callbackFn = [&](const auto &clause, const parser::CharBlock &source) {
1088 const auto &[expectation, mapper, iterator, objects] = clause.t;
1098 std::is_same_v<llvm::remove_cvref_t<decltype(clause)>, omp::clause::To>
1106 bool clauseFound = findRepeatableClause<omp::clause::To>(callbackFn);
1108 findRepeatableClause<omp::clause::From>(callbackFn) || clauseFound;
1118 return findRepeatableClause<omp::clause::Nontemporal>(
1119 [&](const omp::clause::Nontemporal &clause, const parser::CharBlock &) {
1120 for (const Object &object : clause.v) {
1131 return findRepeatableClause<omp::clause::Reduction>(
1132 [&](const omp::clause::Reduction &clause, const parser::CharBlock &) {
1138 rp.addDeclareReduction(currentLocation, converter, clause,
1153 return findRepeatableClause<omp::clause::To>(
1154 [&](const omp::clause::To &clause, const parser::CharBlock &) {
1156 gatherFuncAndVarSyms(std::get<ObjectList>(clause.t),
1163 return findRepeatableClause<omp::clause::Enter>(
1164 [&](const omp::clause::Enter &clause, const parser::CharBlock &) {
1167 clause.v, mlir::omp::DeclareTargetCaptureClause::enter, result);
1175 bool clauseFound = findRepeatableClause<omp::clause::UseDeviceAddr>(
1176 [&](const omp::clause::UseDeviceAddr &clause,
1182 processMapObjects(stmtCtx, location, clause.v, mapTypeBits,
1197 bool clauseFound = findRepeatableClause<omp::clause::UseDevicePtr>(
1198 [&](const omp::clause::UseDevicePtr &clause,
1204 processMapObjects(stmtCtx, location, clause.v, mapTypeBits,