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