FLANG
Public Member Functions | List of all members
Fortran::lower::omp::ClauseProcessor Class Reference

#include <Lower/OpenMP/ClauseProcessor.h>

Public Member Functions

 ClauseProcessor (lower::AbstractConverter &converter, semantics::SemanticsContext &semaCtx, const List< Clause > &clauses)
 
bool processBare (mlir::omp::BareClauseOps &result) const
 
bool processBind (mlir::omp::BindClauseOps &result) const
 
bool processCollapse (mlir::Location currentLocation, lower::pft::Evaluation &eval, mlir::omp::LoopRelatedClauseOps &result, llvm::SmallVectorImpl< const semantics::Symbol * > &iv) const
 
bool processDevice (lower::StatementContext &stmtCtx, mlir::omp::DeviceClauseOps &result) const
 
bool processDeviceType (mlir::omp::DeviceTypeClauseOps &result) const
 
bool processDistSchedule (lower::StatementContext &stmtCtx, mlir::omp::DistScheduleClauseOps &result) const
 
bool processFilter (lower::StatementContext &stmtCtx, mlir::omp::FilterClauseOps &result) const
 
bool processFinal (lower::StatementContext &stmtCtx, mlir::omp::FinalClauseOps &result) const
 
bool processHasDeviceAddr (mlir::omp::HasDeviceAddrClauseOps &result, llvm::SmallVectorImpl< const semantics::Symbol * > &isDeviceSyms) const
 
bool processHint (mlir::omp::HintClauseOps &result) const
 
bool processMergeable (mlir::omp::MergeableClauseOps &result) const
 
bool processNowait (mlir::omp::NowaitClauseOps &result) const
 
bool processNumTeams (lower::StatementContext &stmtCtx, mlir::omp::NumTeamsClauseOps &result) const
 
bool processNumThreads (lower::StatementContext &stmtCtx, mlir::omp::NumThreadsClauseOps &result) const
 
bool processOrder (mlir::omp::OrderClauseOps &result) const
 
bool processOrdered (mlir::omp::OrderedClauseOps &result) const
 
bool processPriority (lower::StatementContext &stmtCtx, mlir::omp::PriorityClauseOps &result) const
 
bool processProcBind (mlir::omp::ProcBindClauseOps &result) const
 
bool processSafelen (mlir::omp::SafelenClauseOps &result) const
 
bool processSchedule (lower::StatementContext &stmtCtx, mlir::omp::ScheduleClauseOps &result) const
 
bool processSimdlen (mlir::omp::SimdlenClauseOps &result) const
 
bool processThreadLimit (lower::StatementContext &stmtCtx, mlir::omp::ThreadLimitClauseOps &result) const
 
bool processUntied (mlir::omp::UntiedClauseOps &result) const
 
bool processDetach (mlir::omp::DetachClauseOps &result) const
 
bool processAligned (mlir::omp::AlignedClauseOps &result) const
 
bool processAllocate (mlir::omp::AllocateClauseOps &result) const
 
bool processCopyin () const
 
bool processCopyprivate (mlir::Location currentLocation, mlir::omp::CopyprivateClauseOps &result) const
 
bool processDepend (mlir::omp::DependClauseOps &result) const
 
bool processEnter (llvm::SmallVectorImpl< DeclareTargetCapturePair > &result) const
 
bool processIf (omp::clause::If::DirectiveNameModifier directiveName, mlir::omp::IfClauseOps &result) const
 
bool processIsDevicePtr (mlir::omp::IsDevicePtrClauseOps &result, llvm::SmallVectorImpl< const semantics::Symbol * > &isDeviceSyms) const
 
bool processLink (llvm::SmallVectorImpl< DeclareTargetCapturePair > &result) const
 
bool processMap (mlir::Location currentLocation, lower::StatementContext &stmtCtx, mlir::omp::MapClauseOps &result, llvm::SmallVectorImpl< const semantics::Symbol * > *mapSyms=nullptr) const
 
bool processMotionClauses (lower::StatementContext &stmtCtx, mlir::omp::MapClauseOps &result)
 
bool processNontemporal (mlir::omp::NontemporalClauseOps &result) const
 
bool processReduction (mlir::Location currentLocation, mlir::omp::ReductionClauseOps &result, llvm::SmallVectorImpl< const semantics::Symbol * > &reductionSyms) const
 
bool processTo (llvm::SmallVectorImpl< DeclareTargetCapturePair > &result) const
 
bool processUseDeviceAddr (lower::StatementContext &stmtCtx, mlir::omp::UseDeviceAddrClauseOps &result, llvm::SmallVectorImpl< const semantics::Symbol * > &useDeviceSyms) const
 
bool processUseDevicePtr (lower::StatementContext &stmtCtx, mlir::omp::UseDevicePtrClauseOps &result, llvm::SmallVectorImpl< const semantics::Symbol * > &useDeviceSyms) const
 
template<typename... Ts>
void processTODO (mlir::Location currentLocation, llvm::omp::Directive directive) const
 

Detailed Description

Class that handles the processing of OpenMP clauses.

Its process<ClauseName>() methods perform MLIR code generation for their corresponding clause if it is present in the clause list. Otherwise, they will return false to signal that the clause was not found.

The intended use of this class is to move clause processing outside of construct processing, since the same clauses can appear attached to different constructs and constructs can be combined, so that code duplication is minimized.

Each construct-lowering function only calls the process<ClauseName>() methods that relate to clauses that can impact the lowering of that construct.


The documentation for this class was generated from the following files: