diff options
Diffstat (limited to 'clang/include')
-rw-r--r-- | clang/include/clang-c/Index.h | 6 | ||||
-rw-r--r-- | clang/include/clang/AST/RecursiveASTVisitor.h | 3 | ||||
-rw-r--r-- | clang/include/clang/AST/StmtOpenMP.h | 67 | ||||
-rw-r--r-- | clang/include/clang/Basic/OpenMPKinds.def | 24 | ||||
-rw-r--r-- | clang/include/clang/Basic/StmtNodes.td | 1 | ||||
-rw-r--r-- | clang/include/clang/Sema/Sema.h | 6 | ||||
-rw-r--r-- | clang/include/clang/Serialization/ASTBitCodes.h | 1 |
7 files changed, 107 insertions, 1 deletions
diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h index 0fb9a055d62..e6b1cd7d99b 100644 --- a/clang/include/clang-c/Index.h +++ b/clang/include/clang-c/Index.h @@ -2358,7 +2358,11 @@ enum CXCursorKind { */ CXCursor_OMPTargetTeamsDirective = 275, - CXCursor_LastStmt = CXCursor_OMPTargetTeamsDirective, + /** \brief OpenMP target teams distribute directive. + */ + CXCursor_OMPTargetTeamsDistributeDirective = 276, + + CXCursor_LastStmt = CXCursor_OMPTargetTeamsDistributeDirective, /** * \brief Cursor that represents the translation unit itself. diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index afacfd57231..f02006d97c8 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -2663,6 +2663,9 @@ DEF_TRAVERSE_STMT(OMPTeamsDistributeParallelForDirective, DEF_TRAVERSE_STMT(OMPTargetTeamsDirective, { TRY_TO(TraverseOMPExecutableDirective(S)); }) +DEF_TRAVERSE_STMT(OMPTargetTeamsDistributeDirective, + { TRY_TO(TraverseOMPExecutableDirective(S)); }) + // OpenMP clauses. template <typename Derived> bool RecursiveASTVisitor<Derived>::TraverseOMPClause(OMPClause *C) { diff --git a/clang/include/clang/AST/StmtOpenMP.h b/clang/include/clang/AST/StmtOpenMP.h index 09d4f7766b2..84e522bc6df 100644 --- a/clang/include/clang/AST/StmtOpenMP.h +++ b/clang/include/clang/AST/StmtOpenMP.h @@ -3498,6 +3498,73 @@ public: } }; +/// This represents '#pragma omp target teams distribute' combined directive. +/// +/// \code +/// #pragma omp target teams distribute private(x) +/// \endcode +/// In this example directive '#pragma omp target teams distribute' has clause +/// 'private' with the variables 'x' +/// +class OMPTargetTeamsDistributeDirective final : public OMPLoopDirective { + friend class ASTStmtReader; + + /// Build directive with the given start and end location. + /// + /// \param StartLoc Starting location of the directive kind. + /// \param EndLoc Ending location of the directive. + /// \param CollapsedNum Number of collapsed nested loops. + /// \param NumClauses Number of clauses. + /// + OMPTargetTeamsDistributeDirective(SourceLocation StartLoc, + SourceLocation EndLoc, + unsigned CollapsedNum, unsigned NumClauses) + : OMPLoopDirective(this, OMPTargetTeamsDistributeDirectiveClass, + OMPD_target_teams_distribute, StartLoc, EndLoc, + CollapsedNum, NumClauses) {} + + /// Build an empty directive. + /// + /// \param CollapsedNum Number of collapsed nested loops. + /// \param NumClauses Number of clauses. + /// + explicit OMPTargetTeamsDistributeDirective(unsigned CollapsedNum, + unsigned NumClauses) + : OMPLoopDirective(this, OMPTargetTeamsDistributeDirectiveClass, + OMPD_target_teams_distribute, SourceLocation(), + SourceLocation(), CollapsedNum, NumClauses) {} + +public: + /// Creates directive with a list of \a Clauses. + /// + /// \param C AST context. + /// \param StartLoc Starting location of the directive kind. + /// \param EndLoc Ending Location of the directive. + /// \param CollapsedNum Number of collapsed loops. + /// \param Clauses List of clauses. + /// \param AssociatedStmt Statement, associated with the directive. + /// \param Exprs Helper expressions for CodeGen. + /// + static OMPTargetTeamsDistributeDirective * + Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc, + unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses, + Stmt *AssociatedStmt, const HelperExprs &Exprs); + + /// Creates an empty directive with the place for \a NumClauses clauses. + /// + /// \param C AST context. + /// \param CollapsedNum Number of collapsed nested loops. + /// \param NumClauses Number of clauses. + /// + static OMPTargetTeamsDistributeDirective * + CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, + EmptyShell); + + static bool classof(const Stmt *T) { + return T->getStmtClass() == OMPTargetTeamsDistributeDirectiveClass; + } +}; + } // end namespace clang #endif diff --git a/clang/include/clang/Basic/OpenMPKinds.def b/clang/include/clang/Basic/OpenMPKinds.def index d64ee53b4b3..13832911db4 100644 --- a/clang/include/clang/Basic/OpenMPKinds.def +++ b/clang/include/clang/Basic/OpenMPKinds.def @@ -156,6 +156,9 @@ #ifndef OPENMP_TARGET_TEAMS_CLAUSE #define OPENMP_TARGET_TEAMS_CLAUSE(Name) #endif +#ifndef OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE +#define OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(Name) +#endif // OpenMP directives. OPENMP_DIRECTIVE(threadprivate) @@ -206,6 +209,7 @@ OPENMP_DIRECTIVE_EXT(teams_distribute_simd, "teams distribute simd") OPENMP_DIRECTIVE_EXT(teams_distribute_parallel_for_simd, "teams distribute parallel for simd") OPENMP_DIRECTIVE_EXT(teams_distribute_parallel_for, "teams distribute parallel for") OPENMP_DIRECTIVE_EXT(target_teams, "target teams") +OPENMP_DIRECTIVE_EXT(target_teams_distribute, "target teams distribute") // OpenMP clauses. OPENMP_CLAUSE(if, OMPIfClause) @@ -743,6 +747,25 @@ OPENMP_TARGET_TEAMS_CLAUSE(reduction) OPENMP_TARGET_TEAMS_CLAUSE(num_teams) OPENMP_TARGET_TEAMS_CLAUSE(thread_limit) +// Clauses allowed for OpenMP directive 'target teams distribute'. +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(if) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(device) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(map) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(private) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(nowait) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(depend) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(defaultmap) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(firstprivate) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(is_device_ptr) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(default) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(shared) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(reduction) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(num_teams) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(thread_limit) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(lastprivate) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(collapse) +OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(dist_schedule) + #undef OPENMP_TASKLOOP_SIMD_CLAUSE #undef OPENMP_TASKLOOP_CLAUSE #undef OPENMP_LINEAR_KIND @@ -791,3 +814,4 @@ OPENMP_TARGET_TEAMS_CLAUSE(thread_limit) #undef OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE #undef OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE #undef OPENMP_TARGET_TEAMS_CLAUSE +#undef OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE diff --git a/clang/include/clang/Basic/StmtNodes.td b/clang/include/clang/Basic/StmtNodes.td index 5619f060876..98308f1439d 100644 --- a/clang/include/clang/Basic/StmtNodes.td +++ b/clang/include/clang/Basic/StmtNodes.td @@ -241,3 +241,4 @@ def OMPTeamsDistributeSimdDirective : DStmt<OMPLoopDirective>; def OMPTeamsDistributeParallelForSimdDirective : DStmt<OMPLoopDirective>; def OMPTeamsDistributeParallelForDirective : DStmt<OMPLoopDirective>; def OMPTargetTeamsDirective : DStmt<OMPExecutableDirective>; +def OMPTargetTeamsDistributeDirective : DStmt<OMPLoopDirective>; diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 512a667f690..e0d75fcf731 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -8471,6 +8471,12 @@ public: Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc); + /// Called on well-formed '\#pragma omp target teams distribute' after parsing + /// of the associated statement. + StmtResult ActOnOpenMPTargetTeamsDistributeDirective( + ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, + SourceLocation EndLoc, + llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA); /// Checks correctness of linear modifiers. bool CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind, diff --git a/clang/include/clang/Serialization/ASTBitCodes.h b/clang/include/clang/Serialization/ASTBitCodes.h index 4e29ad6a02a..441e034244f 100644 --- a/clang/include/clang/Serialization/ASTBitCodes.h +++ b/clang/include/clang/Serialization/ASTBitCodes.h @@ -1514,6 +1514,7 @@ namespace clang { STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE, STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE, STMT_OMP_TARGET_TEAMS_DIRECTIVE, + STMT_OMP_TARGET_TEAMS_DISTRIBUTE_DIRECTIVE, EXPR_OMP_ARRAY_SECTION, // ARC |