Lines Matching refs:Fortran
30 int64_t Fortran::lower::getCollapseValue( in getCollapseValue()
31 const Fortran::parser::OmpClauseList &clauseList) { in getCollapseValue()
34 std::get_if<Fortran::parser::OmpClause::Collapse>(&clause.u)) { in getCollapseValue()
35 const auto *expr = Fortran::semantics::GetExpr(collapseClause->v); in getCollapseValue()
36 return Fortran::evaluate::ToInt64(*expr).value(); in getCollapseValue()
42 static const Fortran::parser::Name *
43 getDesignatorNameIfDataRef(const Fortran::parser::Designator &designator) { in getDesignatorNameIfDataRef()
44 const auto *dataRef = std::get_if<Fortran::parser::DataRef>(&designator.u); in getDesignatorNameIfDataRef()
45 return dataRef ? std::get_if<Fortran::parser::Name>(&dataRef->u) : nullptr; in getDesignatorNameIfDataRef()
48 static Fortran::semantics::Symbol *
49 getOmpObjectSymbol(const Fortran::parser::OmpObject &ompObject) { in getOmpObjectSymbol()
50 Fortran::semantics::Symbol *sym = nullptr; in getOmpObjectSymbol()
51 std::visit(Fortran::common::visitors{ in getOmpObjectSymbol()
52 [&](const Fortran::parser::Designator &designator) { in getOmpObjectSymbol()
53 if (const Fortran::parser::Name *name = in getOmpObjectSymbol()
58 [&](const Fortran::parser::Name &name) { sym = name.symbol; }}, in getOmpObjectSymbol()
64 static void createPrivateVarSyms(Fortran::lower::AbstractConverter &converter, in createPrivateVarSyms()
67 const Fortran::parser::OmpObjectList &ompObjectList = clause->v; in createPrivateVarSyms()
68 for (const Fortran::parser::OmpObject &ompObject : ompObjectList.v) { in createPrivateVarSyms()
69 Fortran::semantics::Symbol *sym = getOmpObjectSymbol(ompObject); in createPrivateVarSyms()
72 if (sym->test(Fortran::semantics::Symbol::Flag::OmpPreDetermined)) in createPrivateVarSyms()
77 if constexpr (std::is_same_v<T, Fortran::parser::OmpClause::Firstprivate>) { in createPrivateVarSyms()
80 T, Fortran::parser::OmpClause::Lastprivate>) { in createPrivateVarSyms()
87 static bool privatizeVars(Op &op, Fortran::lower::AbstractConverter &converter, in privatizeVars()
88 const Fortran::parser::OmpClauseList &opClauseList) { in privatizeVars()
97 for (const Fortran::parser::OmpClause &clause : opClauseList.v) { in privatizeVars()
99 std::get_if<Fortran::parser::OmpClause::Private>(&clause.u)) { in privatizeVars()
102 std::get_if<Fortran::parser::OmpClause::Firstprivate>( in privatizeVars()
107 std::get_if<Fortran::parser::OmpClause::Lastprivate>( in privatizeVars()
143 for (const Fortran::parser::OmpClause &clause : opClauseList.v) in privatizeVars()
145 std::get_if<Fortran::parser::OmpClause::Collapse>(&clause.u)) in privatizeVars()
180 genCommonBlockMember(Fortran::lower::AbstractConverter &converter, in genCommonBlockMember()
181 const Fortran::semantics::Symbol &sym, in genCommonBlockMember()
213 static void threadPrivatizeVars(Fortran::lower::AbstractConverter &converter, in threadPrivatizeVars()
214 Fortran::lower::pft::Evaluation &eval) { in threadPrivatizeVars()
223 auto genThreadprivateOp = [&](Fortran::lower::SymbolRef sym) -> mlir::Value { in threadPrivatizeVars()
234 llvm::SetVector<const Fortran::semantics::Symbol *> threadprivateSyms; in threadPrivatizeVars()
236 Fortran::semantics::Symbol::Flag::OmpThreadprivate, in threadPrivatizeVars()
238 std::set<Fortran::semantics::SourceName> threadprivateSymNames; in threadPrivatizeVars()
244 llvm::SetVector<const Fortran::semantics::Symbol *> commonSyms; in threadPrivatizeVars()
253 if (const Fortran::semantics::Symbol *common = in threadPrivatizeVars()
254 Fortran::semantics::FindCommonBlockContaining(sym->GetUltimate())) { in threadPrivatizeVars()
279 genCopyinClause(Fortran::lower::AbstractConverter &converter, in genCopyinClause()
280 const Fortran::parser::OmpClauseList &opClauseList) { in genCopyinClause()
285 for (const Fortran::parser::OmpClause &clause : opClauseList.v) { in genCopyinClause()
287 std::get_if<Fortran::parser::OmpClause::Copyin>(&clause.u)) { in genCopyinClause()
289 const Fortran::parser::OmpObjectList &ompObjectList = copyinClause->v; in genCopyinClause()
290 for (const Fortran::parser::OmpObject &ompObject : ompObjectList.v) { in genCopyinClause()
291 Fortran::semantics::Symbol *sym = getOmpObjectSymbol(ompObject); in genCopyinClause()
292 if (sym->has<Fortran::semantics::CommonBlockDetails>()) in genCopyinClause()
294 if (Fortran::semantics::IsAllocatableOrPointer(sym->GetUltimate())) in genCopyinClause()
297 assert(sym->has<Fortran::semantics::HostAssocDetails>() && in genCopyinClause()
313 static void genObjectList(const Fortran::parser::OmpObjectList &objectList, in genObjectList()
314 Fortran::lower::AbstractConverter &converter, in genObjectList()
316 auto addOperands = [&](Fortran::lower::SymbolRef sym) { in genObjectList()
322 sym->detailsIf<Fortran::semantics::HostAssocDetails>()) { in genObjectList()
328 for (const Fortran::parser::OmpObject &ompObject : objectList.v) { in genObjectList()
329 Fortran::semantics::Symbol *sym = getOmpObjectSymbol(ompObject); in genObjectList()
334 static mlir::Type getLoopVarType(Fortran::lower::AbstractConverter &converter, in getLoopVarType()
356 std::list<Fortran::lower::pft::Evaluation> &evaluationList) { in createEmptyRegionBlocks()
396 createBodyOfOp(Op &op, Fortran::lower::AbstractConverter &converter, in createBodyOfOp()
397 mlir::Location &loc, Fortran::lower::pft::Evaluation &eval, in createBodyOfOp()
398 const Fortran::parser::OmpClauseList *clauses = nullptr, in createBodyOfOp()
399 const SmallVector<const Fortran::semantics::Symbol *> &args = {}, in createBodyOfOp()
409 for (const Fortran::semantics::Symbol *arg : args)
422 for (const Fortran::semantics::Symbol *arg : args) {
428 Fortran::lower::getAdaptToByRefAttr(firOpBuilder)});
477 static void genOMP(Fortran::lower::AbstractConverter &converter, in genOMP()
478 Fortran::lower::pft::Evaluation &eval, in genOMP()
479 const Fortran::parser::OpenMPSimpleStandaloneConstruct in genOMP()
482 std::get<Fortran::parser::OmpSimpleStandaloneDirective>( in genOMP()
511 genAllocateClause(Fortran::lower::AbstractConverter &converter, in genAllocateClause()
512 const Fortran::parser::OmpAllocateClause &ompAllocateClause, in genAllocateClause()
517 Fortran::lower::StatementContext stmtCtx; in genAllocateClause()
520 const Fortran::parser::OmpObjectList &ompObjectList = in genAllocateClause()
521 std::get<Fortran::parser::OmpObjectList>(ompAllocateClause.t); in genAllocateClause()
523 std::get<std::optional<Fortran::parser::OmpAllocateClause::Allocator>>( in genAllocateClause()
530 *Fortran::semantics::GetExpr(allocatorValue->v), stmtCtx)); in genAllocateClause()
543 genOMP(Fortran::lower::AbstractConverter &converter, in genOMP()
544 Fortran::lower::pft::Evaluation &eval, in genOMP()
545 const Fortran::parser::OpenMPStandaloneConstruct &standaloneConstruct) { in genOMP()
547 Fortran::common::visitors{ in genOMP()
548 [&](const Fortran::parser::OpenMPSimpleStandaloneConstruct in genOMP()
552 [&](const Fortran::parser::OpenMPFlushConstruct &flushConstruct) { in genOMP()
555 std::get<std::optional<Fortran::parser::OmpObjectList>>( in genOMP()
559 std::list<Fortran::parser::OmpMemoryOrderClause>>>( in genOMP()
567 [&](const Fortran::parser::OpenMPCancelConstruct &cancelConstruct) { in genOMP()
570 [&](const Fortran::parser::OpenMPCancellationPointConstruct in genOMP()
580 const Fortran::parser::OmpClause::ProcBind *procBindClause) { in genProcBindKindAttr()
583 case Fortran::parser::OmpProcBindClause::Type::Master: in genProcBindKindAttr()
586 case Fortran::parser::OmpProcBindClause::Type::Close: in genProcBindKindAttr()
589 case Fortran::parser::OmpProcBindClause::Type::Spread: in genProcBindKindAttr()
592 case Fortran::parser::OmpProcBindClause::Type::Primary: in genProcBindKindAttr()
600 getIfClauseOperand(Fortran::lower::AbstractConverter &converter, in getIfClauseOperand()
601 Fortran::lower::StatementContext &stmtCtx, in getIfClauseOperand()
602 const Fortran::parser::OmpClause::If *ifClause) { in getIfClauseOperand()
605 auto &expr = std::get<Fortran::parser::ScalarLogicalExpr>(ifClause->v.t); in getIfClauseOperand()
607 converter.genExprValue(*Fortran::semantics::GetExpr(expr), stmtCtx)); in getIfClauseOperand()
619 createCombinedParallelOp(Fortran::lower::AbstractConverter &converter, in createCombinedParallelOp()
620 Fortran::lower::pft::Evaluation &eval, in createCombinedParallelOp()
624 Fortran::lower::StatementContext stmtCtx; in createCombinedParallelOp()
630 std::get<Fortran::parser::OmpClauseList>(directive.t); in createCombinedParallelOp()
634 for (const Fortran::parser::OmpClause &clause : opClauseList.v) { in createCombinedParallelOp()
636 std::get_if<Fortran::parser::OmpClause::If>(&clause.u)) { in createCombinedParallelOp()
639 std::get_if<Fortran::parser::OmpClause::NumThreads>( in createCombinedParallelOp()
642 *Fortran::semantics::GetExpr(numThreadsClause->v), stmtCtx)); in createCombinedParallelOp()
644 std::get_if<Fortran::parser::OmpClause::ProcBind>( in createCombinedParallelOp()
661 genOMP(Fortran::lower::AbstractConverter &converter, in genOMP()
662 Fortran::lower::pft::Evaluation &eval, in genOMP()
663 const Fortran::parser::OpenMPBlockConstruct &blockConstruct) { in genOMP()
665 std::get<Fortran::parser::OmpBeginBlockDirective>(blockConstruct.t); in genOMP()
667 std::get<Fortran::parser::OmpBlockDirective>(beginBlockDirective.t); in genOMP()
669 std::get<Fortran::parser::OmpEndBlockDirective>(blockConstruct.t); in genOMP()
673 Fortran::lower::StatementContext stmtCtx; in genOMP()
682 std::get<Fortran::parser::OmpClauseList>(beginBlockDirective.t); in genOMP()
685 std::get_if<Fortran::parser::OmpClause::If>(&clause.u)) { in genOMP()
688 std::get_if<Fortran::parser::OmpClause::NumThreads>( in genOMP()
692 *Fortran::semantics::GetExpr(numThreadsClause->v), stmtCtx)); in genOMP()
694 std::get_if<Fortran::parser::OmpClause::ProcBind>( in genOMP()
698 std::get_if<Fortran::parser::OmpClause::Allocate>( in genOMP()
702 } else if (std::get_if<Fortran::parser::OmpClause::Private>(&clause.u) || in genOMP()
703 std::get_if<Fortran::parser::OmpClause::Firstprivate>( in genOMP()
705 std::get_if<Fortran::parser::OmpClause::Copyin>(&clause.u)) { in genOMP()
708 } else if (std::get_if<Fortran::parser::OmpClause::Shared>(&clause.u)) { in genOMP()
712 std::get_if<Fortran::parser::OmpClause::Default>( in genOMP()
715 Fortran::parser::OmpDefaultClause::Type::Shared) || in genOMP()
717 Fortran::parser::OmpDefaultClause::Type::None)) { in genOMP()
723 } else if (std::get_if<Fortran::parser::OmpClause::Threads>(&clause.u)) { in genOMP()
727 std::get_if<Fortran::parser::OmpClause::Final>(&clause.u)) { in genOMP()
729 *Fortran::semantics::GetExpr(finalClause->v), stmtCtx)); in genOMP()
732 } else if (std::get_if<Fortran::parser::OmpClause::Untied>(&clause.u)) { in genOMP()
734 } else if (std::get_if<Fortran::parser::OmpClause::Mergeable>(&clause.u)) { in genOMP()
737 std::get_if<Fortran::parser::OmpClause::Priority>( in genOMP()
740 *Fortran::semantics::GetExpr(priorityClause->v), stmtCtx)); in genOMP()
747 std::get<Fortran::parser::OmpClauseList>(endBlockDirective.t).v) { in genOMP()
748 if (std::get_if<Fortran::parser::OmpClause::Nowait>(&clause.u)) in genOMP()
820 translateModifier(const Fortran::parser::OmpScheduleModifierType &m) { in translateModifier()
822 case Fortran::parser::OmpScheduleModifierType::ModType::Monotonic: in translateModifier()
824 case Fortran::parser::OmpScheduleModifierType::ModType::Nonmonotonic: in translateModifier()
826 case Fortran::parser::OmpScheduleModifierType::ModType::Simd: in translateModifier()
833 getScheduleModifier(const Fortran::parser::OmpScheduleClause &x) { in getScheduleModifier()
835 std::get<std::optional<Fortran::parser::OmpScheduleModifier>>(x.t); in getScheduleModifier()
841 std::get<Fortran::parser::OmpScheduleModifier::Modifier1>(modifier->t); in getScheduleModifier()
843 Fortran::parser::OmpScheduleModifierType::ModType::Simd) { in getScheduleModifier()
845 std::optional<Fortran::parser::OmpScheduleModifier::Modifier2>>( in getScheduleModifier()
849 Fortran::parser::OmpScheduleModifierType::ModType::Simd) in getScheduleModifier()
861 getSIMDModifier(const Fortran::parser::OmpScheduleClause &x) { in getSIMDModifier()
863 std::get<std::optional<Fortran::parser::OmpScheduleModifier>>(x.t); in getSIMDModifier()
869 std::get<Fortran::parser::OmpScheduleModifier::Modifier1>(modifier->t); in getSIMDModifier()
870 if (modType1.v.v == Fortran::parser::OmpScheduleModifierType::ModType::Simd) in getSIMDModifier()
874 std::optional<Fortran::parser::OmpScheduleModifier::Modifier2>>( in getSIMDModifier()
877 Fortran::parser::OmpScheduleModifierType::ModType::Simd) in getSIMDModifier()
884 Fortran::parser::DefinedOperator::IntrinsicOperator intrinsicOp, in getReductionName()
887 if (intrinsicOp == Fortran::parser::DefinedOperator::IntrinsicOperator::Add) in getReductionName()
898 static void genOMP(Fortran::lower::AbstractConverter &converter, in genOMP()
899 Fortran::lower::pft::Evaluation &eval, in genOMP()
900 const Fortran::parser::OpenMPLoopConstruct &loopConstruct) { in genOMP()
910 Fortran::lower::StatementContext stmtCtx; in genOMP()
911 const auto &loopOpClauseList = std::get<Fortran::parser::OmpClauseList>( in genOMP()
912 std::get<Fortran::parser::OmpBeginLoopDirective>(loopConstruct.t).t); in genOMP()
915 std::get<Fortran::parser::OmpLoopDirective>( in genOMP()
916 std::get<Fortran::parser::OmpBeginLoopDirective>(loopConstruct.t).t) in genOMP()
919 createCombinedParallelOp<Fortran::parser::OmpBeginLoopDirective>( in genOMP()
921 std::get<Fortran::parser::OmpBeginLoopDirective>(loopConstruct.t)); in genOMP()
931 Fortran::lower::getCollapseValue(loopOpClauseList); in genOMP()
933 SmallVector<const Fortran::semantics::Symbol *> iv; in genOMP()
936 auto *doStmt = doLoop->getIf<Fortran::parser::NonLabelDoStmt>(); in genOMP()
939 std::get<std::optional<Fortran::parser::LoopControl>>(doStmt->t); in genOMP()
940 const Fortran::parser::LoopControl::Bounds *bounds = in genOMP()
941 std::get_if<Fortran::parser::LoopControl::Bounds>(&loopControl->u); in genOMP()
943 Fortran::lower::StatementContext stmtCtx; in genOMP()
945 *Fortran::semantics::GetExpr(bounds->lower), stmtCtx))); in genOMP()
947 *Fortran::semantics::GetExpr(bounds->upper), stmtCtx))); in genOMP()
950 *Fortran::semantics::GetExpr(bounds->step), stmtCtx))); in genOMP()
966 std::get_if<Fortran::parser::OmpClause::Schedule>(&clause.u)) { in genOMP()
968 std::get<std::optional<Fortran::parser::ScalarIntExpr>>( in genOMP()
970 if (const auto *expr = Fortran::semantics::GetExpr(*chunkExpr)) { in genOMP()
976 std::get_if<Fortran::parser::OmpClause::If>(&clause.u)) { in genOMP()
979 std::get_if<Fortran::parser::OmpClause::Reduction>( in genOMP()
982 const auto &redOperator{std::get<Fortran::parser::OmpReductionOperator>( in genOMP()
985 std::get<Fortran::parser::OmpObjectList>(reductionClause->v.t)}; in genOMP()
987 std::get_if<Fortran::parser::DefinedOperator>(&redOperator.u)) { in genOMP()
989 std::get<Fortran::parser::DefinedOperator::IntrinsicOperator>( in genOMP()
992 Fortran::parser::DefinedOperator::IntrinsicOperator::Add) in genOMP()
997 Fortran::parser::Unwrap<Fortran::parser::Name>(ompObject)}) { in genOMP()
1066 for (const Fortran::parser::OmpClause &clause : loopOpClauseList.v) { in genOMP()
1068 std::get_if<Fortran::parser::OmpClause::Ordered>(&clause.u)) { in genOMP()
1070 const auto *expr = Fortran::semantics::GetExpr(orderedClause->v); in genOMP()
1072 Fortran::evaluate::ToInt64(*expr); in genOMP()
1079 std::get_if<Fortran::parser::OmpClause::Schedule>( in genOMP()
1084 std::get<Fortran::parser::OmpScheduleClause::ScheduleType>( in genOMP()
1087 case Fortran::parser::OmpScheduleClause::ScheduleType::Static: in genOMP()
1091 case Fortran::parser::OmpScheduleClause::ScheduleType::Dynamic: in genOMP()
1095 case Fortran::parser::OmpScheduleClause::ScheduleType::Guided: in genOMP()
1099 case Fortran::parser::OmpScheduleClause::ScheduleType::Auto: in genOMP()
1103 case Fortran::parser::OmpScheduleClause::ScheduleType::Runtime: in genOMP()
1124 std::get<std::optional<Fortran::parser::OmpEndLoopDirective>>( in genOMP()
1127 std::get<Fortran::parser::OmpClauseList>((*endClauseList).t); in genOMP()
1128 for (const Fortran::parser::OmpClause &clause : clauseList.v) in genOMP()
1129 if (std::get_if<Fortran::parser::OmpClause::Nowait>(&clause.u)) in genOMP()
1138 genOMP(Fortran::lower::AbstractConverter &converter, in genOMP()
1139 Fortran::lower::pft::Evaluation &eval, in genOMP()
1140 const Fortran::parser::OpenMPCriticalConstruct &criticalConstruct) { in genOMP()
1144 const Fortran::parser::OmpCriticalDirective &cd = in genOMP()
1145 std::get<Fortran::parser::OmpCriticalDirective>(criticalConstruct.t); in genOMP()
1146 if (std::get<std::optional<Fortran::parser::Name>>(cd.t).has_value()) { in genOMP()
1148 std::get<std::optional<Fortran::parser::Name>>(cd.t).value().ToString(); in genOMP()
1152 const auto &clauseList = std::get<Fortran::parser::OmpClauseList>(cd.t); in genOMP()
1153 for (const Fortran::parser::OmpClause &clause : clauseList.v) in genOMP()
1155 std::get_if<Fortran::parser::OmpClause::Hint>(&clause.u)) { in genOMP()
1156 const auto *expr = Fortran::semantics::GetExpr(hintClause->v); in genOMP()
1157 hint = *Fortran::evaluate::ToInt64(*expr); in genOMP()
1181 genOMP(Fortran::lower::AbstractConverter &converter, in genOMP()
1182 Fortran::lower::pft::Evaluation &eval, in genOMP()
1183 const Fortran::parser::OpenMPSectionConstruct §ionConstruct) { in genOMP()
1194 genOMP(Fortran::lower::AbstractConverter &converter, in genOMP()
1195 Fortran::lower::pft::Evaluation &eval, in genOMP()
1196 const Fortran::parser::OpenMPSectionsConstruct §ionsConstruct) { in genOMP()
1201 const auto §ionsClauseList = std::get<Fortran::parser::OmpClauseList>( in genOMP()
1202 std::get<Fortran::parser::OmpBeginSectionsDirective>(sectionsConstruct.t) in genOMP()
1204 for (const Fortran::parser::OmpClause &clause : sectionsClauseList.v) { in genOMP()
1207 if (std::get_if<Fortran::parser::OmpClause::Reduction>(&clause.u)) { in genOMP()
1212 std::get_if<Fortran::parser::OmpClause::Allocate>( in genOMP()
1219 std::get<Fortran::parser::OmpEndSectionsDirective>(sectionsConstruct.t); in genOMP()
1221 std::get<Fortran::parser::OmpClauseList>(endSectionsClauseList.t); in genOMP()
1224 if (std::get_if<Fortran::parser::OmpClause::Nowait>(&clause.u)) { in genOMP()
1230 std::get<Fortran::parser::OmpSectionsDirective>( in genOMP()
1231 std::get<Fortran::parser::OmpBeginSectionsDirective>( in genOMP()
1238 createCombinedParallelOp<Fortran::parser::OmpBeginSectionsDirective>( in genOMP()
1240 std::get<Fortran::parser::OmpBeginSectionsDirective>( in genOMP()
1259 Fortran::lower::AbstractConverter &converter, in genOmpAtomicHintAndMemoryOrderClauses()
1260 const Fortran::parser::OmpAtomicClauseList &clauseList, in genOmpAtomicHintAndMemoryOrderClauses()
1265 if (auto ompClause = std::get_if<Fortran::parser::OmpClause>(&clause.u)) { in genOmpAtomicHintAndMemoryOrderClauses()
1267 std::get_if<Fortran::parser::OmpClause::Hint>(&ompClause->u)) { in genOmpAtomicHintAndMemoryOrderClauses()
1268 const auto *expr = Fortran::semantics::GetExpr(hintClause->v); in genOmpAtomicHintAndMemoryOrderClauses()
1269 uint64_t hintExprValue = *Fortran::evaluate::ToInt64(*expr); in genOmpAtomicHintAndMemoryOrderClauses()
1273 std::get_if<Fortran::parser::OmpMemoryOrderClause>( in genOmpAtomicHintAndMemoryOrderClauses()
1275 if (std::get_if<Fortran::parser::OmpClause::Acquire>( in genOmpAtomicHintAndMemoryOrderClauses()
1279 } else if (std::get_if<Fortran::parser::OmpClause::Relaxed>( in genOmpAtomicHintAndMemoryOrderClauses()
1283 } else if (std::get_if<Fortran::parser::OmpClause::SeqCst>( in genOmpAtomicHintAndMemoryOrderClauses()
1287 } else if (std::get_if<Fortran::parser::OmpClause::Release>( in genOmpAtomicHintAndMemoryOrderClauses()
1297 Fortran::lower::AbstractConverter &converter, in genOmpAtomicUpdateStatement()
1298 Fortran::lower::pft::Evaluation &eval, in genOmpAtomicUpdateStatement()
1299 const Fortran::parser::Variable &assignmentStmtVariable, in genOmpAtomicUpdateStatement()
1300 const Fortran::parser::Expr &assignmentStmtExpr, in genOmpAtomicUpdateStatement()
1301 const Fortran::parser::OmpAtomicClauseList *leftHandClauseList, in genOmpAtomicUpdateStatement()
1302 const Fortran::parser::OmpAtomicClauseList *rightHandClauseList) { in genOmpAtomicUpdateStatement()
1306 Fortran::lower::StatementContext stmtCtx; in genOmpAtomicUpdateStatement()
1309 *Fortran::semantics::GetExpr(assignmentStmtVariable), stmtCtx)); in genOmpAtomicUpdateStatement()
1329 *Fortran::semantics::GetExpr(assignmentStmtVariable), stmtCtx)) in genOmpAtomicUpdateStatement()
1337 std::get_if<Fortran::common::Indirection<Fortran::parser::Designator>>( in genOmpAtomicUpdateStatement()
1351 *Fortran::semantics::GetExpr(assignmentStmtExpr), stmtCtx)); in genOmpAtomicUpdateStatement()
1359 genOmpAtomicWrite(Fortran::lower::AbstractConverter &converter, in genOmpAtomicWrite()
1360 Fortran::lower::pft::Evaluation &eval, in genOmpAtomicWrite()
1361 const Fortran::parser::OmpAtomicWrite &atomicWrite) { in genOmpAtomicWrite()
1365 const Fortran::parser::OmpAtomicClauseList &rightHandClauseList = in genOmpAtomicWrite()
1367 const Fortran::parser::OmpAtomicClauseList &leftHandClauseList = in genOmpAtomicWrite()
1370 std::get<Fortran::parser::Expr>(std::get<3>(atomicWrite.t).statement.t); in genOmpAtomicWrite()
1371 const auto &assignmentStmtVariable = std::get<Fortran::parser::Variable>( in genOmpAtomicWrite()
1373 Fortran::lower::StatementContext stmtCtx; in genOmpAtomicWrite()
1375 *Fortran::semantics::GetExpr(assignmentStmtExpr), stmtCtx)); in genOmpAtomicWrite()
1377 *Fortran::semantics::GetExpr(assignmentStmtVariable), stmtCtx)); in genOmpAtomicWrite()
1390 static void genOmpAtomicRead(Fortran::lower::AbstractConverter &converter, in genOmpAtomicRead()
1391 Fortran::lower::pft::Evaluation &eval, in genOmpAtomicRead()
1392 const Fortran::parser::OmpAtomicRead &atomicRead) { in genOmpAtomicRead()
1396 const Fortran::parser::OmpAtomicClauseList &rightHandClauseList = in genOmpAtomicRead()
1398 const Fortran::parser::OmpAtomicClauseList &leftHandClauseList = in genOmpAtomicRead()
1401 std::get<Fortran::parser::Expr>(std::get<3>(atomicRead.t).statement.t); in genOmpAtomicRead()
1402 const auto &assignmentStmtVariable = std::get<Fortran::parser::Variable>( in genOmpAtomicRead()
1404 Fortran::lower::StatementContext stmtCtx; in genOmpAtomicRead()
1406 *Fortran::semantics::GetExpr(assignmentStmtExpr), stmtCtx)); in genOmpAtomicRead()
1408 *Fortran::semantics::GetExpr(assignmentStmtVariable), stmtCtx)); in genOmpAtomicRead()
1422 genOmpAtomicUpdate(Fortran::lower::AbstractConverter &converter, in genOmpAtomicUpdate()
1423 Fortran::lower::pft::Evaluation &eval, in genOmpAtomicUpdate()
1424 const Fortran::parser::OmpAtomicUpdate &atomicUpdate) { in genOmpAtomicUpdate()
1425 const Fortran::parser::OmpAtomicClauseList &rightHandClauseList = in genOmpAtomicUpdate()
1427 const Fortran::parser::OmpAtomicClauseList &leftHandClauseList = in genOmpAtomicUpdate()
1430 std::get<Fortran::parser::Expr>(std::get<3>(atomicUpdate.t).statement.t); in genOmpAtomicUpdate()
1431 const auto &assignmentStmtVariable = std::get<Fortran::parser::Variable>( in genOmpAtomicUpdate()
1439 static void genOmpAtomic(Fortran::lower::AbstractConverter &converter, in genOmpAtomic()
1440 Fortran::lower::pft::Evaluation &eval, in genOmpAtomic()
1441 const Fortran::parser::OmpAtomic &atomicConstruct) { in genOmpAtomic()
1442 const Fortran::parser::OmpAtomicClauseList &atomicClauseList = in genOmpAtomic()
1443 std::get<Fortran::parser::OmpAtomicClauseList>(atomicConstruct.t); in genOmpAtomic()
1444 const auto &assignmentStmtExpr = std::get<Fortran::parser::Expr>( in genOmpAtomic()
1445 std::get<Fortran::parser::Statement<Fortran::parser::AssignmentStmt>>( in genOmpAtomic()
1448 const auto &assignmentStmtVariable = std::get<Fortran::parser::Variable>( in genOmpAtomic()
1449 std::get<Fortran::parser::Statement<Fortran::parser::AssignmentStmt>>( in genOmpAtomic()
1459 genOMP(Fortran::lower::AbstractConverter &converter, in genOMP()
1460 Fortran::lower::pft::Evaluation &eval, in genOMP()
1461 const Fortran::parser::OpenMPAtomicConstruct &atomicConstruct) { in genOMP()
1462 std::visit(Fortran::common::visitors{ in genOMP()
1463 [&](const Fortran::parser::OmpAtomicRead &atomicRead) { in genOMP()
1466 [&](const Fortran::parser::OmpAtomicWrite &atomicWrite) { in genOMP()
1469 [&](const Fortran::parser::OmpAtomic &atomicConstruct) { in genOMP()
1472 [&](const Fortran::parser::OmpAtomicUpdate &atomicUpdate) { in genOMP()
1482 void Fortran::lower::genOpenMPConstruct( in genOpenMPConstruct()
1483 Fortran::lower::AbstractConverter &converter, in genOpenMPConstruct()
1484 Fortran::lower::pft::Evaluation &eval, in genOpenMPConstruct()
1485 const Fortran::parser::OpenMPConstruct &ompConstruct) { in genOpenMPConstruct()
1489 [&](const Fortran::parser::OpenMPStandaloneConstruct in genOpenMPConstruct()
1493 [&](const Fortran::parser::OpenMPSectionsConstruct in genOpenMPConstruct()
1497 [&](const Fortran::parser::OpenMPSectionConstruct §ionConstruct) { in genOpenMPConstruct()
1500 [&](const Fortran::parser::OpenMPLoopConstruct &loopConstruct) { in genOpenMPConstruct()
1503 [&](const Fortran::parser::OpenMPDeclarativeAllocate in genOpenMPConstruct()
1507 [&](const Fortran::parser::OpenMPExecutableAllocate in genOpenMPConstruct()
1511 [&](const Fortran::parser::OpenMPBlockConstruct &blockConstruct) { in genOpenMPConstruct()
1514 [&](const Fortran::parser::OpenMPAtomicConstruct &atomicConstruct) { in genOpenMPConstruct()
1517 [&](const Fortran::parser::OpenMPCriticalConstruct in genOpenMPConstruct()
1525 void Fortran::lower::genThreadprivateOp( in genThreadprivateOp()
1526 Fortran::lower::AbstractConverter &converter, in genThreadprivateOp()
1527 const Fortran::lower::pft::Variable &var) { in genThreadprivateOp()
1531 const Fortran::semantics::Symbol &sym = var.getSymbol(); in genThreadprivateOp()
1533 if (const Fortran::semantics::Symbol *common = in genThreadprivateOp()
1534 Fortran::semantics::FindCommonBlockContaining(sym.GetUltimate())) { in genThreadprivateOp()
1561 void Fortran::lower::genOpenMPDeclarativeConstruct( in genOpenMPDeclarativeConstruct()
1562 Fortran::lower::AbstractConverter &converter, in genOpenMPDeclarativeConstruct()
1563 Fortran::lower::pft::Evaluation &eval, in genOpenMPDeclarativeConstruct()
1564 const Fortran::parser::OpenMPDeclarativeConstruct &ompDeclConstruct) { in genOpenMPDeclarativeConstruct()
1568 [&](const Fortran::parser::OpenMPDeclarativeAllocate in genOpenMPDeclarativeConstruct()
1572 [&](const Fortran::parser::OpenMPDeclareReductionConstruct in genOpenMPDeclarativeConstruct()
1577 [&](const Fortran::parser::OpenMPDeclareSimdConstruct in genOpenMPDeclarativeConstruct()
1581 [&](const Fortran::parser::OpenMPDeclareTargetConstruct in genOpenMPDeclarativeConstruct()
1586 [&](const Fortran::parser::OpenMPThreadprivate &threadprivate) { in genOpenMPDeclarativeConstruct()
1602 void Fortran::lower::genOpenMPReduction( in genOpenMPReduction()
1603 Fortran::lower::AbstractConverter &converter, in genOpenMPReduction()
1604 const Fortran::parser::OmpClauseList &clauseList) { in genOpenMPReduction()
1609 std::get_if<Fortran::parser::OmpClause::Reduction>(&clause.u)) { in genOpenMPReduction()
1610 const auto &redOperator{std::get<Fortran::parser::OmpReductionOperator>( in genOpenMPReduction()
1613 std::get<Fortran::parser::OmpObjectList>(reductionClause->v.t)}; in genOpenMPReduction()
1615 std::get_if<Fortran::parser::DefinedOperator>(&redOperator.u)) { in genOpenMPReduction()
1617 std::get<Fortran::parser::DefinedOperator::IntrinsicOperator>( in genOpenMPReduction()
1620 Fortran::parser::DefinedOperator::IntrinsicOperator::Add) in genOpenMPReduction()
1624 Fortran::parser::Unwrap<Fortran::parser::Name>(ompObject)}) { in genOpenMPReduction()