diff options
Diffstat (limited to 'flang/include/flang/Lower/OpenACC.h')
-rw-r--r-- | flang/include/flang/Lower/OpenACC.h | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/flang/include/flang/Lower/OpenACC.h b/flang/include/flang/Lower/OpenACC.h index af34510..e974f3d 100644 --- a/flang/include/flang/Lower/OpenACC.h +++ b/flang/include/flang/Lower/OpenACC.h @@ -43,6 +43,7 @@ struct ProcedureDesignator; namespace parser { struct AccClauseList; +struct DoConstruct; struct OpenACCConstruct; struct OpenACCDeclarativeConstruct; struct OpenACCRoutineConstruct; @@ -58,6 +59,7 @@ namespace lower { class AbstractConverter; class StatementContext; +class SymMap; namespace pft { struct Evaluation; @@ -114,14 +116,32 @@ void attachDeclarePostDeallocAction(AbstractConverter &, fir::FirOpBuilder &, void genOpenACCTerminator(fir::FirOpBuilder &, mlir::Operation *, mlir::Location); -int64_t getLoopCountForCollapseAndTile(const Fortran::parser::AccClauseList &); +/// Used to obtain the number of contained loops to look for +/// since this is dependent on number of tile operands and collapse +/// clause. +uint64_t getLoopCountForCollapseAndTile(const Fortran::parser::AccClauseList &); +/// Checks whether the current insertion point is inside OpenACC loop. bool isInOpenACCLoop(fir::FirOpBuilder &); +/// Checks whether the current insertion point is inside OpenACC compute +/// construct. +bool isInsideOpenACCComputeConstruct(fir::FirOpBuilder &); + void setInsertionPointAfterOpenACCLoopIfInside(fir::FirOpBuilder &); void genEarlyReturnInOpenACCLoop(fir::FirOpBuilder &, mlir::Location); +/// Generates an OpenACC loop from a do construct in order to +/// properly capture the loop bounds, parallelism determination mode, +/// and to privatize the loop variables. +/// When the conversion is rejected, nullptr is returned. +mlir::Operation *genOpenACCLoopFromDoConstruct( + AbstractConverter &converter, + Fortran::semantics::SemanticsContext &semanticsContext, + Fortran::lower::SymMap &localSymbols, + const Fortran::parser::DoConstruct &doConstruct, pft::Evaluation &eval); + } // namespace lower } // namespace Fortran |