11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert//===--- OpenMPKinds.h - OpenMP enums ---------------------------*- C++ -*-===//
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert//
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert//                     The LLVM Compiler Infrastructure
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert//
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert// This file is distributed under the University of Illinois Open Source
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert// License. See LICENSE.TXT for details.
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert//
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert//===----------------------------------------------------------------------===//
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert///
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \file
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief Defines some OpenMP-specific enums and functions.
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert///
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert//===----------------------------------------------------------------------===//
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#ifndef LLVM_CLANG_BASIC_OPENMPKINDS_H
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#define LLVM_CLANG_BASIC_OPENMPKINDS_H
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "llvm/ADT/StringRef.h"
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertnamespace clang {
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief OpenMP directives.
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertenum OpenMPDirectiveKind {
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#define OPENMP_DIRECTIVE(Name) \
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPD_##Name,
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#define OPENMP_DIRECTIVE_EXT(Name, Str) \
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPD_##Name,
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "clang/Basic/OpenMPKinds.def"
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPD_unknown
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert};
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief OpenMP clauses.
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertenum OpenMPClauseKind {
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#define OPENMP_CLAUSE(Name, Class) \
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_##Name,
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "clang/Basic/OpenMPKinds.def"
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_threadprivate,
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_unknown
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert};
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief OpenMP attributes for 'default' clause.
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertenum OpenMPDefaultClauseKind {
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#define OPENMP_DEFAULT_KIND(Name) \
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_DEFAULT_##Name,
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "clang/Basic/OpenMPKinds.def"
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_DEFAULT_unknown
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert};
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief OpenMP attributes for 'proc_bind' clause.
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertenum OpenMPProcBindClauseKind {
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#define OPENMP_PROC_BIND_KIND(Name) \
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_PROC_BIND_##Name,
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "clang/Basic/OpenMPKinds.def"
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_PROC_BIND_unknown
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert};
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief OpenMP attributes for 'schedule' clause.
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertenum OpenMPScheduleClauseKind {
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#define OPENMP_SCHEDULE_KIND(Name) \
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_SCHEDULE_##Name,
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#include "clang/Basic/OpenMPKinds.def"
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  OMPC_SCHEDULE_unknown
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert};
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn BringertOpenMPDirectiveKind getOpenMPDirectiveKind(llvm::StringRef Str);
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertconst char *getOpenMPDirectiveName(OpenMPDirectiveKind Kind);
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn BringertOpenMPClauseKind getOpenMPClauseKind(llvm::StringRef Str);
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertconst char *getOpenMPClauseName(OpenMPClauseKind Kind);
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertunsigned getOpenMPSimpleClauseType(OpenMPClauseKind Kind, llvm::StringRef Str);
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertconst char *getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, unsigned Type);
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertbool isAllowedClauseForDirective(OpenMPDirectiveKind DKind,
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert                                 OpenMPClauseKind CKind);
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief Checks if the specified directive is a directive with an associated
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// loop construct.
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \param DKind Specified directive.
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \return true - the directive is a loop-associated directive like 'omp simd'
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// or 'omp for' directive, otherwise - false.
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertbool isOpenMPLoopDirective(OpenMPDirectiveKind DKind);
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief Checks if the specified directive is a worksharing directive.
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \param DKind Specified directive.
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \return true - the directive is a worksharing directive like 'omp for',
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// otherwise - false.
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertbool isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind);
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief Checks if the specified directive is a parallel-kind directive.
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \param DKind Specified directive.
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \return true - the directive is a parallel-like directive like 'omp
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// parallel', otherwise - false.
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertbool isOpenMPParallelDirective(OpenMPDirectiveKind DKind);
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief Checks if the specified directive is a simd directive.
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \param DKind Specified directive.
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \return true - the directive is a simd directive like 'omp simd',
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// otherwise - false.
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertbool isOpenMPSimdDirective(OpenMPDirectiveKind DKind);
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief Checks if the specified clause is one of private clauses like
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// 'private', 'firstprivate', 'reduction' etc..
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \param Kind Clause kind.
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \return true - the clause is a private clause, otherwise - false.
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertbool isOpenMPPrivate(OpenMPClauseKind Kind);
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \brief Checks if the specified clause is one of threadprivate clauses like
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// 'threadprivate', 'copyin' or 'copyprivate'.
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \param Kind Clause kind.
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/// \return true - the clause is a threadprivate clause, otherwise - false.
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertbool isOpenMPThreadPrivate(OpenMPClauseKind Kind);
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert#endif
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert