1//===--- OpenMPKinds.def - OpenMP directives and clauses list ---*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8/// \file
9/// This file defines the list of supported OpenMP directives and
10/// clauses.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef OPENMP_SCHEDULE_KIND
15#define OPENMP_SCHEDULE_KIND(Name)
16#endif
17#ifndef OPENMP_SCHEDULE_MODIFIER
18#define OPENMP_SCHEDULE_MODIFIER(Name)
19#endif
20#ifndef OPENMP_DEPEND_KIND
21#define OPENMP_DEPEND_KIND(Name)
22#endif
23#ifndef OPENMP_LINEAR_KIND
24#define OPENMP_LINEAR_KIND(Name)
25#endif
26#ifndef OPENMP_MAP_KIND
27#define OPENMP_MAP_KIND(Name)
28#endif
29#ifndef OPENMP_MAP_MODIFIER_KIND
30#define OPENMP_MAP_MODIFIER_KIND(Name)
31#endif
32#ifndef OPENMP_MOTION_MODIFIER_KIND
33#define OPENMP_MOTION_MODIFIER_KIND(Name)
34#endif
35#ifndef OPENMP_DIST_SCHEDULE_KIND
36#define OPENMP_DIST_SCHEDULE_KIND(Name)
37#endif
38#ifndef OPENMP_DEFAULTMAP_KIND
39#define OPENMP_DEFAULTMAP_KIND(Name)
40#endif
41#ifndef OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND
42#define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name)
43#endif
44#ifndef OPENMP_DEFAULTMAP_MODIFIER
45#define OPENMP_DEFAULTMAP_MODIFIER(Name)
46#endif
47#ifndef OPENMP_DEVICE_TYPE_KIND
48#define OPENMP_DEVICE_TYPE_KIND(Name)
49#endif
50#ifndef OPENMP_LASTPRIVATE_KIND
51#define OPENMP_LASTPRIVATE_KIND(Name)
52#endif
53#ifndef OPENMP_ORDER_KIND
54#define OPENMP_ORDER_KIND(Name)
55#endif
56#ifndef OPENMP_DEVICE_MODIFIER
57#define OPENMP_DEVICE_MODIFIER(Name)
58#endif
59#ifndef OPENMP_REDUCTION_MODIFIER
60#define OPENMP_REDUCTION_MODIFIER(Name)
61#endif
62#ifndef OPENMP_ADJUST_ARGS_KIND
63#define OPENMP_ADJUST_ARGS_KIND(Name)
64#endif
65#ifndef OPENMP_BIND_KIND
66#define OPENMP_BIND_KIND(Name)
67#endif
68
69// Static attributes for 'schedule' clause.
70OPENMP_SCHEDULE_KIND(static)
71OPENMP_SCHEDULE_KIND(dynamic)
72OPENMP_SCHEDULE_KIND(guided)
73OPENMP_SCHEDULE_KIND(auto)
74OPENMP_SCHEDULE_KIND(runtime)
75
76// Modifiers for 'schedule' clause.
77OPENMP_SCHEDULE_MODIFIER(monotonic)
78OPENMP_SCHEDULE_MODIFIER(nonmonotonic)
79OPENMP_SCHEDULE_MODIFIER(simd)
80
81// Modifiers for 'device' clause.
82OPENMP_DEVICE_MODIFIER(ancestor)
83OPENMP_DEVICE_MODIFIER(device_num)
84
85// Static attributes for 'defaultmap' clause.
86OPENMP_DEFAULTMAP_KIND(scalar)
87OPENMP_DEFAULTMAP_KIND(aggregate)
88OPENMP_DEFAULTMAP_KIND(pointer)
89
90// Modifiers for 'defaultmap' clause.
91OPENMP_DEFAULTMAP_MODIFIER(alloc)
92OPENMP_DEFAULTMAP_MODIFIER(to)
93OPENMP_DEFAULTMAP_MODIFIER(from)
94OPENMP_DEFAULTMAP_MODIFIER(tofrom)
95OPENMP_DEFAULTMAP_MODIFIER(firstprivate)
96OPENMP_DEFAULTMAP_MODIFIER(none)
97OPENMP_DEFAULTMAP_MODIFIER(default)
98OPENMP_DEFAULTMAP_MODIFIER(present)
99
100// Static attributes for 'depend' clause.
101OPENMP_DEPEND_KIND(in)
102OPENMP_DEPEND_KIND(out)
103OPENMP_DEPEND_KIND(inout)
104OPENMP_DEPEND_KIND(mutexinoutset)
105OPENMP_DEPEND_KIND(depobj)
106OPENMP_DEPEND_KIND(source)
107OPENMP_DEPEND_KIND(sink)
108OPENMP_DEPEND_KIND(inoutset)
109OPENMP_DEPEND_KIND(outallmemory)
110OPENMP_DEPEND_KIND(inoutallmemory)
111
112// Modifiers for 'linear' clause.
113OPENMP_LINEAR_KIND(val)
114OPENMP_LINEAR_KIND(ref)
115OPENMP_LINEAR_KIND(uval)
116
117// Modifiers for 'atomic_default_mem_order' clause.
118OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(seq_cst)
119OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(acq_rel)
120OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(relaxed)
121
122// Map types for 'map' clause.
123OPENMP_MAP_KIND(alloc)
124OPENMP_MAP_KIND(to)
125OPENMP_MAP_KIND(from)
126OPENMP_MAP_KIND(tofrom)
127OPENMP_MAP_KIND(delete)
128OPENMP_MAP_KIND(release)
129
130// Map-type-modifiers for 'map' clause.
131OPENMP_MAP_MODIFIER_KIND(always)
132OPENMP_MAP_MODIFIER_KIND(close)
133OPENMP_MAP_MODIFIER_KIND(mapper)
134OPENMP_MAP_MODIFIER_KIND(present)
135// This is an OpenMP extension for the sake of OpenACC support.
136OPENMP_MAP_MODIFIER_KIND(ompx_hold)
137
138// Modifiers for 'to' or 'from' clause.
139OPENMP_MOTION_MODIFIER_KIND(mapper)
140OPENMP_MOTION_MODIFIER_KIND(present)
141
142// Static attributes for 'dist_schedule' clause.
143OPENMP_DIST_SCHEDULE_KIND(static)
144
145// Device types for 'device_type' clause.
146OPENMP_DEVICE_TYPE_KIND(host)
147OPENMP_DEVICE_TYPE_KIND(nohost)
148OPENMP_DEVICE_TYPE_KIND(any)
149
150// Type of the 'lastprivate' clause.
151OPENMP_LASTPRIVATE_KIND(conditional)
152
153// Type of the 'order' clause.
154OPENMP_ORDER_KIND(concurrent)
155
156// Modifiers for 'reduction' clause.
157OPENMP_REDUCTION_MODIFIER(default)
158OPENMP_REDUCTION_MODIFIER(inscan)
159OPENMP_REDUCTION_MODIFIER(task)
160
161// Adjust-op kinds for the 'adjust_args' clause.
162OPENMP_ADJUST_ARGS_KIND(nothing)
163OPENMP_ADJUST_ARGS_KIND(need_device_ptr)
164
165// Binding kinds for the 'bind' clause.
166OPENMP_BIND_KIND(teams)
167OPENMP_BIND_KIND(parallel)
168OPENMP_BIND_KIND(thread)
169
170#undef OPENMP_BIND_KIND
171#undef OPENMP_ADJUST_ARGS_KIND
172#undef OPENMP_REDUCTION_MODIFIER
173#undef OPENMP_DEVICE_MODIFIER
174#undef OPENMP_ORDER_KIND
175#undef OPENMP_LASTPRIVATE_KIND
176#undef OPENMP_DEVICE_TYPE_KIND
177#undef OPENMP_LINEAR_KIND
178#undef OPENMP_DEPEND_KIND
179#undef OPENMP_SCHEDULE_MODIFIER
180#undef OPENMP_SCHEDULE_KIND
181#undef OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND
182#undef OPENMP_MAP_KIND
183#undef OPENMP_MAP_MODIFIER_KIND
184#undef OPENMP_MOTION_MODIFIER_KIND
185#undef OPENMP_DIST_SCHEDULE_KIND
186#undef OPENMP_DEFAULTMAP_KIND
187#undef OPENMP_DEFAULTMAP_MODIFIER
188
189