9#ifndef FORTRAN_LOWER_OPENMPUTILS_H
10#define FORTRAN_LOWER_OPENMPUTILS_H
12#include "flang/Lower/OpenMP/Clauses.h"
13#include "flang/Optimizer/Builder/HLFIRTools.h"
14#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
15#include "mlir/IR/Location.h"
16#include "mlir/IR/Value.h"
17#include "llvm/Frontend/OpenMP/OMPContext.h"
18#include "llvm/Support/CommandLine.h"
22extern llvm::cl::opt<bool> treatIndexAsSection;
49struct DeclareTargetCaptureInfo {
50 mlir::omp::DeclareTargetCaptureClause clause;
54 DeclareTargetCaptureInfo(mlir::omp::DeclareTargetCaptureClause c,
56 : clause(c), automap(a), symbol(s) {}
110 bool isDuplicateMemberMapInfo(llvm::SmallVectorImpl<int64_t> &memberIndices) {
111 return llvm::find_if(memberPlacementIndices, [&](
auto &memberData) {
112 return llvm::equal(memberIndices, memberData);
113 }) != memberPlacementIndices.end();
116 void addChildIndexAndMapToParent(
const omp::Object &
object,
117 mlir::omp::MapInfoOp &mapOp,
121void insertChildMapInfoIntoParent(
125 std::map<Object, OmpMapParentAndMemberData> &parentMemberIndices,
126 llvm::SmallVectorImpl<mlir::Value> &mapOperands,
127 llvm::SmallVectorImpl<Object> &mapObjects);
129void generateMemberPlacementIndices(
130 const Object &
object, llvm::SmallVectorImpl<int64_t> &indices,
133bool isMemberOrParentAllocatableOrPointer(
136mlir::Value createParentSymAndGenIntermediateMaps(
139 omp::ObjectList &objectList, llvm::SmallVectorImpl<int64_t> &indices,
141 mlir::omp::ClauseMapFlags mapTypeBits);
143bool requiresImplicitDefaultDeclareMapper(
146omp::ObjectList gatherObjectsOf(omp::Object derivedTypeMember,
150 std::size_t loopVarTypeSize);
155void gatherFuncAndVarSyms(
156 const ObjectList &objects, mlir::omp::DeclareTargetCaptureClause clause,
157 llvm::SmallVectorImpl<DeclareTargetCaptureInfo> &symbolAndClause,
158 bool automap =
false);
160int64_t getCollapseValue(
const List<Clause> &clauses);
162void genObjectList(
const ObjectList &objects,
164 llvm::SmallVectorImpl<mlir::Value> &operands);
166void lastprivateModifierNotSupported(
const omp::clause::Lastprivate &lastp,
171int64_t collectLoopRelatedInfo(
174 const omp::List<omp::Clause> &clauses,
175 mlir::omp::LoopRelatedClauseOps &result,
176 llvm::SmallVectorImpl<const semantics::Symbol *> &iv);
178void collectLoopRelatedInfo(
181 std::int64_t collapseValue,
183 mlir::omp::LoopRelatedClauseOps &result,
184 llvm::SmallVectorImpl<const semantics::Symbol *> &iv);
186void collectTileSizesFromOpenMPConstruct(
188 llvm::SmallVectorImpl<int64_t> &tileSizes,
193 const mlir::DataLayout &dl,
197 const omp::Object &
object,
212bool hasIteratorIVReference(
213 const omp::Object &
object,
214 const llvm::SmallPtrSetImpl<const Fortran::semantics::Symbol *> &ivSyms);
222 std::string &mapperIdName, llvm::StringRef memberName);
229std::optional<llvm::SmallVector<mlir::Value>> getIteratorElementIndices(
235mapTraitSet(parser::OmpTraitSetSelectorName::Value flangSet);
239llvm::omp::TraitSelector
241 llvm::omp::TraitSet set);
247void makeVariantMatchInfo(llvm::omp::VariantMatchInfo &vmi,
248 const parser::modifier::OmpContextSelector &ctxSel,
251 const parser::ScalarExpr *&dynamicCondExpr);
Definition AbstractConverter.h:87
Definition StatementContext.h:46
Definition semantics.h:68
Definition FIRBuilder.h:59
Definition HLFIRTools.h:52
Definition ParserActions.h:24
Definition check-expression.h:19
Definition bit-population-count.h:20
Definition AbstractConverter.h:37
Definition PFTBuilder.h:221
Definition parse-tree.h:3580
Definition parse-tree.h:3568
Definition parse-tree.h:5478
Definition parse-tree.h:3797