13#ifndef FORTRAN_LOWER_OPENACC_H
14#define FORTRAN_LOWER_OPENACC_H
16#include "mlir/Dialect/OpenACC/OpenACC.h"
19template <
typename T,
unsigned N>
68static constexpr llvm::StringRef declarePostAllocSuffix =
69 "_acc_declare_post_alloc";
70static constexpr llvm::StringRef declarePreDeallocSuffix =
71 "_acc_declare_pre_dealloc";
72static constexpr llvm::StringRef declarePostDeallocSuffix =
73 "_acc_declare_post_dealloc";
75static constexpr llvm::StringRef privatizationRecipePrefix =
"privatization";
78 Fortran::semantics::SemanticsContext &,
80 const parser::OpenACCConstruct &,
81 Fortran::lower::SymMap &localSymbols);
82void genOpenACCDeclarativeConstruct(
85void genOpenACCRoutineConstruct(
87 const std::vector<Fortran::semantics::OpenACCRoutineInfo> &);
89void declareExternalAccModuleDeclareActionRecipes(
91 const Fortran::semantics::Symbol &);
99 const Fortran::semantics::Symbol &);
101 mlir::Value beginOpValue,
102 const Fortran::semantics::Symbol &);
104 const Fortran::semantics::Symbol &);
106void genOpenACCTerminator(fir::FirOpBuilder &, mlir::Operation *,
116std::pair<uint64_t, bool>
144void setInsertionPointAfterOpenACCLoopIfInside(fir::FirOpBuilder &);
146void genEarlyReturnInOpenACCLoop(fir::FirOpBuilder &, mlir::Location);
154 mlir::Block *targetBlock);
162 Fortran::semantics::SemanticsContext &semanticsContext,
163 Fortran::lower::SymMap &localSymbols,
164 const Fortran::parser::DoConstruct &doConstruct,
pft::Evaluation &eval);
Definition AbstractConverter.h:87
Definition StatementContext.h:46
Definition SymbolMap.h:181
Definition semantics.h:67
Definition FIRBuilder.h:59
Definition ParserActions.h:24
uint64_t getLoopCountForCollapseAndTile(const Fortran::parser::AccClauseList &)
Definition OpenACC.cpp:5453
bool isInsideOpenACCRoutine(fir::FirOpBuilder &)
Definition OpenACC.cpp:5382
bool isInsideOpenACCComputeConstruct(fir::FirOpBuilder &)
Definition OpenACC.cpp:5376
void materializeOpenACCRoutineBindTargets(AbstractConverter &, mlir::ModuleOp)
Definition OpenACC.cpp:4857
bool isCollapsedDoConstruct(const Fortran::parser::DoConstruct &)
Check whether a DoConstruct was absorbed by a collapse clause.
Definition OpenACC.cpp:5367
std::pair< uint64_t, bool > getCollapseSizeAndForce(const Fortran::parser::AccClauseList &)
Definition OpenACC.cpp:5467
bool genOpenACCRegionExitBranch(fir::FirOpBuilder &, mlir::Location, mlir::Block *targetBlock)
Definition OpenACC.cpp:5424
void clearCollapsedDoConstructs()
Clear the collapsed DoConstruct tracking set.
Definition OpenACC.cpp:5372
void markDoConstructAsCollapsed(const Fortran::parser::DoConstruct &)
Definition OpenACC.cpp:5362
mlir::Operation * genOpenACCLoopFromDoConstruct(AbstractConverter &converter, Fortran::semantics::SemanticsContext &semanticsContext, Fortran::lower::SymMap &localSymbols, const Fortran::parser::DoConstruct &doConstruct, pft::Evaluation &eval)
Definition OpenACC.cpp:5488
bool shouldLowerDoConstructAsAccLoop(fir::FirOpBuilder &)
Definition OpenACC.cpp:5404
bool isInOpenACCLoop(fir::FirOpBuilder &)
Checks whether the current insertion point is inside OpenACC loop.
Definition OpenACC.cpp:5353
Definition check-expression.h:19
Definition bit-population-count.h:20
Definition AbstractConverter.h:37
Definition AbstractConverter.h:32
Definition PFTBuilder.h:221
Definition parse-tree.h:5778
Definition parse-tree.h:2367
Definition parse-tree.h:5921
Definition parse-tree.h:5892
Definition parse-tree.h:5783