1//===--- OpenMPKinds.def - OpenMP directives and clauses list ---*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9/// \file
10/// \brief This file defines the list of supported OpenMP directives and
11/// clauses.
12///
13//===----------------------------------------------------------------------===//
14
15#ifndef OPENMP_DIRECTIVE
16#  define OPENMP_DIRECTIVE(Name)
17#endif
18#ifndef OPENMP_DIRECTIVE_EXT
19#define OPENMP_DIRECTIVE_EXT(Name, Str)
20#endif
21#ifndef OPENMP_CLAUSE
22#  define OPENMP_CLAUSE(Name, Class)
23#endif
24#ifndef OPENMP_PARALLEL_CLAUSE
25#  define OPENMP_PARALLEL_CLAUSE(Name)
26#endif
27#ifndef OPENMP_SIMD_CLAUSE
28#  define OPENMP_SIMD_CLAUSE(Name)
29#endif
30#ifndef OPENMP_FOR_CLAUSE
31#  define OPENMP_FOR_CLAUSE(Name)
32#endif
33#ifndef OPENMP_SECTIONS_CLAUSE
34#  define OPENMP_SECTIONS_CLAUSE(Name)
35#endif
36#ifndef OPENMP_SINGLE_CLAUSE
37#  define OPENMP_SINGLE_CLAUSE(Name)
38#endif
39#ifndef OPENMP_PARALLEL_FOR_CLAUSE
40#  define OPENMP_PARALLEL_FOR_CLAUSE(Name)
41#endif
42#ifndef OPENMP_PARALLEL_SECTIONS_CLAUSE
43#  define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name)
44#endif
45#ifndef OPENMP_DEFAULT_KIND
46#  define OPENMP_DEFAULT_KIND(Name)
47#endif
48#ifndef OPENMP_PROC_BIND_KIND
49#  define OPENMP_PROC_BIND_KIND(Name)
50#endif
51#ifndef OPENMP_SCHEDULE_KIND
52#define OPENMP_SCHEDULE_KIND(Name)
53#endif
54
55// OpenMP directives.
56OPENMP_DIRECTIVE(threadprivate)
57OPENMP_DIRECTIVE(parallel)
58OPENMP_DIRECTIVE(task)
59OPENMP_DIRECTIVE(simd)
60OPENMP_DIRECTIVE(for)
61OPENMP_DIRECTIVE(sections)
62OPENMP_DIRECTIVE(section)
63OPENMP_DIRECTIVE(single)
64OPENMP_DIRECTIVE_EXT(parallel_for, "parallel for")
65OPENMP_DIRECTIVE_EXT(parallel_sections, "parallel sections")
66
67// OpenMP clauses.
68OPENMP_CLAUSE(if, OMPIfClause)
69OPENMP_CLAUSE(num_threads, OMPNumThreadsClause)
70OPENMP_CLAUSE(safelen, OMPSafelenClause)
71OPENMP_CLAUSE(collapse, OMPCollapseClause)
72OPENMP_CLAUSE(default, OMPDefaultClause)
73OPENMP_CLAUSE(private, OMPPrivateClause)
74OPENMP_CLAUSE(firstprivate, OMPFirstprivateClause)
75OPENMP_CLAUSE(lastprivate, OMPLastprivateClause)
76OPENMP_CLAUSE(shared,  OMPSharedClause)
77OPENMP_CLAUSE(reduction,  OMPReductionClause)
78OPENMP_CLAUSE(linear,  OMPLinearClause)
79OPENMP_CLAUSE(aligned, OMPAlignedClause)
80OPENMP_CLAUSE(copyin,  OMPCopyinClause)
81OPENMP_CLAUSE(copyprivate,  OMPCopyprivateClause)
82OPENMP_CLAUSE(proc_bind, OMPProcBindClause)
83OPENMP_CLAUSE(schedule, OMPScheduleClause)
84OPENMP_CLAUSE(ordered, OMPOrderedClause)
85OPENMP_CLAUSE(nowait, OMPNowaitClause)
86
87// Clauses allowed for OpenMP directive 'parallel'.
88OPENMP_PARALLEL_CLAUSE(if)
89OPENMP_PARALLEL_CLAUSE(num_threads)
90OPENMP_PARALLEL_CLAUSE(default)
91OPENMP_PARALLEL_CLAUSE(proc_bind)
92OPENMP_PARALLEL_CLAUSE(private)
93OPENMP_PARALLEL_CLAUSE(firstprivate)
94OPENMP_PARALLEL_CLAUSE(shared)
95OPENMP_PARALLEL_CLAUSE(reduction)
96OPENMP_PARALLEL_CLAUSE(copyin)
97
98// Clauses allowed for directive 'omp simd'.
99OPENMP_SIMD_CLAUSE(private)
100OPENMP_SIMD_CLAUSE(lastprivate)
101OPENMP_SIMD_CLAUSE(linear)
102OPENMP_SIMD_CLAUSE(aligned)
103OPENMP_SIMD_CLAUSE(safelen)
104OPENMP_SIMD_CLAUSE(collapse)
105OPENMP_SIMD_CLAUSE(reduction)
106
107// TODO more clauses allowed for directive 'omp for'.
108OPENMP_FOR_CLAUSE(private)
109OPENMP_FOR_CLAUSE(lastprivate)
110OPENMP_FOR_CLAUSE(firstprivate)
111OPENMP_FOR_CLAUSE(reduction)
112OPENMP_FOR_CLAUSE(collapse)
113OPENMP_FOR_CLAUSE(schedule)
114OPENMP_FOR_CLAUSE(ordered)
115OPENMP_FOR_CLAUSE(nowait)
116
117// Clauses allowed for OpenMP directive 'omp sections'.
118OPENMP_SECTIONS_CLAUSE(private)
119OPENMP_SECTIONS_CLAUSE(lastprivate)
120OPENMP_SECTIONS_CLAUSE(firstprivate)
121OPENMP_SECTIONS_CLAUSE(reduction)
122OPENMP_SECTIONS_CLAUSE(nowait)
123
124// TODO more clauses allowed for directive 'omp single'.
125OPENMP_SINGLE_CLAUSE(private)
126OPENMP_SINGLE_CLAUSE(firstprivate)
127OPENMP_SINGLE_CLAUSE(copyprivate)
128OPENMP_SINGLE_CLAUSE(nowait)
129
130// Static attributes for 'default' clause.
131OPENMP_DEFAULT_KIND(none)
132OPENMP_DEFAULT_KIND(shared)
133
134// Static attributes for 'proc_bind' clause.
135OPENMP_PROC_BIND_KIND(master)
136OPENMP_PROC_BIND_KIND(close)
137OPENMP_PROC_BIND_KIND(spread)
138
139// Static attributes for 'schedule' clause.
140OPENMP_SCHEDULE_KIND(static)
141OPENMP_SCHEDULE_KIND(dynamic)
142OPENMP_SCHEDULE_KIND(guided)
143OPENMP_SCHEDULE_KIND(auto)
144OPENMP_SCHEDULE_KIND(runtime)
145
146// Clauses allowed for OpenMP directive 'parallel for'.
147OPENMP_PARALLEL_FOR_CLAUSE(if)
148OPENMP_PARALLEL_FOR_CLAUSE(num_threads)
149OPENMP_PARALLEL_FOR_CLAUSE(default)
150OPENMP_PARALLEL_FOR_CLAUSE(proc_bind)
151OPENMP_PARALLEL_FOR_CLAUSE(private)
152OPENMP_PARALLEL_FOR_CLAUSE(firstprivate)
153OPENMP_PARALLEL_FOR_CLAUSE(shared)
154OPENMP_PARALLEL_FOR_CLAUSE(reduction)
155OPENMP_PARALLEL_FOR_CLAUSE(copyin)
156OPENMP_PARALLEL_FOR_CLAUSE(lastprivate)
157OPENMP_PARALLEL_FOR_CLAUSE(collapse)
158OPENMP_PARALLEL_FOR_CLAUSE(schedule)
159OPENMP_PARALLEL_FOR_CLAUSE(ordered)
160
161// Clauses allowed for OpenMP directive 'parallel sections'.
162OPENMP_PARALLEL_SECTIONS_CLAUSE(if)
163OPENMP_PARALLEL_SECTIONS_CLAUSE(num_threads)
164OPENMP_PARALLEL_SECTIONS_CLAUSE(default)
165OPENMP_PARALLEL_SECTIONS_CLAUSE(proc_bind)
166OPENMP_PARALLEL_SECTIONS_CLAUSE(private)
167OPENMP_PARALLEL_SECTIONS_CLAUSE(firstprivate)
168OPENMP_PARALLEL_SECTIONS_CLAUSE(shared)
169OPENMP_PARALLEL_SECTIONS_CLAUSE(reduction)
170OPENMP_PARALLEL_SECTIONS_CLAUSE(copyin)
171OPENMP_PARALLEL_SECTIONS_CLAUSE(lastprivate)
172
173#undef OPENMP_SCHEDULE_KIND
174#undef OPENMP_PROC_BIND_KIND
175#undef OPENMP_DEFAULT_KIND
176#undef OPENMP_DIRECTIVE
177#undef OPENMP_DIRECTIVE_EXT
178#undef OPENMP_CLAUSE
179#undef OPENMP_SINGLE_CLAUSE
180#undef OPENMP_SECTIONS_CLAUSE
181#undef OPENMP_PARALLEL_CLAUSE
182#undef OPENMP_PARALLEL_FOR_CLAUSE
183#undef OPENMP_PARALLEL_SECTIONS_CLAUSE
184#undef OPENMP_SIMD_CLAUSE
185#undef OPENMP_FOR_CLAUSE
186
187