16 #include "llvm/ADT/StringRef.h" 17 #include "llvm/ADT/StringSwitch.h" 18 #include "llvm/Support/ErrorHandling.h" 21 using namespace clang;
24 return llvm::StringSwitch<OpenMPDirectiveKind>(Str)
26 #define OPENMP_DIRECTIVE_EXT(Name, Str) .Case(Str, OMPD_##Name) 27 #include "clang/Basic/OpenMPKinds.def" 36 #define OPENMP_DIRECTIVE(Name) \ 39 #define OPENMP_DIRECTIVE_EXT(Name, Str) \ 42 #include "clang/Basic/OpenMPKinds.def" 45 llvm_unreachable(
"Invalid OpenMP directive kind");
55 return llvm::StringSwitch<OpenMPClauseKind>(Str)
57 #include "clang/Basic/OpenMPKinds.def" 67 #define OPENMP_CLAUSE(Name, Class) \ 70 #include "clang/Basic/OpenMPKinds.def" 74 return "threadprivate or thread local";
76 llvm_unreachable(
"Invalid OpenMP clause kind");
83 return llvm::StringSwitch<OpenMPDefaultClauseKind>(Str)
85 #include "clang/Basic/OpenMPKinds.def" 88 return llvm::StringSwitch<OpenMPProcBindClauseKind>(Str)
90 #include "clang/Basic/OpenMPKinds.def" 93 return llvm::StringSwitch<unsigned>(Str)
95 .Case(#Name, static_cast<unsigned>(OMPC_SCHEDULE_##Name))
96 #define OPENMP_SCHEDULE_MODIFIER(Name) \ 97 .Case(#Name, static_cast<unsigned>(OMPC_SCHEDULE_MODIFIER_##Name)) 98 #include "clang/Basic/OpenMPKinds.def" 101 return llvm::StringSwitch<OpenMPDependClauseKind>(Str)
103 #include "clang/Basic/OpenMPKinds.def" 106 return llvm::StringSwitch<OpenMPLinearClauseKind>(Str)
108 #include "clang/Basic/OpenMPKinds.def" 111 return llvm::StringSwitch<OpenMPMapClauseKind>(Str)
113 #include "clang/Basic/OpenMPKinds.def" 115 case OMPC_dist_schedule:
116 return llvm::StringSwitch<OpenMPDistScheduleClauseKind>(Str)
118 #include "clang/Basic/OpenMPKinds.def" 120 case OMPC_defaultmap:
121 return llvm::StringSwitch<unsigned>(Str)
123 .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_##Name))
124 #define OPENMP_DEFAULTMAP_MODIFIER(Name) \ 125 .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_MODIFIER_##Name)) 126 #include "clang/Basic/OpenMPKinds.def" 132 case OMPC_num_threads:
137 case OMPC_firstprivate:
138 case OMPC_lastprivate:
141 case OMPC_task_reduction:
142 case OMPC_in_reduction:
145 case OMPC_copyprivate:
160 case OMPC_thread_limit:
169 case OMPC_use_device_ptr:
170 case OMPC_is_device_ptr:
173 llvm_unreachable(
"Invalid OpenMP simple clause kind");
183 #define OPENMP_DEFAULT_KIND(Name) \ 184 case OMPC_DEFAULT_##Name: \ 186 #include "clang/Basic/OpenMPKinds.def" 188 llvm_unreachable(
"Invalid OpenMP 'default' clause type");
193 #define OPENMP_PROC_BIND_KIND(Name) \ 194 case OMPC_PROC_BIND_##Name: \ 196 #include "clang/Basic/OpenMPKinds.def" 198 llvm_unreachable(
"Invalid OpenMP 'proc_bind' clause type");
204 #define OPENMP_SCHEDULE_KIND(Name) \ 205 case OMPC_SCHEDULE_##Name: \ 207 #define OPENMP_SCHEDULE_MODIFIER(Name) \ 208 case OMPC_SCHEDULE_MODIFIER_##Name: \ 210 #include "clang/Basic/OpenMPKinds.def" 212 llvm_unreachable(
"Invalid OpenMP 'schedule' clause type");
217 #define OPENMP_DEPEND_KIND(Name) \ 218 case OMPC_DEPEND_##Name: \ 220 #include "clang/Basic/OpenMPKinds.def" 222 llvm_unreachable(
"Invalid OpenMP 'depend' clause type");
227 #define OPENMP_LINEAR_KIND(Name) \ 228 case OMPC_LINEAR_##Name: \ 230 #include "clang/Basic/OpenMPKinds.def" 232 llvm_unreachable(
"Invalid OpenMP 'linear' clause type");
237 #define OPENMP_MAP_KIND(Name) \ 238 case OMPC_MAP_##Name: \ 240 #include "clang/Basic/OpenMPKinds.def" 244 llvm_unreachable(
"Invalid OpenMP 'map' clause type");
245 case OMPC_dist_schedule:
249 #define OPENMP_DIST_SCHEDULE_KIND(Name) \ 250 case OMPC_DIST_SCHEDULE_##Name: \ 252 #include "clang/Basic/OpenMPKinds.def" 254 llvm_unreachable(
"Invalid OpenMP 'dist_schedule' clause type");
255 case OMPC_defaultmap:
260 #define OPENMP_DEFAULTMAP_KIND(Name) \ 261 case OMPC_DEFAULTMAP_##Name: \ 263 #define OPENMP_DEFAULTMAP_MODIFIER(Name) \ 264 case OMPC_DEFAULTMAP_MODIFIER_##Name: \ 266 #include "clang/Basic/OpenMPKinds.def" 268 llvm_unreachable(
"Invalid OpenMP 'schedule' clause type");
273 case OMPC_num_threads:
278 case OMPC_firstprivate:
279 case OMPC_lastprivate:
282 case OMPC_task_reduction:
283 case OMPC_in_reduction:
286 case OMPC_copyprivate:
301 case OMPC_thread_limit:
310 case OMPC_use_device_ptr:
311 case OMPC_is_device_ptr:
314 llvm_unreachable(
"Invalid OpenMP simple clause kind");
324 #define OPENMP_PARALLEL_CLAUSE(Name) \ 327 #include "clang/Basic/OpenMPKinds.def" 334 #define OPENMP_SIMD_CLAUSE(Name) \ 337 #include "clang/Basic/OpenMPKinds.def" 344 #define OPENMP_FOR_CLAUSE(Name) \ 347 #include "clang/Basic/OpenMPKinds.def" 354 #define OPENMP_FOR_SIMD_CLAUSE(Name) \ 357 #include "clang/Basic/OpenMPKinds.def" 364 #define OPENMP_SECTIONS_CLAUSE(Name) \ 367 #include "clang/Basic/OpenMPKinds.def" 374 #define OPENMP_SINGLE_CLAUSE(Name) \ 377 #include "clang/Basic/OpenMPKinds.def" 382 case OMPD_parallel_for:
384 #define OPENMP_PARALLEL_FOR_CLAUSE(Name) \ 387 #include "clang/Basic/OpenMPKinds.def" 392 case OMPD_parallel_for_simd:
394 #define OPENMP_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 397 #include "clang/Basic/OpenMPKinds.def" 402 case OMPD_parallel_sections:
404 #define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name) \ 407 #include "clang/Basic/OpenMPKinds.def" 414 #define OPENMP_TASK_CLAUSE(Name) \ 417 #include "clang/Basic/OpenMPKinds.def" 423 return CKind == OMPC_flush;
427 #define OPENMP_ATOMIC_CLAUSE(Name) \ 430 #include "clang/Basic/OpenMPKinds.def" 437 #define OPENMP_TARGET_CLAUSE(Name) \ 440 #include "clang/Basic/OpenMPKinds.def" 445 case OMPD_target_data:
447 #define OPENMP_TARGET_DATA_CLAUSE(Name) \ 450 #include "clang/Basic/OpenMPKinds.def" 455 case OMPD_target_enter_data:
457 #define OPENMP_TARGET_ENTER_DATA_CLAUSE(Name) \ 460 #include "clang/Basic/OpenMPKinds.def" 465 case OMPD_target_exit_data:
467 #define OPENMP_TARGET_EXIT_DATA_CLAUSE(Name) \ 470 #include "clang/Basic/OpenMPKinds.def" 475 case OMPD_target_parallel:
477 #define OPENMP_TARGET_PARALLEL_CLAUSE(Name) \ 480 #include "clang/Basic/OpenMPKinds.def" 485 case OMPD_target_parallel_for:
487 #define OPENMP_TARGET_PARALLEL_FOR_CLAUSE(Name) \ 490 #include "clang/Basic/OpenMPKinds.def" 495 case OMPD_target_update:
497 #define OPENMP_TARGET_UPDATE_CLAUSE(Name) \ 500 #include "clang/Basic/OpenMPKinds.def" 507 #define OPENMP_TEAMS_CLAUSE(Name) \ 510 #include "clang/Basic/OpenMPKinds.def" 515 case OMPD_declare_simd:
519 #define OPENMP_CANCEL_CLAUSE(Name) \ 522 #include "clang/Basic/OpenMPKinds.def" 529 #define OPENMP_ORDERED_CLAUSE(Name) \ 532 #include "clang/Basic/OpenMPKinds.def" 539 #define OPENMP_TASKLOOP_CLAUSE(Name) \ 542 #include "clang/Basic/OpenMPKinds.def" 547 case OMPD_taskloop_simd:
549 #define OPENMP_TASKLOOP_SIMD_CLAUSE(Name) \ 552 #include "clang/Basic/OpenMPKinds.def" 559 #define OPENMP_CRITICAL_CLAUSE(Name) \ 562 #include "clang/Basic/OpenMPKinds.def" 567 case OMPD_distribute:
569 #define OPENMP_DISTRIBUTE_CLAUSE(Name) \ 572 #include "clang/Basic/OpenMPKinds.def" 577 case OMPD_distribute_parallel_for:
579 #define OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \ 582 #include "clang/Basic/OpenMPKinds.def" 587 case OMPD_distribute_parallel_for_simd:
589 #define OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 592 #include "clang/Basic/OpenMPKinds.def" 597 case OMPD_distribute_simd:
599 #define OPENMP_DISTRIBUTE_SIMD_CLAUSE(Name) \ 602 #include "clang/Basic/OpenMPKinds.def" 607 case OMPD_target_parallel_for_simd:
609 #define OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 612 #include "clang/Basic/OpenMPKinds.def" 617 case OMPD_target_simd:
619 #define OPENMP_TARGET_SIMD_CLAUSE(Name) \ 622 #include "clang/Basic/OpenMPKinds.def" 627 case OMPD_teams_distribute:
629 #define OPENMP_TEAMS_DISTRIBUTE_CLAUSE(Name) \ 632 #include "clang/Basic/OpenMPKinds.def" 637 case OMPD_teams_distribute_simd:
639 #define OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name) \ 642 #include "clang/Basic/OpenMPKinds.def" 647 case OMPD_teams_distribute_parallel_for_simd:
649 #define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 652 #include "clang/Basic/OpenMPKinds.def" 657 case OMPD_teams_distribute_parallel_for:
659 #define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \ 662 #include "clang/Basic/OpenMPKinds.def" 667 case OMPD_target_teams:
669 #define OPENMP_TARGET_TEAMS_CLAUSE(Name) \ 672 #include "clang/Basic/OpenMPKinds.def" 677 case OMPD_target_teams_distribute:
679 #define OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(Name) \ 682 #include "clang/Basic/OpenMPKinds.def" 687 case OMPD_target_teams_distribute_parallel_for:
689 #define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \ 692 #include "clang/Basic/OpenMPKinds.def" 697 case OMPD_target_teams_distribute_parallel_for_simd:
699 #define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 702 #include "clang/Basic/OpenMPKinds.def" 707 case OMPD_target_teams_distribute_simd:
709 #define OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name) \ 712 #include "clang/Basic/OpenMPKinds.def" 719 #define OPENMP_TASKGROUP_CLAUSE(Name) \ 722 #include "clang/Basic/OpenMPKinds.def" 727 case OMPD_declare_target:
728 case OMPD_end_declare_target:
730 case OMPD_threadprivate:
736 case OMPD_cancellation_point:
737 case OMPD_declare_reduction:
744 return DKind == OMPD_simd || DKind == OMPD_for || DKind == OMPD_for_simd ||
745 DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd ||
746 DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd ||
747 DKind == OMPD_distribute || DKind == OMPD_target_parallel_for ||
748 DKind == OMPD_distribute_parallel_for ||
749 DKind == OMPD_distribute_parallel_for_simd ||
750 DKind == OMPD_distribute_simd ||
751 DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
752 DKind == OMPD_teams_distribute ||
753 DKind == OMPD_teams_distribute_simd ||
754 DKind == OMPD_teams_distribute_parallel_for_simd ||
755 DKind == OMPD_teams_distribute_parallel_for ||
756 DKind == OMPD_target_teams_distribute ||
757 DKind == OMPD_target_teams_distribute_parallel_for ||
758 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
759 DKind == OMPD_target_teams_distribute_simd;
763 return DKind == OMPD_for || DKind == OMPD_for_simd ||
764 DKind == OMPD_sections || DKind == OMPD_section ||
765 DKind == OMPD_single || DKind == OMPD_parallel_for ||
766 DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
767 DKind == OMPD_target_parallel_for ||
768 DKind == OMPD_distribute_parallel_for ||
769 DKind == OMPD_distribute_parallel_for_simd ||
770 DKind == OMPD_target_parallel_for_simd ||
771 DKind == OMPD_teams_distribute_parallel_for_simd ||
772 DKind == OMPD_teams_distribute_parallel_for ||
773 DKind == OMPD_target_teams_distribute_parallel_for ||
774 DKind == OMPD_target_teams_distribute_parallel_for_simd;
778 return DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd;
782 return DKind == OMPD_parallel || DKind == OMPD_parallel_for ||
783 DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
784 DKind == OMPD_target_parallel || DKind == OMPD_target_parallel_for ||
785 DKind == OMPD_distribute_parallel_for ||
786 DKind == OMPD_distribute_parallel_for_simd ||
787 DKind == OMPD_target_parallel_for_simd ||
788 DKind == OMPD_teams_distribute_parallel_for ||
789 DKind == OMPD_teams_distribute_parallel_for_simd ||
790 DKind == OMPD_target_teams_distribute_parallel_for ||
791 DKind == OMPD_target_teams_distribute_parallel_for_simd;
795 return DKind == OMPD_target || DKind == OMPD_target_parallel ||
796 DKind == OMPD_target_parallel_for ||
797 DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
798 DKind == OMPD_target_teams || DKind == OMPD_target_teams_distribute ||
799 DKind == OMPD_target_teams_distribute_parallel_for ||
800 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
801 DKind == OMPD_target_teams_distribute_simd;
805 return DKind == OMPD_target_data || DKind == OMPD_target_enter_data ||
806 DKind == OMPD_target_exit_data || DKind == OMPD_target_update;
810 return DKind == OMPD_teams || DKind == OMPD_teams_distribute ||
811 DKind == OMPD_teams_distribute_simd ||
812 DKind == OMPD_teams_distribute_parallel_for_simd ||
813 DKind == OMPD_teams_distribute_parallel_for;
818 DKind == OMPD_target_teams || DKind == OMPD_target_teams_distribute ||
819 DKind == OMPD_target_teams_distribute_parallel_for ||
820 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
821 DKind == OMPD_target_teams_distribute_simd;
825 return DKind == OMPD_simd || DKind == OMPD_for_simd ||
826 DKind == OMPD_parallel_for_simd || DKind == OMPD_taskloop_simd ||
827 DKind == OMPD_distribute_parallel_for_simd ||
828 DKind == OMPD_distribute_simd || DKind == OMPD_target_simd ||
829 DKind == OMPD_teams_distribute_simd ||
830 DKind == OMPD_teams_distribute_parallel_for_simd ||
831 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
832 DKind == OMPD_target_teams_distribute_simd ||
833 DKind == OMPD_target_parallel_for_simd;
837 return Kind == OMPD_distribute || Kind == OMPD_distribute_parallel_for ||
838 Kind == OMPD_distribute_parallel_for_simd ||
839 Kind == OMPD_distribute_simd;
845 Kind == OMPD_teams_distribute || Kind == OMPD_teams_distribute_simd ||
846 Kind == OMPD_teams_distribute_parallel_for_simd ||
847 Kind == OMPD_teams_distribute_parallel_for ||
848 Kind == OMPD_target_teams_distribute ||
849 Kind == OMPD_target_teams_distribute_parallel_for ||
850 Kind == OMPD_target_teams_distribute_parallel_for_simd ||
851 Kind == OMPD_target_teams_distribute_simd;
855 return Kind == OMPC_private || Kind == OMPC_firstprivate ||
856 Kind == OMPC_lastprivate || Kind == OMPC_linear ||
857 Kind == OMPC_reduction || Kind == OMPC_task_reduction ||
858 Kind == OMPC_in_reduction;
870 return Kind == OMPD_distribute_parallel_for ||
871 Kind == OMPD_distribute_parallel_for_simd ||
872 Kind == OMPD_teams_distribute_parallel_for_simd ||
873 Kind == OMPD_teams_distribute_parallel_for ||
874 Kind == OMPD_target_teams_distribute_parallel_for ||
875 Kind == OMPD_target_teams_distribute_parallel_for_simd;
884 case OMPD_parallel_for:
885 case OMPD_parallel_for_simd:
886 case OMPD_parallel_sections:
887 case OMPD_distribute_parallel_for:
888 case OMPD_distribute_parallel_for_simd:
889 CaptureRegions.push_back(OMPD_parallel);
891 case OMPD_target_teams:
892 case OMPD_target_teams_distribute:
893 case OMPD_target_teams_distribute_simd:
894 CaptureRegions.push_back(OMPD_task);
895 CaptureRegions.push_back(OMPD_target);
896 CaptureRegions.push_back(OMPD_teams);
899 case OMPD_teams_distribute:
900 case OMPD_teams_distribute_simd:
901 CaptureRegions.push_back(OMPD_teams);
904 case OMPD_target_simd:
905 CaptureRegions.push_back(OMPD_task);
906 CaptureRegions.push_back(OMPD_target);
908 case OMPD_teams_distribute_parallel_for:
909 case OMPD_teams_distribute_parallel_for_simd:
910 CaptureRegions.push_back(OMPD_teams);
911 CaptureRegions.push_back(OMPD_parallel);
913 case OMPD_target_parallel:
914 case OMPD_target_parallel_for:
915 case OMPD_target_parallel_for_simd:
916 CaptureRegions.push_back(OMPD_task);
917 CaptureRegions.push_back(OMPD_target);
918 CaptureRegions.push_back(OMPD_parallel);
921 case OMPD_target_enter_data:
922 case OMPD_target_exit_data:
923 case OMPD_target_update:
924 CaptureRegions.push_back(OMPD_task);
927 case OMPD_taskloop_simd:
928 CaptureRegions.push_back(OMPD_taskloop);
930 case OMPD_target_teams_distribute_parallel_for:
931 case OMPD_target_teams_distribute_parallel_for_simd:
932 CaptureRegions.push_back(OMPD_task);
933 CaptureRegions.push_back(OMPD_target);
934 CaptureRegions.push_back(OMPD_teams);
935 CaptureRegions.push_back(OMPD_parallel);
946 case OMPD_distribute:
949 case OMPD_target_data:
950 case OMPD_distribute_simd:
953 case OMPD_threadprivate:
957 case OMPD_cancellation_point:
960 case OMPD_declare_reduction:
961 case OMPD_declare_simd:
962 case OMPD_declare_target:
963 case OMPD_end_declare_target:
964 llvm_unreachable(
"OpenMP Directive is not allowed");
966 llvm_unreachable(
"Unknown OpenMP directive");
#define OPENMP_MAP_KIND(Name)
bool isOpenMPNestingDistributeDirective(OpenMPDirectiveKind DKind)
Checks if the specified composite/combined directive constitutes a distribute directive in the outerm...
bool isOpenMPTargetDataManagementDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a target data offload directive.
The base class of the type hierarchy.
const char * getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, unsigned Type)
bool isAllowedClauseForDirective(OpenMPDirectiveKind DKind, OpenMPClauseKind CKind)
#define OPENMP_LINEAR_KIND(Name)
const char * getOpenMPClauseName(OpenMPClauseKind Kind)
bool isOpenMPTaskingDirective(OpenMPDirectiveKind Kind)
Checks if the specified directive kind is one of tasking directives - task, taskloop or taksloop simd...
Defines some OpenMP-specific enums and functions.
bool isOpenMPTeamsDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a teams-kind directive.
OpenMPClauseKind getOpenMPClauseKind(llvm::StringRef Str)
bool isOpenMPTargetExecutionDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a target code offload directive.
#define OPENMP_DEFAULTMAP_KIND(Name)
bool isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a worksharing directive.
#define OPENMP_CLAUSE(Name, Class)
#define OPENMP_PROC_BIND_KIND(Name)
bool isOpenMPPrivate(OpenMPClauseKind Kind)
Checks if the specified clause is one of private clauses like 'private', 'firstprivate', 'reduction' etc.
bool isOpenMPParallelDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a parallel-kind directive.
#define OPENMP_DEPEND_KIND(Name)
OpenMPClauseKind
OpenMP clauses.
#define OPENMP_DIRECTIVE(Name)
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
bool isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a taskloop directive.
OpenMPDirectiveKind
OpenMP directives.
bool isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind)
Checks if the specified directive kind is one of the composite or combined directives that need loop ...
Dataflow Directional Tag Classes.
bool isOpenMPSimdDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a simd directive.
#define OPENMP_DEFAULT_KIND(Name)
bool isOpenMPThreadPrivate(OpenMPClauseKind Kind)
Checks if the specified clause is one of threadprivate clauses like 'threadprivate', 'copyin' or 'copyprivate'.
void getOpenMPCaptureRegions(llvm::SmallVectorImpl< OpenMPDirectiveKind > &CaptureRegions, OpenMPDirectiveKind DKind)
Return the captured regions of an OpenMP directive.
unsigned getOpenMPSimpleClauseType(OpenMPClauseKind Kind, llvm::StringRef Str)
bool isOpenMPDistributeDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a distribute directive.
OpenMPDirectiveKind getOpenMPDirectiveKind(llvm::StringRef Str)
const char * getOpenMPDirectiveName(OpenMPDirectiveKind Kind)
#define OPENMP_SCHEDULE_KIND(Name)
bool isOpenMPLoopDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a directive with an associated loop construct.
#define OPENMP_DIST_SCHEDULE_KIND(Name)
bool isOpenMPNestingTeamsDirective(OpenMPDirectiveKind DKind)
Checks if the specified composite/combined directive constitutes a teams directive in the outermost n...