Lines Matching defs:omp

23 namespace omp {
34 static mlir::omp::ScheduleModifier
35 translateScheduleModifier(const omp::clause::Schedule::OrderingModifier &m) {
37 case omp::clause::Schedule::OrderingModifier::Monotonic:
38 return mlir::omp::ScheduleModifier::monotonic;
39 case omp::clause::Schedule::OrderingModifier::Nonmonotonic:
40 return mlir::omp::ScheduleModifier::nonmonotonic;
42 return mlir::omp::ScheduleModifier::none;
45 static mlir::omp::ScheduleModifier
46 getScheduleModifier(const omp::clause::Schedule &clause) {
47 using Schedule = omp::clause::Schedule;
52 return mlir::omp::ScheduleModifier::none;
55 static mlir::omp::ScheduleModifier
56 getSimdModifier(const omp::clause::Schedule &clause) {
57 using Schedule = omp::clause::Schedule;
61 return mlir::omp::ScheduleModifier::simd;
62 return mlir::omp::ScheduleModifier::none;
67 const omp::clause::Allocate &clause,
74 auto &objects = std::get<omp::ObjectList>(clause.t);
76 using Allocate = omp::clause::Allocate;
97 static mlir::omp::ClauseBindKindAttr
99 const omp::clause::Bind &clause) {
100 mlir::omp::ClauseBindKind bindKind;
102 case omp::clause::Bind::Binding::Teams:
103 bindKind = mlir::omp::ClauseBindKind::Teams;
105 case omp::clause::Bind::Binding::Parallel:
106 bindKind = mlir::omp::ClauseBindKind::Parallel;
108 case omp::clause::Bind::Binding::Thread:
109 bindKind = mlir::omp::ClauseBindKind::Thread;
112 return mlir::omp::ClauseBindKindAttr::get(firOpBuilder.getContext(),
116 static mlir::omp::ClauseProcBindKindAttr
118 const omp::clause::ProcBind &clause) {
119 mlir::omp::ClauseProcBindKind procBindKind;
121 case omp::clause::ProcBind::AffinityPolicy::Master:
122 procBindKind = mlir::omp::ClauseProcBindKind::Master;
124 case omp::clause::ProcBind::AffinityPolicy::Close:
125 procBindKind = mlir::omp::ClauseProcBindKind::Close;
127 case omp::clause::ProcBind::AffinityPolicy::Spread:
128 procBindKind = mlir::omp::ClauseProcBindKind::Spread;
130 case omp::clause::ProcBind::AffinityPolicy::Primary:
131 procBindKind = mlir::omp::ClauseProcBindKind::Primary;
134 return mlir::omp::ClauseProcBindKindAttr::get(firOpBuilder.getContext(),
138 static mlir::omp::ClauseTaskDependAttr
140 const omp::clause::DependenceType kind) {
144 mlir::omp::ClauseTaskDepend pbKind;
146 case omp::clause::DependenceType::In:
147 pbKind = mlir::omp::ClauseTaskDepend::taskdependin;
149 case omp::clause::DependenceType::Out:
150 pbKind = mlir::omp::ClauseTaskDepend::taskdependout;
152 case omp::clause::DependenceType::Inout:
153 pbKind = mlir::omp::ClauseTaskDepend::taskdependinout;
155 case omp::clause::DependenceType::Mutexinoutset:
156 pbKind = mlir::omp::ClauseTaskDepend::taskdependmutexinoutset;
158 case omp::clause::DependenceType::Inoutset:
159 pbKind = mlir::omp::ClauseTaskDepend::taskdependinoutset;
161 case omp::clause::DependenceType::Depobj:
164 case omp::clause::DependenceType::Sink:
165 case omp::clause::DependenceType::Source:
169 return mlir::omp::ClauseTaskDependAttr::get(firOpBuilder.getContext(),
175 const omp::clause::If &clause,
176 omp::clause::If::DirectiveNameModifier directiveName,
180 std::get<std::optional<omp::clause::If::DirectiveNameModifier>>(clause.t);
187 converter.genExprValue(std::get<omp::SomeExpr>(clause.t), stmtCtx));
193 lower::AbstractConverter &converter, const omp::ObjectList &objects,
200 for (const omp::Object &object : objects)
206 mlir::omp::LoopRelatedClauseOps &result,
226 bool ClauseProcessor::processBare(mlir::omp::BareClauseOps &result) const {
227 return markClauseOccurrence<omp::clause::OmpxBare>(result.bare);
230 bool ClauseProcessor::processBind(mlir::omp::BindClauseOps &result) const {
231 if (auto *clause = findUniqueClause<omp::clause::Bind>()) {
241 mlir::omp::LoopRelatedClauseOps &result,
253 if (auto *clause = findUniqueClause<omp::clause::Collapse>()) {
295 mlir::omp::DeviceClauseOps &result) const {
297 if (auto *clause = findUniqueClause<omp::clause::Device>(&source)) {
300 std::get<std::optional<omp::clause::Device::DeviceModifier>>(
302 if (deviceModifier == omp::clause::Device::DeviceModifier::Ancestor) {
306 const auto &deviceExpr = std::get<omp::SomeExpr>(clause->t);
314 mlir::omp::DeviceTypeClauseOps &result) const {
315 if (auto *clause = findUniqueClause<omp::clause::DeviceType>()) {
318 case omp::clause::DeviceType::DeviceTypeDescription::Nohost:
319 result.deviceType = mlir::omp::DeclareTargetDeviceType::nohost;
321 case omp::clause::DeviceType::DeviceTypeDescription::Host:
322 result.deviceType = mlir::omp::DeclareTargetDeviceType::host;
324 case omp::clause::DeviceType::DeviceTypeDescription::Any:
325 result.deviceType = mlir::omp::DeclareTargetDeviceType::any;
335 mlir::omp::DistScheduleClauseOps &result) const {
336 if (auto *clause = findUniqueClause<omp::clause::DistSchedule>()) {
348 mlir::omp::FilterClauseOps &result) const {
349 if (auto *clause = findUniqueClause<omp::clause::Filter>()) {
358 mlir::omp::FinalClauseOps &result) const {
360 if (auto *clause = findUniqueClause<omp::clause::Final>(&source)) {
373 bool ClauseProcessor::processHint(mlir::omp::HintClauseOps &result) const {
374 if (auto *clause = findUniqueClause<omp::clause::Hint>()) {
384 mlir::omp::MergeableClauseOps &result) const {
385 return markClauseOccurrence<omp::clause::Mergeable>(result.mergeable);
388 bool ClauseProcessor::processNowait(mlir::omp::NowaitClauseOps &result) const {
389 return markClauseOccurrence<omp::clause::Nowait>(result.nowait);
394 mlir::omp::NumTeamsClauseOps &result) const {
397 if (auto *clause = findUniqueClause<omp::clause::NumTeams>()) {
413 mlir::omp::NumThreadsClauseOps &result) const {
414 if (auto *clause = findUniqueClause<omp::clause::NumThreads>()) {
423 bool ClauseProcessor::processOrder(mlir::omp::OrderClauseOps &result) const {
424 using Order = omp::clause::Order;
427 result.order = mlir::omp::ClauseOrderKindAttr::get(
428 firOpBuilder.getContext(), mlir::omp::ClauseOrderKind::Concurrent);
432 result.orderMod = mlir::omp::OrderModifierAttr::get(
433 firOpBuilder.getContext(), mlir::omp::OrderModifier::unconstrained);
437 result.orderMod = mlir::omp::OrderModifierAttr::get(
438 firOpBuilder.getContext(), mlir::omp::OrderModifier::reproducible);
446 mlir::omp::OrderedClauseOps &result) const {
447 if (auto *clause = findUniqueClause<omp::clause::Ordered>()) {
460 mlir::omp::PriorityClauseOps &result) const {
461 if (auto *clause = findUniqueClause<omp::clause::Priority>()) {
468 bool ClauseProcessor::processDetach(mlir::omp::DetachClauseOps &result) const {
469 if (auto *clause = findUniqueClause<omp::clause::Detach>()) {
479 mlir::omp::ProcBindClauseOps &result) const {
480 if (auto *clause = findUniqueClause<omp::clause::ProcBind>()) {
489 mlir::omp::SafelenClauseOps &result) const {
490 if (auto *clause = findUniqueClause<omp::clause::Safelen>()) {
501 mlir::omp::ScheduleClauseOps &result) const {
502 if (auto *clause = findUniqueClause<omp::clause::Schedule>()) {
505 const auto &scheduleType = std::get<omp::clause::Schedule::Kind>(clause->t);
507 mlir::omp::ClauseScheduleKind scheduleKind;
509 case omp::clause::Schedule::Kind::Static:
510 scheduleKind = mlir::omp::ClauseScheduleKind::Static;
512 case omp::clause::Schedule::Kind::Dynamic:
513 scheduleKind = mlir::omp::ClauseScheduleKind::Dynamic;
515 case omp::clause::Schedule::Kind::Guided:
516 scheduleKind = mlir::omp::ClauseScheduleKind::Guided;
518 case omp::clause::Schedule::Kind::Auto:
519 scheduleKind = mlir::omp::ClauseScheduleKind::Auto;
521 case omp::clause::Schedule::Kind::Runtime:
522 scheduleKind = mlir::omp::ClauseScheduleKind::Runtime;
527 mlir::omp::ClauseScheduleKindAttr::get(context, scheduleKind);
529 mlir::omp::ScheduleModifier scheduleMod = getScheduleModifier(*clause);
530 if (scheduleMod != mlir::omp::ScheduleModifier::none)
532 mlir::omp::ScheduleModifierAttr::get(context, scheduleMod);
534 if (getSimdModifier(*clause) != mlir::omp::ScheduleModifier::none)
537 if (const auto &chunkExpr = std::get<omp::MaybeExpr>(clause->t))
547 mlir::omp::SimdlenClauseOps &result) const {
548 if (auto *clause = findUniqueClause<omp::clause::Simdlen>()) {
559 mlir::omp::ThreadLimitClauseOps &result) const {
560 if (auto *clause = findUniqueClause<omp::clause::ThreadLimit>()) {
568 bool ClauseProcessor::processUntied(mlir::omp::UntiedClauseOps &result) const {
569 return markClauseOccurrence<omp::clause::Untied>(result.untied);
591 const omp::clause::Aligned &clause,
594 using Aligned = omp::clause::Aligned;
618 auto &objects = std::get<omp::ObjectList>(clause.t);
629 mlir::omp::AlignedClauseOps &result) const {
630 return findRepeatableClause<omp::clause::Aligned>(
631 [&](const omp::clause::Aligned &clause, const parser::CharBlock &) {
638 mlir::omp::AllocateClauseOps &result) const {
639 return findRepeatableClause<omp::clause::Allocate>(
640 [&](const omp::clause::Allocate &clause, const parser::CharBlock &) {
658 bool hasCopyin = findRepeatableClause<omp::clause::Copyin>(
659 [&](const omp::clause::Copyin &clause, const parser::CharBlock &) {
660 for (const omp::Object &object : clause.v) {
690 firOpBuilder.create<mlir::omp::BarrierOp>(converter.getCurrentLocation());
797 mlir::omp::CopyprivateClauseOps &result) const {
847 bool ClauseProcessor::processDepend(mlir::omp::DependClauseOps &result) const {
848 auto process = [&](const omp::clause::Depend &clause,
850 using Depend = omp::clause::Depend;
857 auto &objects = std::get<omp::ObjectList>(taskDep.t);
859 if (std::get<std::optional<omp::clause::Iterator>>(taskDep.t)) {
863 mlir::omp::ClauseTaskDependAttr dependTypeOperand =
867 for (const omp::Object &object : objects) {
884 return findRepeatableClause<omp::clause::Depend>(process);
888 mlir::omp::HasDeviceAddrClauseOps &result,
890 return findRepeatableClause<omp::clause::HasDeviceAddr>(
891 [&](const omp::clause::HasDeviceAddr &devAddrClause,
899 omp::clause::If::DirectiveNameModifier directiveName,
900 mlir::omp::IfClauseOps &result) const {
902 findRepeatableClause<omp::clause::If>([&](const omp::clause::If &clause,
918 mlir::omp::IsDevicePtrClauseOps &result,
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);
940 const omp::ObjectList &objects,
941 llvm::omp::OpenMPOffloadMappingFlags mapTypeBits,
947 for (const omp::Object &object : objects) {
950 std::optional<omp::Object> parentObj;
953 lower::gatherDataOperandAddrAndBounds<mlir::omp::MapBoundsOp,
954 mlir::omp::MapBoundsType>(
961 omp::ObjectList objectList = gatherObjectsOf(object, semaCtx);
984 mlir::omp::MapInfoOp mapOp = createMapInfoOp(
989 std::underlying_type_t<llvm::omp::OpenMPOffloadMappingFlags>>(
991 mlir::omp::VariableCaptureKind::ByRef, baseOp.getType());
1005 mlir::omp::MapClauseOps &result,
1015 auto process = [&](const omp::clause::Map &clause,
1017 using Map = omp::clause::Map;
1020 llvm::omp::OpenMPOffloadMappingFlags mapTypeBits =
1021 llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_NONE;
1027 mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO;
1030 mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
1033 mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO |
1034 llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
1045 mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_DELETE;
1050 mapTypeBits |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_ALWAYS;
1070 std::get<omp::ObjectList>(clause.t), mapTypeBits,
1074 bool clauseFound = findRepeatableClause<omp::clause::Map>(process);
1082 mlir::omp::MapClauseOps &result) {
1097 constexpr llvm::omp::OpenMPOffloadMappingFlags mapTypeBits =
1098 std::is_same_v<llvm::remove_cvref_t<decltype(clause)>, omp::clause::To>
1099 ? llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO
1100 : llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
1106 bool clauseFound = findRepeatableClause<omp::clause::To>(callbackFn);
1108 findRepeatableClause<omp::clause::From>(callbackFn) || clauseFound;
1117 mlir::omp::NontemporalClauseOps &result) const {
1118 return findRepeatableClause<omp::clause::Nontemporal>(
1119 [&](const omp::clause::Nontemporal &clause, const parser::CharBlock &) {
1129 mlir::Location currentLocation, mlir::omp::ReductionClauseOps &result,
1131 return findRepeatableClause<omp::clause::Reduction>(
1132 [&](const omp::clause::Reduction &clause, const parser::CharBlock &) {
1153 return findRepeatableClause<omp::clause::To>(
1154 [&](const omp::clause::To &clause, const parser::CharBlock &) {
1157 mlir::omp::DeclareTargetCaptureClause::to, result);
1163 return findRepeatableClause<omp::clause::Enter>(
1164 [&](const omp::clause::Enter &clause, const parser::CharBlock &) {
1167 clause.v, mlir::omp::DeclareTargetCaptureClause::enter, result);
1172 lower::StatementContext &stmtCtx, mlir::omp::UseDeviceAddrClauseOps &result,
1175 bool clauseFound = findRepeatableClause<omp::clause::UseDeviceAddr>(
1176 [&](const omp::clause::UseDeviceAddr &clause,
1179 llvm::omp::OpenMPOffloadMappingFlags mapTypeBits =
1180 llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO |
1181 llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
1193 lower::StatementContext &stmtCtx, mlir::omp::UseDevicePtrClauseOps &result,
1197 bool clauseFound = findRepeatableClause<omp::clause::UseDevicePtr>(
1198 [&](const omp::clause::UseDevicePtr &clause,
1201 llvm::omp::OpenMPOffloadMappingFlags mapTypeBits =
1202 llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO |
1203 llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
1214 } // namespace omp