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<unsigned>(Str)
113 .Case(#Name, static_cast<unsigned>(OMPC_MAP_##Name))
114 #define OPENMP_MAP_MODIFIER_KIND(Name) \ 115 .Case(#Name, static_cast<unsigned>(OMPC_MAP_MODIFIER_##Name)) 116 #include "clang/Basic/OpenMPKinds.def" 118 case OMPC_dist_schedule:
119 return llvm::StringSwitch<OpenMPDistScheduleClauseKind>(Str)
121 #include "clang/Basic/OpenMPKinds.def" 123 case OMPC_defaultmap:
124 return llvm::StringSwitch<unsigned>(Str)
126 .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_##Name))
127 #define OPENMP_DEFAULTMAP_MODIFIER(Name) \ 128 .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_MODIFIER_##Name)) 129 #include "clang/Basic/OpenMPKinds.def" 131 case OMPC_atomic_default_mem_order:
132 return llvm::StringSwitch<OpenMPAtomicDefaultMemOrderClauseKind>(Str)
134 .Case(#Name, OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name)
135 #include "clang/Basic/OpenMPKinds.def" 141 case OMPC_num_threads:
146 case OMPC_firstprivate:
147 case OMPC_lastprivate:
150 case OMPC_task_reduction:
151 case OMPC_in_reduction:
154 case OMPC_copyprivate:
169 case OMPC_thread_limit:
178 case OMPC_use_device_ptr:
179 case OMPC_is_device_ptr:
180 case OMPC_unified_address:
181 case OMPC_unified_shared_memory:
182 case OMPC_reverse_offload:
183 case OMPC_dynamic_allocators:
186 llvm_unreachable(
"Invalid OpenMP simple clause kind");
196 #define OPENMP_DEFAULT_KIND(Name) \ 197 case OMPC_DEFAULT_##Name: \ 199 #include "clang/Basic/OpenMPKinds.def" 201 llvm_unreachable(
"Invalid OpenMP 'default' clause type");
206 #define OPENMP_PROC_BIND_KIND(Name) \ 207 case OMPC_PROC_BIND_##Name: \ 209 #include "clang/Basic/OpenMPKinds.def" 211 llvm_unreachable(
"Invalid OpenMP 'proc_bind' clause type");
217 #define OPENMP_SCHEDULE_KIND(Name) \ 218 case OMPC_SCHEDULE_##Name: \ 220 #define OPENMP_SCHEDULE_MODIFIER(Name) \ 221 case OMPC_SCHEDULE_MODIFIER_##Name: \ 223 #include "clang/Basic/OpenMPKinds.def" 225 llvm_unreachable(
"Invalid OpenMP 'schedule' clause type");
230 #define OPENMP_DEPEND_KIND(Name) \ 231 case OMPC_DEPEND_##Name: \ 233 #include "clang/Basic/OpenMPKinds.def" 235 llvm_unreachable(
"Invalid OpenMP 'depend' clause type");
240 #define OPENMP_LINEAR_KIND(Name) \ 241 case OMPC_LINEAR_##Name: \ 243 #include "clang/Basic/OpenMPKinds.def" 245 llvm_unreachable(
"Invalid OpenMP 'linear' clause type");
251 #define OPENMP_MAP_KIND(Name) \ 252 case OMPC_MAP_##Name: \ 254 #define OPENMP_MAP_MODIFIER_KIND(Name) \ 255 case OMPC_MAP_MODIFIER_##Name: \ 257 #include "clang/Basic/OpenMPKinds.def" 261 llvm_unreachable(
"Invalid OpenMP 'map' clause type");
262 case OMPC_dist_schedule:
266 #define OPENMP_DIST_SCHEDULE_KIND(Name) \ 267 case OMPC_DIST_SCHEDULE_##Name: \ 269 #include "clang/Basic/OpenMPKinds.def" 271 llvm_unreachable(
"Invalid OpenMP 'dist_schedule' clause type");
272 case OMPC_defaultmap:
277 #define OPENMP_DEFAULTMAP_KIND(Name) \ 278 case OMPC_DEFAULTMAP_##Name: \ 280 #define OPENMP_DEFAULTMAP_MODIFIER(Name) \ 281 case OMPC_DEFAULTMAP_MODIFIER_##Name: \ 283 #include "clang/Basic/OpenMPKinds.def" 285 llvm_unreachable(
"Invalid OpenMP 'schedule' clause type");
286 case OMPC_atomic_default_mem_order:
290 #define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \ 291 case OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name: \ 293 #include "clang/Basic/OpenMPKinds.def" 295 llvm_unreachable(
"Invalid OpenMP 'atomic_default_mem_order' clause type");
300 case OMPC_num_threads:
305 case OMPC_firstprivate:
306 case OMPC_lastprivate:
309 case OMPC_task_reduction:
310 case OMPC_in_reduction:
313 case OMPC_copyprivate:
328 case OMPC_thread_limit:
337 case OMPC_use_device_ptr:
338 case OMPC_is_device_ptr:
339 case OMPC_unified_address:
340 case OMPC_unified_shared_memory:
341 case OMPC_reverse_offload:
342 case OMPC_dynamic_allocators:
345 llvm_unreachable(
"Invalid OpenMP simple clause kind");
355 #define OPENMP_PARALLEL_CLAUSE(Name) \ 358 #include "clang/Basic/OpenMPKinds.def" 365 #define OPENMP_SIMD_CLAUSE(Name) \ 368 #include "clang/Basic/OpenMPKinds.def" 375 #define OPENMP_FOR_CLAUSE(Name) \ 378 #include "clang/Basic/OpenMPKinds.def" 385 #define OPENMP_FOR_SIMD_CLAUSE(Name) \ 388 #include "clang/Basic/OpenMPKinds.def" 395 #define OPENMP_SECTIONS_CLAUSE(Name) \ 398 #include "clang/Basic/OpenMPKinds.def" 405 #define OPENMP_SINGLE_CLAUSE(Name) \ 408 #include "clang/Basic/OpenMPKinds.def" 413 case OMPD_parallel_for:
415 #define OPENMP_PARALLEL_FOR_CLAUSE(Name) \ 418 #include "clang/Basic/OpenMPKinds.def" 423 case OMPD_parallel_for_simd:
425 #define OPENMP_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 428 #include "clang/Basic/OpenMPKinds.def" 433 case OMPD_parallel_sections:
435 #define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name) \ 438 #include "clang/Basic/OpenMPKinds.def" 445 #define OPENMP_TASK_CLAUSE(Name) \ 448 #include "clang/Basic/OpenMPKinds.def" 454 return CKind == OMPC_flush;
458 #define OPENMP_ATOMIC_CLAUSE(Name) \ 461 #include "clang/Basic/OpenMPKinds.def" 468 #define OPENMP_TARGET_CLAUSE(Name) \ 471 #include "clang/Basic/OpenMPKinds.def" 478 #define OPENMP_REQUIRES_CLAUSE(Name) \ 481 #include "clang/Basic/OpenMPKinds.def" 486 case OMPD_target_data:
488 #define OPENMP_TARGET_DATA_CLAUSE(Name) \ 491 #include "clang/Basic/OpenMPKinds.def" 496 case OMPD_target_enter_data:
498 #define OPENMP_TARGET_ENTER_DATA_CLAUSE(Name) \ 501 #include "clang/Basic/OpenMPKinds.def" 506 case OMPD_target_exit_data:
508 #define OPENMP_TARGET_EXIT_DATA_CLAUSE(Name) \ 511 #include "clang/Basic/OpenMPKinds.def" 516 case OMPD_target_parallel:
518 #define OPENMP_TARGET_PARALLEL_CLAUSE(Name) \ 521 #include "clang/Basic/OpenMPKinds.def" 526 case OMPD_target_parallel_for:
528 #define OPENMP_TARGET_PARALLEL_FOR_CLAUSE(Name) \ 531 #include "clang/Basic/OpenMPKinds.def" 536 case OMPD_target_update:
538 #define OPENMP_TARGET_UPDATE_CLAUSE(Name) \ 541 #include "clang/Basic/OpenMPKinds.def" 548 #define OPENMP_TEAMS_CLAUSE(Name) \ 551 #include "clang/Basic/OpenMPKinds.def" 556 case OMPD_declare_simd:
560 #define OPENMP_CANCEL_CLAUSE(Name) \ 563 #include "clang/Basic/OpenMPKinds.def" 570 #define OPENMP_ORDERED_CLAUSE(Name) \ 573 #include "clang/Basic/OpenMPKinds.def" 580 #define OPENMP_TASKLOOP_CLAUSE(Name) \ 583 #include "clang/Basic/OpenMPKinds.def" 588 case OMPD_taskloop_simd:
590 #define OPENMP_TASKLOOP_SIMD_CLAUSE(Name) \ 593 #include "clang/Basic/OpenMPKinds.def" 600 #define OPENMP_CRITICAL_CLAUSE(Name) \ 603 #include "clang/Basic/OpenMPKinds.def" 608 case OMPD_distribute:
610 #define OPENMP_DISTRIBUTE_CLAUSE(Name) \ 613 #include "clang/Basic/OpenMPKinds.def" 618 case OMPD_distribute_parallel_for:
620 #define OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \ 623 #include "clang/Basic/OpenMPKinds.def" 628 case OMPD_distribute_parallel_for_simd:
630 #define OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 633 #include "clang/Basic/OpenMPKinds.def" 638 case OMPD_distribute_simd:
640 #define OPENMP_DISTRIBUTE_SIMD_CLAUSE(Name) \ 643 #include "clang/Basic/OpenMPKinds.def" 648 case OMPD_target_parallel_for_simd:
650 #define OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 653 #include "clang/Basic/OpenMPKinds.def" 658 case OMPD_target_simd:
660 #define OPENMP_TARGET_SIMD_CLAUSE(Name) \ 663 #include "clang/Basic/OpenMPKinds.def" 668 case OMPD_teams_distribute:
670 #define OPENMP_TEAMS_DISTRIBUTE_CLAUSE(Name) \ 673 #include "clang/Basic/OpenMPKinds.def" 678 case OMPD_teams_distribute_simd:
680 #define OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name) \ 683 #include "clang/Basic/OpenMPKinds.def" 688 case OMPD_teams_distribute_parallel_for_simd:
690 #define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 693 #include "clang/Basic/OpenMPKinds.def" 698 case OMPD_teams_distribute_parallel_for:
700 #define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \ 703 #include "clang/Basic/OpenMPKinds.def" 708 case OMPD_target_teams:
710 #define OPENMP_TARGET_TEAMS_CLAUSE(Name) \ 713 #include "clang/Basic/OpenMPKinds.def" 718 case OMPD_target_teams_distribute:
720 #define OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(Name) \ 723 #include "clang/Basic/OpenMPKinds.def" 728 case OMPD_target_teams_distribute_parallel_for:
730 #define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \ 733 #include "clang/Basic/OpenMPKinds.def" 738 case OMPD_target_teams_distribute_parallel_for_simd:
740 #define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \ 743 #include "clang/Basic/OpenMPKinds.def" 748 case OMPD_target_teams_distribute_simd:
750 #define OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name) \ 753 #include "clang/Basic/OpenMPKinds.def" 760 #define OPENMP_TASKGROUP_CLAUSE(Name) \ 763 #include "clang/Basic/OpenMPKinds.def" 768 case OMPD_declare_target:
769 case OMPD_end_declare_target:
771 case OMPD_threadprivate:
777 case OMPD_cancellation_point:
778 case OMPD_declare_reduction:
785 return DKind == OMPD_simd || DKind == OMPD_for || DKind == OMPD_for_simd ||
786 DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd ||
787 DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd ||
788 DKind == OMPD_distribute || DKind == OMPD_target_parallel_for ||
789 DKind == OMPD_distribute_parallel_for ||
790 DKind == OMPD_distribute_parallel_for_simd ||
791 DKind == OMPD_distribute_simd ||
792 DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
793 DKind == OMPD_teams_distribute ||
794 DKind == OMPD_teams_distribute_simd ||
795 DKind == OMPD_teams_distribute_parallel_for_simd ||
796 DKind == OMPD_teams_distribute_parallel_for ||
797 DKind == OMPD_target_teams_distribute ||
798 DKind == OMPD_target_teams_distribute_parallel_for ||
799 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
800 DKind == OMPD_target_teams_distribute_simd;
804 return DKind == OMPD_for || DKind == OMPD_for_simd ||
805 DKind == OMPD_sections || DKind == OMPD_section ||
806 DKind == OMPD_single || DKind == OMPD_parallel_for ||
807 DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
808 DKind == OMPD_target_parallel_for ||
809 DKind == OMPD_distribute_parallel_for ||
810 DKind == OMPD_distribute_parallel_for_simd ||
811 DKind == OMPD_target_parallel_for_simd ||
812 DKind == OMPD_teams_distribute_parallel_for_simd ||
813 DKind == OMPD_teams_distribute_parallel_for ||
814 DKind == OMPD_target_teams_distribute_parallel_for ||
815 DKind == OMPD_target_teams_distribute_parallel_for_simd;
819 return DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd;
823 return DKind == OMPD_parallel || DKind == OMPD_parallel_for ||
824 DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
825 DKind == OMPD_target_parallel || DKind == OMPD_target_parallel_for ||
826 DKind == OMPD_distribute_parallel_for ||
827 DKind == OMPD_distribute_parallel_for_simd ||
828 DKind == OMPD_target_parallel_for_simd ||
829 DKind == OMPD_teams_distribute_parallel_for ||
830 DKind == OMPD_teams_distribute_parallel_for_simd ||
831 DKind == OMPD_target_teams_distribute_parallel_for ||
832 DKind == OMPD_target_teams_distribute_parallel_for_simd;
836 return DKind == OMPD_target || DKind == OMPD_target_parallel ||
837 DKind == OMPD_target_parallel_for ||
838 DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
839 DKind == OMPD_target_teams || DKind == OMPD_target_teams_distribute ||
840 DKind == OMPD_target_teams_distribute_parallel_for ||
841 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
842 DKind == OMPD_target_teams_distribute_simd;
846 return DKind == OMPD_target_data || DKind == OMPD_target_enter_data ||
847 DKind == OMPD_target_exit_data || DKind == OMPD_target_update;
851 return DKind == OMPD_teams || DKind == OMPD_teams_distribute ||
852 DKind == OMPD_teams_distribute_simd ||
853 DKind == OMPD_teams_distribute_parallel_for_simd ||
854 DKind == OMPD_teams_distribute_parallel_for;
859 DKind == OMPD_target_teams || DKind == OMPD_target_teams_distribute ||
860 DKind == OMPD_target_teams_distribute_parallel_for ||
861 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
862 DKind == OMPD_target_teams_distribute_simd;
866 return DKind == OMPD_simd || DKind == OMPD_for_simd ||
867 DKind == OMPD_parallel_for_simd || DKind == OMPD_taskloop_simd ||
868 DKind == OMPD_distribute_parallel_for_simd ||
869 DKind == OMPD_distribute_simd || DKind == OMPD_target_simd ||
870 DKind == OMPD_teams_distribute_simd ||
871 DKind == OMPD_teams_distribute_parallel_for_simd ||
872 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
873 DKind == OMPD_target_teams_distribute_simd ||
874 DKind == OMPD_target_parallel_for_simd;
878 return Kind == OMPD_distribute || Kind == OMPD_distribute_parallel_for ||
879 Kind == OMPD_distribute_parallel_for_simd ||
880 Kind == OMPD_distribute_simd;
886 Kind == OMPD_teams_distribute || Kind == OMPD_teams_distribute_simd ||
887 Kind == OMPD_teams_distribute_parallel_for_simd ||
888 Kind == OMPD_teams_distribute_parallel_for ||
889 Kind == OMPD_target_teams_distribute ||
890 Kind == OMPD_target_teams_distribute_parallel_for ||
891 Kind == OMPD_target_teams_distribute_parallel_for_simd ||
892 Kind == OMPD_target_teams_distribute_simd;
896 return Kind == OMPC_private || Kind == OMPC_firstprivate ||
897 Kind == OMPC_lastprivate || Kind == OMPC_linear ||
898 Kind == OMPC_reduction || Kind == OMPC_task_reduction ||
899 Kind == OMPC_in_reduction;
911 return Kind == OMPD_distribute_parallel_for ||
912 Kind == OMPD_distribute_parallel_for_simd ||
913 Kind == OMPD_teams_distribute_parallel_for_simd ||
914 Kind == OMPD_teams_distribute_parallel_for ||
915 Kind == OMPD_target_teams_distribute_parallel_for ||
916 Kind == OMPD_target_teams_distribute_parallel_for_simd;
925 case OMPD_parallel_for:
926 case OMPD_parallel_for_simd:
927 case OMPD_parallel_sections:
928 case OMPD_distribute_parallel_for:
929 case OMPD_distribute_parallel_for_simd:
930 CaptureRegions.push_back(OMPD_parallel);
932 case OMPD_target_teams:
933 case OMPD_target_teams_distribute:
934 case OMPD_target_teams_distribute_simd:
935 CaptureRegions.push_back(OMPD_task);
936 CaptureRegions.push_back(OMPD_target);
937 CaptureRegions.push_back(OMPD_teams);
940 case OMPD_teams_distribute:
941 case OMPD_teams_distribute_simd:
942 CaptureRegions.push_back(OMPD_teams);
945 case OMPD_target_simd:
946 CaptureRegions.push_back(OMPD_task);
947 CaptureRegions.push_back(OMPD_target);
949 case OMPD_teams_distribute_parallel_for:
950 case OMPD_teams_distribute_parallel_for_simd:
951 CaptureRegions.push_back(OMPD_teams);
952 CaptureRegions.push_back(OMPD_parallel);
954 case OMPD_target_parallel:
955 case OMPD_target_parallel_for:
956 case OMPD_target_parallel_for_simd:
957 CaptureRegions.push_back(OMPD_task);
958 CaptureRegions.push_back(OMPD_target);
959 CaptureRegions.push_back(OMPD_parallel);
962 case OMPD_target_enter_data:
963 case OMPD_target_exit_data:
964 case OMPD_target_update:
965 CaptureRegions.push_back(OMPD_task);
968 case OMPD_taskloop_simd:
969 CaptureRegions.push_back(OMPD_taskloop);
971 case OMPD_target_teams_distribute_parallel_for:
972 case OMPD_target_teams_distribute_parallel_for_simd:
973 CaptureRegions.push_back(OMPD_task);
974 CaptureRegions.push_back(OMPD_target);
975 CaptureRegions.push_back(OMPD_teams);
976 CaptureRegions.push_back(OMPD_parallel);
987 case OMPD_distribute:
990 case OMPD_target_data:
991 case OMPD_distribute_simd:
994 case OMPD_threadprivate:
998 case OMPD_cancellation_point:
1001 case OMPD_declare_reduction:
1002 case OMPD_declare_simd:
1003 case OMPD_declare_target:
1004 case OMPD_end_declare_target:
1006 llvm_unreachable(
"OpenMP Directive is not allowed");
1008 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...
#define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name)
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...