• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#ifdef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
2#undef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
3
4namespace llvm {
5namespace acc {
6
7  // Sets for atomic
8
9  static AccClauseSet allowedClauses_ACCD_atomic {
10  };
11
12  static AccClauseSet allowedOnceClauses_ACCD_atomic {
13  };
14
15  static AccClauseSet allowedExclusiveClauses_ACCD_atomic {
16  };
17
18  static AccClauseSet requiredClauses_ACCD_atomic {
19  };
20
21  // Sets for cache
22
23  static AccClauseSet allowedClauses_ACCD_cache {
24  };
25
26  static AccClauseSet allowedOnceClauses_ACCD_cache {
27  };
28
29  static AccClauseSet allowedExclusiveClauses_ACCD_cache {
30  };
31
32  static AccClauseSet requiredClauses_ACCD_cache {
33  };
34
35  // Sets for data
36
37  static AccClauseSet allowedClauses_ACCD_data {
38    llvm::acc::Clause::ACCC_device_type,
39    llvm::acc::Clause::ACCC_wait,
40  };
41
42  static AccClauseSet allowedOnceClauses_ACCD_data {
43    llvm::acc::Clause::ACCC_async,
44    llvm::acc::Clause::ACCC_if,
45    llvm::acc::Clause::ACCC_default,
46  };
47
48  static AccClauseSet allowedExclusiveClauses_ACCD_data {
49  };
50
51  static AccClauseSet requiredClauses_ACCD_data {
52    llvm::acc::Clause::ACCC_attach,
53    llvm::acc::Clause::ACCC_copy,
54    llvm::acc::Clause::ACCC_copyin,
55    llvm::acc::Clause::ACCC_copyout,
56    llvm::acc::Clause::ACCC_create,
57    llvm::acc::Clause::ACCC_default,
58    llvm::acc::Clause::ACCC_deviceptr,
59    llvm::acc::Clause::ACCC_no_create,
60    llvm::acc::Clause::ACCC_present,
61  };
62
63  // Sets for declare
64
65  static AccClauseSet allowedClauses_ACCD_declare {
66    llvm::acc::Clause::ACCC_copy,
67    llvm::acc::Clause::ACCC_copyin,
68    llvm::acc::Clause::ACCC_copyout,
69    llvm::acc::Clause::ACCC_create,
70    llvm::acc::Clause::ACCC_present,
71    llvm::acc::Clause::ACCC_deviceptr,
72    llvm::acc::Clause::ACCC_device_resident,
73    llvm::acc::Clause::ACCC_link,
74  };
75
76  static AccClauseSet allowedOnceClauses_ACCD_declare {
77  };
78
79  static AccClauseSet allowedExclusiveClauses_ACCD_declare {
80  };
81
82  static AccClauseSet requiredClauses_ACCD_declare {
83  };
84
85  // Sets for enter data
86
87  static AccClauseSet allowedClauses_ACCD_enter_data {
88    llvm::acc::Clause::ACCC_wait,
89  };
90
91  static AccClauseSet allowedOnceClauses_ACCD_enter_data {
92    llvm::acc::Clause::ACCC_async,
93    llvm::acc::Clause::ACCC_if,
94  };
95
96  static AccClauseSet allowedExclusiveClauses_ACCD_enter_data {
97  };
98
99  static AccClauseSet requiredClauses_ACCD_enter_data {
100    llvm::acc::Clause::ACCC_attach,
101    llvm::acc::Clause::ACCC_create,
102    llvm::acc::Clause::ACCC_copyin,
103  };
104
105  // Sets for exit data
106
107  static AccClauseSet allowedClauses_ACCD_exit_data {
108    llvm::acc::Clause::ACCC_wait,
109  };
110
111  static AccClauseSet allowedOnceClauses_ACCD_exit_data {
112    llvm::acc::Clause::ACCC_async,
113    llvm::acc::Clause::ACCC_if,
114    llvm::acc::Clause::ACCC_finalize,
115  };
116
117  static AccClauseSet allowedExclusiveClauses_ACCD_exit_data {
118  };
119
120  static AccClauseSet requiredClauses_ACCD_exit_data {
121    llvm::acc::Clause::ACCC_copyout,
122    llvm::acc::Clause::ACCC_delete,
123    llvm::acc::Clause::ACCC_detach,
124  };
125
126  // Sets for host_data
127
128  static AccClauseSet allowedClauses_ACCD_host_data {
129  };
130
131  static AccClauseSet allowedOnceClauses_ACCD_host_data {
132    llvm::acc::Clause::ACCC_if,
133    llvm::acc::Clause::ACCC_if_present,
134  };
135
136  static AccClauseSet allowedExclusiveClauses_ACCD_host_data {
137  };
138
139  static AccClauseSet requiredClauses_ACCD_host_data {
140    llvm::acc::Clause::ACCC_use_device,
141  };
142
143  // Sets for init
144
145  static AccClauseSet allowedClauses_ACCD_init {
146  };
147
148  static AccClauseSet allowedOnceClauses_ACCD_init {
149    llvm::acc::Clause::ACCC_device_num,
150    llvm::acc::Clause::ACCC_device_type,
151    llvm::acc::Clause::ACCC_if,
152  };
153
154  static AccClauseSet allowedExclusiveClauses_ACCD_init {
155  };
156
157  static AccClauseSet requiredClauses_ACCD_init {
158  };
159
160  // Sets for kernels
161
162  static AccClauseSet allowedClauses_ACCD_kernels {
163    llvm::acc::Clause::ACCC_attach,
164    llvm::acc::Clause::ACCC_copy,
165    llvm::acc::Clause::ACCC_copyin,
166    llvm::acc::Clause::ACCC_copyout,
167    llvm::acc::Clause::ACCC_create,
168    llvm::acc::Clause::ACCC_device_type,
169    llvm::acc::Clause::ACCC_no_create,
170    llvm::acc::Clause::ACCC_present,
171    llvm::acc::Clause::ACCC_deviceptr,
172    llvm::acc::Clause::ACCC_wait,
173  };
174
175  static AccClauseSet allowedOnceClauses_ACCD_kernels {
176    llvm::acc::Clause::ACCC_async,
177    llvm::acc::Clause::ACCC_default,
178    llvm::acc::Clause::ACCC_if,
179    llvm::acc::Clause::ACCC_num_gangs,
180    llvm::acc::Clause::ACCC_num_workers,
181    llvm::acc::Clause::ACCC_self,
182    llvm::acc::Clause::ACCC_vector_length,
183  };
184
185  static AccClauseSet allowedExclusiveClauses_ACCD_kernels {
186  };
187
188  static AccClauseSet requiredClauses_ACCD_kernels {
189  };
190
191  // Sets for kernels loop
192
193  static AccClauseSet allowedClauses_ACCD_kernels_loop {
194    llvm::acc::Clause::ACCC_copy,
195    llvm::acc::Clause::ACCC_copyin,
196    llvm::acc::Clause::ACCC_copyout,
197    llvm::acc::Clause::ACCC_create,
198    llvm::acc::Clause::ACCC_device_type,
199    llvm::acc::Clause::ACCC_no_create,
200    llvm::acc::Clause::ACCC_present,
201    llvm::acc::Clause::ACCC_private,
202    llvm::acc::Clause::ACCC_reduction,
203    llvm::acc::Clause::ACCC_deviceptr,
204    llvm::acc::Clause::ACCC_attach,
205    llvm::acc::Clause::ACCC_wait,
206  };
207
208  static AccClauseSet allowedOnceClauses_ACCD_kernels_loop {
209    llvm::acc::Clause::ACCC_async,
210    llvm::acc::Clause::ACCC_collapse,
211    llvm::acc::Clause::ACCC_default,
212    llvm::acc::Clause::ACCC_gang,
213    llvm::acc::Clause::ACCC_if,
214    llvm::acc::Clause::ACCC_num_gangs,
215    llvm::acc::Clause::ACCC_num_workers,
216    llvm::acc::Clause::ACCC_self,
217    llvm::acc::Clause::ACCC_tile,
218    llvm::acc::Clause::ACCC_vector,
219    llvm::acc::Clause::ACCC_vector_length,
220    llvm::acc::Clause::ACCC_worker,
221  };
222
223  static AccClauseSet allowedExclusiveClauses_ACCD_kernels_loop {
224    llvm::acc::Clause::ACCC_auto,
225    llvm::acc::Clause::ACCC_independent,
226    llvm::acc::Clause::ACCC_seq,
227  };
228
229  static AccClauseSet requiredClauses_ACCD_kernels_loop {
230  };
231
232  // Sets for loop
233
234  static AccClauseSet allowedClauses_ACCD_loop {
235    llvm::acc::Clause::ACCC_device_type,
236    llvm::acc::Clause::ACCC_private,
237    llvm::acc::Clause::ACCC_reduction,
238  };
239
240  static AccClauseSet allowedOnceClauses_ACCD_loop {
241    llvm::acc::Clause::ACCC_collapse,
242    llvm::acc::Clause::ACCC_gang,
243    llvm::acc::Clause::ACCC_tile,
244    llvm::acc::Clause::ACCC_vector,
245    llvm::acc::Clause::ACCC_worker,
246  };
247
248  static AccClauseSet allowedExclusiveClauses_ACCD_loop {
249    llvm::acc::Clause::ACCC_auto,
250    llvm::acc::Clause::ACCC_independent,
251    llvm::acc::Clause::ACCC_seq,
252  };
253
254  static AccClauseSet requiredClauses_ACCD_loop {
255  };
256
257  // Sets for parallel
258
259  static AccClauseSet allowedClauses_ACCD_parallel {
260    llvm::acc::Clause::ACCC_attach,
261    llvm::acc::Clause::ACCC_async,
262    llvm::acc::Clause::ACCC_copy,
263    llvm::acc::Clause::ACCC_copyin,
264    llvm::acc::Clause::ACCC_copyout,
265    llvm::acc::Clause::ACCC_create,
266    llvm::acc::Clause::ACCC_deviceptr,
267    llvm::acc::Clause::ACCC_device_type,
268    llvm::acc::Clause::ACCC_no_create,
269    llvm::acc::Clause::ACCC_num_gangs,
270    llvm::acc::Clause::ACCC_num_workers,
271    llvm::acc::Clause::ACCC_present,
272    llvm::acc::Clause::ACCC_private,
273    llvm::acc::Clause::ACCC_firstprivate,
274    llvm::acc::Clause::ACCC_reduction,
275    llvm::acc::Clause::ACCC_wait,
276    llvm::acc::Clause::ACCC_vector_length,
277  };
278
279  static AccClauseSet allowedOnceClauses_ACCD_parallel {
280    llvm::acc::Clause::ACCC_default,
281    llvm::acc::Clause::ACCC_if,
282    llvm::acc::Clause::ACCC_self,
283  };
284
285  static AccClauseSet allowedExclusiveClauses_ACCD_parallel {
286  };
287
288  static AccClauseSet requiredClauses_ACCD_parallel {
289  };
290
291  // Sets for parallel loop
292
293  static AccClauseSet allowedClauses_ACCD_parallel_loop {
294    llvm::acc::Clause::ACCC_attach,
295    llvm::acc::Clause::ACCC_copy,
296    llvm::acc::Clause::ACCC_copyin,
297    llvm::acc::Clause::ACCC_copyout,
298    llvm::acc::Clause::ACCC_create,
299    llvm::acc::Clause::ACCC_deviceptr,
300    llvm::acc::Clause::ACCC_device_type,
301    llvm::acc::Clause::ACCC_firstprivate,
302    llvm::acc::Clause::ACCC_no_create,
303    llvm::acc::Clause::ACCC_present,
304    llvm::acc::Clause::ACCC_private,
305    llvm::acc::Clause::ACCC_reduction,
306    llvm::acc::Clause::ACCC_tile,
307    llvm::acc::Clause::ACCC_wait,
308  };
309
310  static AccClauseSet allowedOnceClauses_ACCD_parallel_loop {
311    llvm::acc::Clause::ACCC_async,
312    llvm::acc::Clause::ACCC_collapse,
313    llvm::acc::Clause::ACCC_default,
314    llvm::acc::Clause::ACCC_gang,
315    llvm::acc::Clause::ACCC_if,
316    llvm::acc::Clause::ACCC_num_gangs,
317    llvm::acc::Clause::ACCC_num_workers,
318    llvm::acc::Clause::ACCC_self,
319    llvm::acc::Clause::ACCC_vector,
320    llvm::acc::Clause::ACCC_vector_length,
321    llvm::acc::Clause::ACCC_worker,
322  };
323
324  static AccClauseSet allowedExclusiveClauses_ACCD_parallel_loop {
325    llvm::acc::Clause::ACCC_auto,
326    llvm::acc::Clause::ACCC_independent,
327    llvm::acc::Clause::ACCC_seq,
328  };
329
330  static AccClauseSet requiredClauses_ACCD_parallel_loop {
331  };
332
333  // Sets for routine
334
335  static AccClauseSet allowedClauses_ACCD_routine {
336  };
337
338  static AccClauseSet allowedOnceClauses_ACCD_routine {
339    llvm::acc::Clause::ACCC_bind,
340    llvm::acc::Clause::ACCC_device_type,
341    llvm::acc::Clause::ACCC_nohost,
342    llvm::acc::Clause::ACCC_gang,
343    llvm::acc::Clause::ACCC_seq,
344    llvm::acc::Clause::ACCC_vector,
345    llvm::acc::Clause::ACCC_worker,
346  };
347
348  static AccClauseSet allowedExclusiveClauses_ACCD_routine {
349  };
350
351  static AccClauseSet requiredClauses_ACCD_routine {
352  };
353
354  // Sets for serial
355
356  static AccClauseSet allowedClauses_ACCD_serial {
357    llvm::acc::Clause::ACCC_attach,
358    llvm::acc::Clause::ACCC_copy,
359    llvm::acc::Clause::ACCC_copyin,
360    llvm::acc::Clause::ACCC_copyout,
361    llvm::acc::Clause::ACCC_create,
362    llvm::acc::Clause::ACCC_deviceptr,
363    llvm::acc::Clause::ACCC_device_type,
364    llvm::acc::Clause::ACCC_no_create,
365    llvm::acc::Clause::ACCC_present,
366    llvm::acc::Clause::ACCC_private,
367    llvm::acc::Clause::ACCC_firstprivate,
368    llvm::acc::Clause::ACCC_reduction,
369    llvm::acc::Clause::ACCC_wait,
370  };
371
372  static AccClauseSet allowedOnceClauses_ACCD_serial {
373    llvm::acc::Clause::ACCC_async,
374    llvm::acc::Clause::ACCC_default,
375    llvm::acc::Clause::ACCC_if,
376    llvm::acc::Clause::ACCC_self,
377  };
378
379  static AccClauseSet allowedExclusiveClauses_ACCD_serial {
380  };
381
382  static AccClauseSet requiredClauses_ACCD_serial {
383  };
384
385  // Sets for serial loop
386
387  static AccClauseSet allowedClauses_ACCD_serial_loop {
388    llvm::acc::Clause::ACCC_attach,
389    llvm::acc::Clause::ACCC_copy,
390    llvm::acc::Clause::ACCC_copyin,
391    llvm::acc::Clause::ACCC_copyout,
392    llvm::acc::Clause::ACCC_create,
393    llvm::acc::Clause::ACCC_deviceptr,
394    llvm::acc::Clause::ACCC_device_type,
395    llvm::acc::Clause::ACCC_firstprivate,
396    llvm::acc::Clause::ACCC_no_create,
397    llvm::acc::Clause::ACCC_present,
398    llvm::acc::Clause::ACCC_private,
399    llvm::acc::Clause::ACCC_reduction,
400    llvm::acc::Clause::ACCC_wait,
401  };
402
403  static AccClauseSet allowedOnceClauses_ACCD_serial_loop {
404    llvm::acc::Clause::ACCC_async,
405    llvm::acc::Clause::ACCC_collapse,
406    llvm::acc::Clause::ACCC_default,
407    llvm::acc::Clause::ACCC_gang,
408    llvm::acc::Clause::ACCC_if,
409    llvm::acc::Clause::ACCC_self,
410    llvm::acc::Clause::ACCC_tile,
411    llvm::acc::Clause::ACCC_vector,
412    llvm::acc::Clause::ACCC_worker,
413  };
414
415  static AccClauseSet allowedExclusiveClauses_ACCD_serial_loop {
416    llvm::acc::Clause::ACCC_auto,
417    llvm::acc::Clause::ACCC_independent,
418    llvm::acc::Clause::ACCC_seq,
419  };
420
421  static AccClauseSet requiredClauses_ACCD_serial_loop {
422  };
423
424  // Sets for set
425
426  static AccClauseSet allowedClauses_ACCD_set {
427  };
428
429  static AccClauseSet allowedOnceClauses_ACCD_set {
430    llvm::acc::Clause::ACCC_default_async,
431    llvm::acc::Clause::ACCC_device_num,
432    llvm::acc::Clause::ACCC_device_type,
433    llvm::acc::Clause::ACCC_if,
434  };
435
436  static AccClauseSet allowedExclusiveClauses_ACCD_set {
437  };
438
439  static AccClauseSet requiredClauses_ACCD_set {
440    llvm::acc::Clause::ACCC_default_async,
441    llvm::acc::Clause::ACCC_device_num,
442    llvm::acc::Clause::ACCC_device_type,
443  };
444
445  // Sets for shutdown
446
447  static AccClauseSet allowedClauses_ACCD_shutdown {
448  };
449
450  static AccClauseSet allowedOnceClauses_ACCD_shutdown {
451    llvm::acc::Clause::ACCC_device_num,
452    llvm::acc::Clause::ACCC_device_type,
453    llvm::acc::Clause::ACCC_if,
454  };
455
456  static AccClauseSet allowedExclusiveClauses_ACCD_shutdown {
457  };
458
459  static AccClauseSet requiredClauses_ACCD_shutdown {
460  };
461
462  // Sets for unknown
463
464  static AccClauseSet allowedClauses_ACCD_unknown {
465  };
466
467  static AccClauseSet allowedOnceClauses_ACCD_unknown {
468  };
469
470  static AccClauseSet allowedExclusiveClauses_ACCD_unknown {
471  };
472
473  static AccClauseSet requiredClauses_ACCD_unknown {
474  };
475
476  // Sets for update
477
478  static AccClauseSet allowedClauses_ACCD_update {
479    llvm::acc::Clause::ACCC_device_type,
480    llvm::acc::Clause::ACCC_wait,
481  };
482
483  static AccClauseSet allowedOnceClauses_ACCD_update {
484    llvm::acc::Clause::ACCC_async,
485    llvm::acc::Clause::ACCC_if,
486    llvm::acc::Clause::ACCC_if_present,
487  };
488
489  static AccClauseSet allowedExclusiveClauses_ACCD_update {
490  };
491
492  static AccClauseSet requiredClauses_ACCD_update {
493    llvm::acc::Clause::ACCC_device,
494    llvm::acc::Clause::ACCC_host,
495    llvm::acc::Clause::ACCC_self,
496  };
497
498  // Sets for wait
499
500  static AccClauseSet allowedClauses_ACCD_wait {
501  };
502
503  static AccClauseSet allowedOnceClauses_ACCD_wait {
504    llvm::acc::Clause::ACCC_async,
505    llvm::acc::Clause::ACCC_if,
506  };
507
508  static AccClauseSet allowedExclusiveClauses_ACCD_wait {
509  };
510
511  static AccClauseSet requiredClauses_ACCD_wait {
512  };
513} // namespace acc
514} // namespace llvm
515
516#endif // GEN_FLANG_DIRECTIVE_CLAUSE_SETS
517
518#ifdef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
519#undef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
520
521{
522  {llvm::acc::Directive::ACCD_atomic,
523    {
524      llvm::acc::allowedClauses_ACCD_atomic,
525      llvm::acc::allowedOnceClauses_ACCD_atomic,
526      llvm::acc::allowedExclusiveClauses_ACCD_atomic,
527      llvm::acc::requiredClauses_ACCD_atomic,
528    }
529  },
530  {llvm::acc::Directive::ACCD_cache,
531    {
532      llvm::acc::allowedClauses_ACCD_cache,
533      llvm::acc::allowedOnceClauses_ACCD_cache,
534      llvm::acc::allowedExclusiveClauses_ACCD_cache,
535      llvm::acc::requiredClauses_ACCD_cache,
536    }
537  },
538  {llvm::acc::Directive::ACCD_data,
539    {
540      llvm::acc::allowedClauses_ACCD_data,
541      llvm::acc::allowedOnceClauses_ACCD_data,
542      llvm::acc::allowedExclusiveClauses_ACCD_data,
543      llvm::acc::requiredClauses_ACCD_data,
544    }
545  },
546  {llvm::acc::Directive::ACCD_declare,
547    {
548      llvm::acc::allowedClauses_ACCD_declare,
549      llvm::acc::allowedOnceClauses_ACCD_declare,
550      llvm::acc::allowedExclusiveClauses_ACCD_declare,
551      llvm::acc::requiredClauses_ACCD_declare,
552    }
553  },
554  {llvm::acc::Directive::ACCD_enter_data,
555    {
556      llvm::acc::allowedClauses_ACCD_enter_data,
557      llvm::acc::allowedOnceClauses_ACCD_enter_data,
558      llvm::acc::allowedExclusiveClauses_ACCD_enter_data,
559      llvm::acc::requiredClauses_ACCD_enter_data,
560    }
561  },
562  {llvm::acc::Directive::ACCD_exit_data,
563    {
564      llvm::acc::allowedClauses_ACCD_exit_data,
565      llvm::acc::allowedOnceClauses_ACCD_exit_data,
566      llvm::acc::allowedExclusiveClauses_ACCD_exit_data,
567      llvm::acc::requiredClauses_ACCD_exit_data,
568    }
569  },
570  {llvm::acc::Directive::ACCD_host_data,
571    {
572      llvm::acc::allowedClauses_ACCD_host_data,
573      llvm::acc::allowedOnceClauses_ACCD_host_data,
574      llvm::acc::allowedExclusiveClauses_ACCD_host_data,
575      llvm::acc::requiredClauses_ACCD_host_data,
576    }
577  },
578  {llvm::acc::Directive::ACCD_init,
579    {
580      llvm::acc::allowedClauses_ACCD_init,
581      llvm::acc::allowedOnceClauses_ACCD_init,
582      llvm::acc::allowedExclusiveClauses_ACCD_init,
583      llvm::acc::requiredClauses_ACCD_init,
584    }
585  },
586  {llvm::acc::Directive::ACCD_kernels,
587    {
588      llvm::acc::allowedClauses_ACCD_kernels,
589      llvm::acc::allowedOnceClauses_ACCD_kernels,
590      llvm::acc::allowedExclusiveClauses_ACCD_kernels,
591      llvm::acc::requiredClauses_ACCD_kernels,
592    }
593  },
594  {llvm::acc::Directive::ACCD_kernels_loop,
595    {
596      llvm::acc::allowedClauses_ACCD_kernels_loop,
597      llvm::acc::allowedOnceClauses_ACCD_kernels_loop,
598      llvm::acc::allowedExclusiveClauses_ACCD_kernels_loop,
599      llvm::acc::requiredClauses_ACCD_kernels_loop,
600    }
601  },
602  {llvm::acc::Directive::ACCD_loop,
603    {
604      llvm::acc::allowedClauses_ACCD_loop,
605      llvm::acc::allowedOnceClauses_ACCD_loop,
606      llvm::acc::allowedExclusiveClauses_ACCD_loop,
607      llvm::acc::requiredClauses_ACCD_loop,
608    }
609  },
610  {llvm::acc::Directive::ACCD_parallel,
611    {
612      llvm::acc::allowedClauses_ACCD_parallel,
613      llvm::acc::allowedOnceClauses_ACCD_parallel,
614      llvm::acc::allowedExclusiveClauses_ACCD_parallel,
615      llvm::acc::requiredClauses_ACCD_parallel,
616    }
617  },
618  {llvm::acc::Directive::ACCD_parallel_loop,
619    {
620      llvm::acc::allowedClauses_ACCD_parallel_loop,
621      llvm::acc::allowedOnceClauses_ACCD_parallel_loop,
622      llvm::acc::allowedExclusiveClauses_ACCD_parallel_loop,
623      llvm::acc::requiredClauses_ACCD_parallel_loop,
624    }
625  },
626  {llvm::acc::Directive::ACCD_routine,
627    {
628      llvm::acc::allowedClauses_ACCD_routine,
629      llvm::acc::allowedOnceClauses_ACCD_routine,
630      llvm::acc::allowedExclusiveClauses_ACCD_routine,
631      llvm::acc::requiredClauses_ACCD_routine,
632    }
633  },
634  {llvm::acc::Directive::ACCD_serial,
635    {
636      llvm::acc::allowedClauses_ACCD_serial,
637      llvm::acc::allowedOnceClauses_ACCD_serial,
638      llvm::acc::allowedExclusiveClauses_ACCD_serial,
639      llvm::acc::requiredClauses_ACCD_serial,
640    }
641  },
642  {llvm::acc::Directive::ACCD_serial_loop,
643    {
644      llvm::acc::allowedClauses_ACCD_serial_loop,
645      llvm::acc::allowedOnceClauses_ACCD_serial_loop,
646      llvm::acc::allowedExclusiveClauses_ACCD_serial_loop,
647      llvm::acc::requiredClauses_ACCD_serial_loop,
648    }
649  },
650  {llvm::acc::Directive::ACCD_set,
651    {
652      llvm::acc::allowedClauses_ACCD_set,
653      llvm::acc::allowedOnceClauses_ACCD_set,
654      llvm::acc::allowedExclusiveClauses_ACCD_set,
655      llvm::acc::requiredClauses_ACCD_set,
656    }
657  },
658  {llvm::acc::Directive::ACCD_shutdown,
659    {
660      llvm::acc::allowedClauses_ACCD_shutdown,
661      llvm::acc::allowedOnceClauses_ACCD_shutdown,
662      llvm::acc::allowedExclusiveClauses_ACCD_shutdown,
663      llvm::acc::requiredClauses_ACCD_shutdown,
664    }
665  },
666  {llvm::acc::Directive::ACCD_unknown,
667    {
668      llvm::acc::allowedClauses_ACCD_unknown,
669      llvm::acc::allowedOnceClauses_ACCD_unknown,
670      llvm::acc::allowedExclusiveClauses_ACCD_unknown,
671      llvm::acc::requiredClauses_ACCD_unknown,
672    }
673  },
674  {llvm::acc::Directive::ACCD_update,
675    {
676      llvm::acc::allowedClauses_ACCD_update,
677      llvm::acc::allowedOnceClauses_ACCD_update,
678      llvm::acc::allowedExclusiveClauses_ACCD_update,
679      llvm::acc::requiredClauses_ACCD_update,
680    }
681  },
682  {llvm::acc::Directive::ACCD_wait,
683    {
684      llvm::acc::allowedClauses_ACCD_wait,
685      llvm::acc::allowedOnceClauses_ACCD_wait,
686      llvm::acc::allowedExclusiveClauses_ACCD_wait,
687      llvm::acc::requiredClauses_ACCD_wait,
688    }
689  },
690}
691
692#endif // GEN_FLANG_DIRECTIVE_CLAUSE_MAP
693
694#ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES
695#undef GEN_FLANG_CLAUSE_PARSER_CLASSES
696
697WRAPPER_CLASS(Async, std::optional<ScalarIntExpr>);
698WRAPPER_CLASS(Attach, AccObjectList);
699EMPTY_CLASS(Auto);
700WRAPPER_CLASS(Bind, AccBindClause);
701EMPTY_CLASS(Capture);
702WRAPPER_CLASS(Collapse, AccCollapseArg);
703WRAPPER_CLASS(Copy, AccObjectList);
704WRAPPER_CLASS(Copyin, AccObjectListWithModifier);
705WRAPPER_CLASS(Copyout, AccObjectListWithModifier);
706WRAPPER_CLASS(Create, AccObjectListWithModifier);
707WRAPPER_CLASS(Default, AccDefaultClause);
708WRAPPER_CLASS(DefaultAsync, ScalarIntExpr);
709WRAPPER_CLASS(Delete, AccObjectList);
710WRAPPER_CLASS(Detach, AccObjectList);
711WRAPPER_CLASS(Device, AccObjectList);
712WRAPPER_CLASS(DeviceNum, ScalarIntExpr);
713WRAPPER_CLASS(Deviceptr, AccObjectList);
714WRAPPER_CLASS(DeviceResident, AccObjectList);
715WRAPPER_CLASS(DeviceType, AccDeviceTypeExprList);
716EMPTY_CLASS(Finalize);
717WRAPPER_CLASS(Firstprivate, AccObjectList);
718WRAPPER_CLASS(Gang, std::optional<AccGangArgList>);
719WRAPPER_CLASS(Host, AccObjectList);
720WRAPPER_CLASS(If, ScalarExpr);
721EMPTY_CLASS(IfPresent);
722EMPTY_CLASS(Independent);
723WRAPPER_CLASS(Link, AccObjectList);
724WRAPPER_CLASS(NoCreate, AccObjectList);
725EMPTY_CLASS(Nohost);
726WRAPPER_CLASS(NumGangs, std::list<ScalarIntExpr>);
727WRAPPER_CLASS(NumWorkers, ScalarIntExpr);
728WRAPPER_CLASS(Present, AccObjectList);
729WRAPPER_CLASS(Private, AccObjectList);
730EMPTY_CLASS(Read);
731WRAPPER_CLASS(Reduction, AccObjectListWithReduction);
732WRAPPER_CLASS(Self, std::optional<AccSelfClause>);
733EMPTY_CLASS(Seq);
734WRAPPER_CLASS(Tile, AccTileExprList);
735EMPTY_CLASS(Unknown);
736WRAPPER_CLASS(UseDevice, AccObjectList);
737WRAPPER_CLASS(Vector, std::optional<ScalarIntExpr>);
738WRAPPER_CLASS(VectorLength, ScalarIntExpr);
739WRAPPER_CLASS(Wait, std::optional<AccWaitArgument>);
740WRAPPER_CLASS(Worker, std::optional<ScalarIntExpr>);
741EMPTY_CLASS(Write);
742
743#endif // GEN_FLANG_CLAUSE_PARSER_CLASSES
744
745#ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
746#undef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
747
748Async
749, Attach
750, Auto
751, Bind
752, Capture
753, Collapse
754, Copy
755, Copyin
756, Copyout
757, Create
758, Default
759, DefaultAsync
760, Delete
761, Detach
762, Device
763, DeviceNum
764, Deviceptr
765, DeviceResident
766, DeviceType
767, Finalize
768, Firstprivate
769, Gang
770, Host
771, If
772, IfPresent
773, Independent
774, Link
775, NoCreate
776, Nohost
777, NumGangs
778, NumWorkers
779, Present
780, Private
781, Read
782, Reduction
783, Self
784, Seq
785, Tile
786, Unknown
787, UseDevice
788, Vector
789, VectorLength
790, Wait
791, Worker
792, Write
793
794#endif // GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
795
796#ifdef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
797#undef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
798
799NODE(AccClause, Async)
800NODE(AccClause, Attach)
801NODE(AccClause, Auto)
802NODE(AccClause, Bind)
803NODE(AccClause, Capture)
804NODE(AccClause, Collapse)
805NODE(AccClause, Copy)
806NODE(AccClause, Copyin)
807NODE(AccClause, Copyout)
808NODE(AccClause, Create)
809NODE(AccClause, Default)
810NODE(AccClause, DefaultAsync)
811NODE(AccClause, Delete)
812NODE(AccClause, Detach)
813NODE(AccClause, Device)
814NODE(AccClause, DeviceNum)
815NODE(AccClause, Deviceptr)
816NODE(AccClause, DeviceResident)
817NODE(AccClause, DeviceType)
818NODE(AccClause, Finalize)
819NODE(AccClause, Firstprivate)
820NODE(AccClause, Gang)
821NODE(AccClause, Host)
822NODE(AccClause, If)
823NODE(AccClause, IfPresent)
824NODE(AccClause, Independent)
825NODE(AccClause, Link)
826NODE(AccClause, NoCreate)
827NODE(AccClause, Nohost)
828NODE(AccClause, NumGangs)
829NODE(AccClause, NumWorkers)
830NODE(AccClause, Present)
831NODE(AccClause, Private)
832NODE(AccClause, Read)
833NODE(AccClause, Reduction)
834NODE(AccClause, Self)
835NODE(AccClause, Seq)
836NODE(AccClause, Tile)
837NODE(AccClause, Unknown)
838NODE(AccClause, UseDevice)
839NODE(AccClause, Vector)
840NODE(AccClause, VectorLength)
841NODE(AccClause, Wait)
842NODE(AccClause, Worker)
843NODE(AccClause, Write)
844
845#endif // GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
846
847#ifdef GEN_FLANG_CLAUSE_UNPARSE
848#undef GEN_FLANG_CLAUSE_UNPARSE
849
850void Unparse(const AccClause::Async &x) {
851  Word("ASYNC");
852  Walk("(", x.v, ")");
853}
854void Unparse(const AccClause::Attach &x) {
855  Word("ATTACH");
856  Put("(");
857  Walk(x.v);
858  Put(")");
859}
860void Before(const AccClause::Auto &) { Word("AUTO"); }
861void Unparse(const AccClause::Bind &x) {
862  Word("BIND");
863  Put("(");
864  Walk(x.v);
865  Put(")");
866}
867void Before(const AccClause::Capture &) { Word("CAPTURE"); }
868void Unparse(const AccClause::Collapse &x) {
869  Word("COLLAPSE");
870  Put("(");
871  Walk(x.v);
872  Put(")");
873}
874void Unparse(const AccClause::Copy &x) {
875  Word("COPY");
876  Put("(");
877  Walk(x.v);
878  Put(")");
879}
880void Unparse(const AccClause::Copyin &x) {
881  Word("COPYIN");
882  Put("(");
883  Walk(x.v);
884  Put(")");
885}
886void Unparse(const AccClause::Copyout &x) {
887  Word("COPYOUT");
888  Put("(");
889  Walk(x.v);
890  Put(")");
891}
892void Unparse(const AccClause::Create &x) {
893  Word("CREATE");
894  Put("(");
895  Walk(x.v);
896  Put(")");
897}
898void Unparse(const AccClause::Default &x) {
899  Word("DEFAULT");
900  Put("(");
901  Walk(x.v);
902  Put(")");
903}
904void Unparse(const AccClause::DefaultAsync &x) {
905  Word("DEFAULT_ASYNC");
906  Put("(");
907  Walk(x.v);
908  Put(")");
909}
910void Unparse(const AccClause::Delete &x) {
911  Word("DELETE");
912  Put("(");
913  Walk(x.v);
914  Put(")");
915}
916void Unparse(const AccClause::Detach &x) {
917  Word("DETACH");
918  Put("(");
919  Walk(x.v);
920  Put(")");
921}
922void Unparse(const AccClause::Device &x) {
923  Word("DEVICE");
924  Put("(");
925  Walk(x.v);
926  Put(")");
927}
928void Unparse(const AccClause::DeviceNum &x) {
929  Word("DEVICE_NUM");
930  Put("(");
931  Walk(x.v);
932  Put(")");
933}
934void Unparse(const AccClause::Deviceptr &x) {
935  Word("DEVICEPTR");
936  Put("(");
937  Walk(x.v);
938  Put(")");
939}
940void Unparse(const AccClause::DeviceResident &x) {
941  Word("DEVICE_RESIDENT");
942  Put("(");
943  Walk(x.v);
944  Put(")");
945}
946void Unparse(const AccClause::DeviceType &x) {
947  Word("DEVICE_TYPE");
948  Put("(");
949  Walk(x.v);
950  Put(")");
951}
952void Before(const AccClause::Finalize &) { Word("FINALIZE"); }
953void Unparse(const AccClause::Firstprivate &x) {
954  Word("FIRSTPRIVATE");
955  Put("(");
956  Walk(x.v);
957  Put(")");
958}
959void Unparse(const AccClause::Gang &x) {
960  Word("GANG");
961  Walk("(", x.v, ")");
962}
963void Unparse(const AccClause::Host &x) {
964  Word("HOST");
965  Put("(");
966  Walk(x.v);
967  Put(")");
968}
969void Unparse(const AccClause::If &x) {
970  Word("IF");
971  Put("(");
972  Walk(x.v);
973  Put(")");
974}
975void Before(const AccClause::IfPresent &) { Word("IF_PRESENT"); }
976void Before(const AccClause::Independent &) { Word("INDEPENDENT"); }
977void Unparse(const AccClause::Link &x) {
978  Word("LINK");
979  Put("(");
980  Walk(x.v);
981  Put(")");
982}
983void Unparse(const AccClause::NoCreate &x) {
984  Word("NO_CREATE");
985  Put("(");
986  Walk(x.v);
987  Put(")");
988}
989void Before(const AccClause::Nohost &) { Word("NOHOST"); }
990void Unparse(const AccClause::NumGangs &x) {
991  Word("NUM_GANGS");
992  Put("(");
993  Walk(x.v, ",");
994  Put(")");
995}
996void Unparse(const AccClause::NumWorkers &x) {
997  Word("NUM_WORKERS");
998  Put("(");
999  Walk(x.v);
1000  Put(")");
1001}
1002void Unparse(const AccClause::Present &x) {
1003  Word("PRESENT");
1004  Put("(");
1005  Walk(x.v);
1006  Put(")");
1007}
1008void Unparse(const AccClause::Private &x) {
1009  Word("PRIVATE");
1010  Put("(");
1011  Walk(x.v);
1012  Put(")");
1013}
1014void Before(const AccClause::Read &) { Word("READ"); }
1015void Unparse(const AccClause::Reduction &x) {
1016  Word("REDUCTION");
1017  Put("(");
1018  Walk(x.v);
1019  Put(")");
1020}
1021void Unparse(const AccClause::Self &x) {
1022  Word("SELF");
1023  Walk("(", x.v, ")");
1024}
1025void Before(const AccClause::Seq &) { Word("SEQ"); }
1026void Unparse(const AccClause::Tile &x) {
1027  Word("TILE");
1028  Put("(");
1029  Walk(x.v);
1030  Put(")");
1031}
1032void Before(const AccClause::Unknown &) { Word("UNKNOWN"); }
1033void Unparse(const AccClause::UseDevice &x) {
1034  Word("USE_DEVICE");
1035  Put("(");
1036  Walk(x.v);
1037  Put(")");
1038}
1039void Unparse(const AccClause::Vector &x) {
1040  Word("VECTOR");
1041  Walk("(", x.v, ")");
1042}
1043void Unparse(const AccClause::VectorLength &x) {
1044  Word("VECTOR_LENGTH");
1045  Put("(");
1046  Walk(x.v);
1047  Put(")");
1048}
1049void Unparse(const AccClause::Wait &x) {
1050  Word("WAIT");
1051  Walk("(", x.v, ")");
1052}
1053void Unparse(const AccClause::Worker &x) {
1054  Word("WORKER");
1055  Walk("(", x.v, ")");
1056}
1057void Before(const AccClause::Write &) { Word("WRITE"); }
1058
1059#endif // GEN_FLANG_CLAUSE_UNPARSE
1060
1061#ifdef GEN_FLANG_CLAUSE_CHECK_ENTER
1062#undef GEN_FLANG_CLAUSE_CHECK_ENTER
1063
1064void Enter(const parser::AccClause::Async &);
1065void Enter(const parser::AccClause::Attach &);
1066void Enter(const parser::AccClause::Auto &);
1067void Enter(const parser::AccClause::Bind &);
1068void Enter(const parser::AccClause::Capture &);
1069void Enter(const parser::AccClause::Collapse &);
1070void Enter(const parser::AccClause::Copy &);
1071void Enter(const parser::AccClause::Copyin &);
1072void Enter(const parser::AccClause::Copyout &);
1073void Enter(const parser::AccClause::Create &);
1074void Enter(const parser::AccClause::Default &);
1075void Enter(const parser::AccClause::DefaultAsync &);
1076void Enter(const parser::AccClause::Delete &);
1077void Enter(const parser::AccClause::Detach &);
1078void Enter(const parser::AccClause::Device &);
1079void Enter(const parser::AccClause::DeviceNum &);
1080void Enter(const parser::AccClause::Deviceptr &);
1081void Enter(const parser::AccClause::DeviceResident &);
1082void Enter(const parser::AccClause::DeviceType &);
1083void Enter(const parser::AccClause::Finalize &);
1084void Enter(const parser::AccClause::Firstprivate &);
1085void Enter(const parser::AccClause::Gang &);
1086void Enter(const parser::AccClause::Host &);
1087void Enter(const parser::AccClause::If &);
1088void Enter(const parser::AccClause::IfPresent &);
1089void Enter(const parser::AccClause::Independent &);
1090void Enter(const parser::AccClause::Link &);
1091void Enter(const parser::AccClause::NoCreate &);
1092void Enter(const parser::AccClause::Nohost &);
1093void Enter(const parser::AccClause::NumGangs &);
1094void Enter(const parser::AccClause::NumWorkers &);
1095void Enter(const parser::AccClause::Present &);
1096void Enter(const parser::AccClause::Private &);
1097void Enter(const parser::AccClause::Read &);
1098void Enter(const parser::AccClause::Reduction &);
1099void Enter(const parser::AccClause::Self &);
1100void Enter(const parser::AccClause::Seq &);
1101void Enter(const parser::AccClause::Tile &);
1102void Enter(const parser::AccClause::Unknown &);
1103void Enter(const parser::AccClause::UseDevice &);
1104void Enter(const parser::AccClause::Vector &);
1105void Enter(const parser::AccClause::VectorLength &);
1106void Enter(const parser::AccClause::Wait &);
1107void Enter(const parser::AccClause::Worker &);
1108void Enter(const parser::AccClause::Write &);
1109
1110#endif // GEN_FLANG_CLAUSE_CHECK_ENTER
1111
1112#ifdef GEN_FLANG_CLAUSE_PARSER_KIND_MAP
1113#undef GEN_FLANG_CLAUSE_PARSER_KIND_MAP
1114
1115if constexpr (std::is_same_v<A, parser::AccClause::Async>)
1116  return llvm::acc::Clause::ACCC_async;
1117if constexpr (std::is_same_v<A, parser::AccClause::Attach>)
1118  return llvm::acc::Clause::ACCC_attach;
1119if constexpr (std::is_same_v<A, parser::AccClause::Auto>)
1120  return llvm::acc::Clause::ACCC_auto;
1121if constexpr (std::is_same_v<A, parser::AccClause::Bind>)
1122  return llvm::acc::Clause::ACCC_bind;
1123if constexpr (std::is_same_v<A, parser::AccClause::Capture>)
1124  return llvm::acc::Clause::ACCC_capture;
1125if constexpr (std::is_same_v<A, parser::AccClause::Collapse>)
1126  return llvm::acc::Clause::ACCC_collapse;
1127if constexpr (std::is_same_v<A, parser::AccClause::Copy>)
1128  return llvm::acc::Clause::ACCC_copy;
1129if constexpr (std::is_same_v<A, parser::AccClause::Copyin>)
1130  return llvm::acc::Clause::ACCC_copyin;
1131if constexpr (std::is_same_v<A, parser::AccClause::Copyout>)
1132  return llvm::acc::Clause::ACCC_copyout;
1133if constexpr (std::is_same_v<A, parser::AccClause::Create>)
1134  return llvm::acc::Clause::ACCC_create;
1135if constexpr (std::is_same_v<A, parser::AccClause::Default>)
1136  return llvm::acc::Clause::ACCC_default;
1137if constexpr (std::is_same_v<A, parser::AccClause::DefaultAsync>)
1138  return llvm::acc::Clause::ACCC_default_async;
1139if constexpr (std::is_same_v<A, parser::AccClause::Delete>)
1140  return llvm::acc::Clause::ACCC_delete;
1141if constexpr (std::is_same_v<A, parser::AccClause::Detach>)
1142  return llvm::acc::Clause::ACCC_detach;
1143if constexpr (std::is_same_v<A, parser::AccClause::Device>)
1144  return llvm::acc::Clause::ACCC_device;
1145if constexpr (std::is_same_v<A, parser::AccClause::DeviceNum>)
1146  return llvm::acc::Clause::ACCC_device_num;
1147if constexpr (std::is_same_v<A, parser::AccClause::Deviceptr>)
1148  return llvm::acc::Clause::ACCC_deviceptr;
1149if constexpr (std::is_same_v<A, parser::AccClause::DeviceResident>)
1150  return llvm::acc::Clause::ACCC_device_resident;
1151if constexpr (std::is_same_v<A, parser::AccClause::DeviceType>)
1152  return llvm::acc::Clause::ACCC_device_type;
1153if constexpr (std::is_same_v<A, parser::AccClause::Finalize>)
1154  return llvm::acc::Clause::ACCC_finalize;
1155if constexpr (std::is_same_v<A, parser::AccClause::Firstprivate>)
1156  return llvm::acc::Clause::ACCC_firstprivate;
1157if constexpr (std::is_same_v<A, parser::AccClause::Gang>)
1158  return llvm::acc::Clause::ACCC_gang;
1159if constexpr (std::is_same_v<A, parser::AccClause::Host>)
1160  return llvm::acc::Clause::ACCC_host;
1161if constexpr (std::is_same_v<A, parser::AccClause::If>)
1162  return llvm::acc::Clause::ACCC_if;
1163if constexpr (std::is_same_v<A, parser::AccClause::IfPresent>)
1164  return llvm::acc::Clause::ACCC_if_present;
1165if constexpr (std::is_same_v<A, parser::AccClause::Independent>)
1166  return llvm::acc::Clause::ACCC_independent;
1167if constexpr (std::is_same_v<A, parser::AccClause::Link>)
1168  return llvm::acc::Clause::ACCC_link;
1169if constexpr (std::is_same_v<A, parser::AccClause::NoCreate>)
1170  return llvm::acc::Clause::ACCC_no_create;
1171if constexpr (std::is_same_v<A, parser::AccClause::Nohost>)
1172  return llvm::acc::Clause::ACCC_nohost;
1173if constexpr (std::is_same_v<A, parser::AccClause::NumGangs>)
1174  return llvm::acc::Clause::ACCC_num_gangs;
1175if constexpr (std::is_same_v<A, parser::AccClause::NumWorkers>)
1176  return llvm::acc::Clause::ACCC_num_workers;
1177if constexpr (std::is_same_v<A, parser::AccClause::Present>)
1178  return llvm::acc::Clause::ACCC_present;
1179if constexpr (std::is_same_v<A, parser::AccClause::Private>)
1180  return llvm::acc::Clause::ACCC_private;
1181if constexpr (std::is_same_v<A, parser::AccClause::Read>)
1182  return llvm::acc::Clause::ACCC_read;
1183if constexpr (std::is_same_v<A, parser::AccClause::Reduction>)
1184  return llvm::acc::Clause::ACCC_reduction;
1185if constexpr (std::is_same_v<A, parser::AccClause::Self>)
1186  return llvm::acc::Clause::ACCC_self;
1187if constexpr (std::is_same_v<A, parser::AccClause::Seq>)
1188  return llvm::acc::Clause::ACCC_seq;
1189if constexpr (std::is_same_v<A, parser::AccClause::Tile>)
1190  return llvm::acc::Clause::ACCC_tile;
1191if constexpr (std::is_same_v<A, parser::AccClause::Unknown>)
1192  return llvm::acc::Clause::ACCC_unknown;
1193if constexpr (std::is_same_v<A, parser::AccClause::UseDevice>)
1194  return llvm::acc::Clause::ACCC_use_device;
1195if constexpr (std::is_same_v<A, parser::AccClause::Vector>)
1196  return llvm::acc::Clause::ACCC_vector;
1197if constexpr (std::is_same_v<A, parser::AccClause::VectorLength>)
1198  return llvm::acc::Clause::ACCC_vector_length;
1199if constexpr (std::is_same_v<A, parser::AccClause::Wait>)
1200  return llvm::acc::Clause::ACCC_wait;
1201if constexpr (std::is_same_v<A, parser::AccClause::Worker>)
1202  return llvm::acc::Clause::ACCC_worker;
1203if constexpr (std::is_same_v<A, parser::AccClause::Write>)
1204  return llvm::acc::Clause::ACCC_write;
1205llvm_unreachable("Invalid OpenACC Parser clause");
1206
1207#endif // GEN_FLANG_CLAUSE_PARSER_KIND_MAP
1208
1209#ifdef GEN_FLANG_CLAUSES_PARSER
1210#undef GEN_FLANG_CLAUSES_PARSER
1211
1212TYPE_PARSER(
1213  "write" >> construct<AccClause>(construct<AccClause::Write>()) ||
1214  "worker" >> construct<AccClause>(construct<AccClause::Worker>(maybe(parenthesized("num:" >> scalarIntExpr || scalarIntExpr)))) ||
1215  "wait" >> construct<AccClause>(construct<AccClause::Wait>(maybe(parenthesized(Parser<AccWaitArgument>{})))) ||
1216  "vector_length" >> construct<AccClause>(construct<AccClause::VectorLength>(parenthesized(scalarIntExpr))) ||
1217  "vector" >> construct<AccClause>(construct<AccClause::Vector>(maybe(parenthesized("length:" >> scalarIntExpr || scalarIntExpr)))) ||
1218  "use_device" >> construct<AccClause>(construct<AccClause::UseDevice>(parenthesized(Parser<AccObjectList>{}))) ||
1219  "unknown" >> construct<AccClause>(construct<AccClause::Unknown>()) ||
1220  "tile" >> construct<AccClause>(construct<AccClause::Tile>(parenthesized(Parser<AccTileExprList>{}))) ||
1221  "seq" >> construct<AccClause>(construct<AccClause::Seq>()) ||
1222  "self" >> construct<AccClause>(construct<AccClause::Self>(maybe(parenthesized(Parser<AccSelfClause>{})))) ||
1223  "reduction" >> construct<AccClause>(construct<AccClause::Reduction>(parenthesized(Parser<AccObjectListWithReduction>{}))) ||
1224  "read" >> construct<AccClause>(construct<AccClause::Read>()) ||
1225  "private" >> construct<AccClause>(construct<AccClause::Private>(parenthesized(Parser<AccObjectList>{}))) ||
1226  "present" >> construct<AccClause>(construct<AccClause::Present>(parenthesized(Parser<AccObjectList>{}))) ||
1227  "num_workers" >> construct<AccClause>(construct<AccClause::NumWorkers>(parenthesized(scalarIntExpr))) ||
1228  "num_gangs" >> construct<AccClause>(construct<AccClause::NumGangs>(parenthesized(nonemptyList(scalarIntExpr)))) ||
1229  "nohost" >> construct<AccClause>(construct<AccClause::Nohost>()) ||
1230  "no_create" >> construct<AccClause>(construct<AccClause::NoCreate>(parenthesized(Parser<AccObjectList>{}))) ||
1231  "link" >> construct<AccClause>(construct<AccClause::Link>(parenthesized(Parser<AccObjectList>{}))) ||
1232  "independent" >> construct<AccClause>(construct<AccClause::Independent>()) ||
1233  "if_present" >> construct<AccClause>(construct<AccClause::IfPresent>()) ||
1234  "if" >> construct<AccClause>(construct<AccClause::If>(parenthesized(scalarExpr))) ||
1235  "host" >> construct<AccClause>(construct<AccClause::Host>(parenthesized(Parser<AccObjectList>{}))) ||
1236  "gang" >> construct<AccClause>(construct<AccClause::Gang>(maybe(parenthesized(Parser<AccGangArgList>{})))) ||
1237  "firstprivate" >> construct<AccClause>(construct<AccClause::Firstprivate>(parenthesized(Parser<AccObjectList>{}))) ||
1238  "finalize" >> construct<AccClause>(construct<AccClause::Finalize>()) ||
1239  "deviceptr" >> construct<AccClause>(construct<AccClause::Deviceptr>(parenthesized(Parser<AccObjectList>{}))) ||
1240  ("device_type"_tok || "dtype"_tok) >> construct<AccClause>(construct<AccClause::DeviceType>(parenthesized(Parser<AccDeviceTypeExprList>{}))) ||
1241  "device_resident" >> construct<AccClause>(construct<AccClause::DeviceResident>(parenthesized(Parser<AccObjectList>{}))) ||
1242  "device_num" >> construct<AccClause>(construct<AccClause::DeviceNum>(parenthesized(scalarIntExpr))) ||
1243  "device" >> construct<AccClause>(construct<AccClause::Device>(parenthesized(Parser<AccObjectList>{}))) ||
1244  "detach" >> construct<AccClause>(construct<AccClause::Detach>(parenthesized(Parser<AccObjectList>{}))) ||
1245  "delete" >> construct<AccClause>(construct<AccClause::Delete>(parenthesized(Parser<AccObjectList>{}))) ||
1246  "default_async" >> construct<AccClause>(construct<AccClause::DefaultAsync>(parenthesized(scalarIntExpr))) ||
1247  "default" >> construct<AccClause>(construct<AccClause::Default>(parenthesized(Parser<AccDefaultClause>{}))) ||
1248  ("create"_tok || "present_or_create"_tok || "pcreate"_tok) >> construct<AccClause>(construct<AccClause::Create>(parenthesized(Parser<AccObjectListWithModifier>{}))) ||
1249  ("copyout"_tok || "present_or_copyout"_tok || "pcopyout"_tok) >> construct<AccClause>(construct<AccClause::Copyout>(parenthesized(Parser<AccObjectListWithModifier>{}))) ||
1250  ("copyin"_tok || "present_or_copyin"_tok || "pcopyin"_tok) >> construct<AccClause>(construct<AccClause::Copyin>(parenthesized(Parser<AccObjectListWithModifier>{}))) ||
1251  ("copy"_tok || "present_or_copy"_tok || "pcopy"_tok) >> construct<AccClause>(construct<AccClause::Copy>(parenthesized(Parser<AccObjectList>{}))) ||
1252  "collapse" >> construct<AccClause>(construct<AccClause::Collapse>(parenthesized(Parser<AccCollapseArg>{}))) ||
1253  "capture" >> construct<AccClause>(construct<AccClause::Capture>()) ||
1254  "bind" >> construct<AccClause>(construct<AccClause::Bind>(parenthesized(Parser<AccBindClause>{}))) ||
1255  "auto" >> construct<AccClause>(construct<AccClause::Auto>()) ||
1256  "attach" >> construct<AccClause>(construct<AccClause::Attach>(parenthesized(Parser<AccObjectList>{}))) ||
1257  "async" >> construct<AccClause>(construct<AccClause::Async>(maybe(parenthesized(scalarIntExpr))))
1258)
1259
1260#endif // GEN_FLANG_CLAUSES_PARSER
1261
1262#ifdef GEN_CLANG_CLAUSE_CLASS
1263#undef GEN_CLANG_CLAUSE_CLASS
1264
1265#ifndef CLAUSE
1266#define CLAUSE(Enum, Str, Implicit)
1267#endif
1268#ifndef CLAUSE_CLASS
1269#define CLAUSE_CLASS(Enum, Str, Class)
1270#endif
1271#ifndef CLAUSE_NO_CLASS
1272#define CLAUSE_NO_CLASS(Enum, Str)
1273#endif
1274
1275#define __CLAUSE(Name, Class)                      \
1276  CLAUSE(ACCC_##Name, #Name, /* Implicit */ false) \
1277  CLAUSE_CLASS(ACCC_##Name, #Name, Class)
1278#define __CLAUSE_NO_CLASS(Name)                    \
1279  CLAUSE(ACCC_##Name, #Name, /* Implicit */ false) \
1280  CLAUSE_NO_CLASS(ACCC_##Name, #Name)
1281#define __IMPLICIT_CLAUSE_CLASS(Name, Str, Class)  \
1282  CLAUSE(ACCC_##Name, Str, /* Implicit */ true)    \
1283  CLAUSE_CLASS(ACCC_##Name, Str, Class)
1284#define __IMPLICIT_CLAUSE_NO_CLASS(Name, Str)      \
1285  CLAUSE(ACCC_##Name, Str, /* Implicit */ true)    \
1286  CLAUSE_NO_CLASS(ACCC_##Name, Str)
1287
1288__CLAUSE_NO_CLASS(async)
1289__CLAUSE_NO_CLASS(attach)
1290__CLAUSE_NO_CLASS(auto)
1291__CLAUSE_NO_CLASS(bind)
1292__CLAUSE_NO_CLASS(capture)
1293__CLAUSE_NO_CLASS(collapse)
1294__CLAUSE_NO_CLASS(copy)
1295__CLAUSE_NO_CLASS(copyin)
1296__CLAUSE_NO_CLASS(copyout)
1297__CLAUSE_NO_CLASS(create)
1298__CLAUSE_NO_CLASS(default)
1299__CLAUSE_NO_CLASS(default_async)
1300__CLAUSE_NO_CLASS(delete)
1301__CLAUSE_NO_CLASS(detach)
1302__CLAUSE_NO_CLASS(device)
1303__CLAUSE_NO_CLASS(device_num)
1304__CLAUSE_NO_CLASS(deviceptr)
1305__CLAUSE_NO_CLASS(device_resident)
1306__CLAUSE_NO_CLASS(device_type)
1307__CLAUSE_NO_CLASS(finalize)
1308__CLAUSE_NO_CLASS(firstprivate)
1309__CLAUSE_NO_CLASS(gang)
1310__CLAUSE_NO_CLASS(host)
1311__CLAUSE_NO_CLASS(if)
1312__CLAUSE_NO_CLASS(if_present)
1313__CLAUSE_NO_CLASS(independent)
1314__CLAUSE_NO_CLASS(link)
1315__CLAUSE_NO_CLASS(no_create)
1316__CLAUSE_NO_CLASS(nohost)
1317__CLAUSE_NO_CLASS(num_gangs)
1318__CLAUSE_NO_CLASS(num_workers)
1319__CLAUSE_NO_CLASS(present)
1320__CLAUSE_NO_CLASS(private)
1321__CLAUSE_NO_CLASS(read)
1322__CLAUSE_NO_CLASS(reduction)
1323__CLAUSE_NO_CLASS(self)
1324__CLAUSE_NO_CLASS(seq)
1325__CLAUSE_NO_CLASS(tile)
1326__CLAUSE_NO_CLASS(unknown)
1327__CLAUSE_NO_CLASS(use_device)
1328__CLAUSE_NO_CLASS(vector)
1329__CLAUSE_NO_CLASS(vector_length)
1330__CLAUSE_NO_CLASS(wait)
1331__CLAUSE_NO_CLASS(worker)
1332__CLAUSE_NO_CLASS(write)
1333
1334#undef __IMPLICIT_CLAUSE_NO_CLASS
1335#undef __IMPLICIT_CLAUSE_CLASS
1336#undef __CLAUSE
1337#undef CLAUSE_NO_CLASS
1338#undef CLAUSE_CLASS
1339#undef CLAUSE
1340
1341#endif // GEN_CLANG_CLAUSE_CLASS
1342
1343#ifdef GEN_DIRECTIVES_IMPL
1344#undef GEN_DIRECTIVES_IMPL
1345
1346Directive llvm::acc::getOpenACCDirectiveKind(llvm::StringRef Str) {
1347  return llvm::StringSwitch<Directive>(Str)
1348    .Case("atomic",ACCD_atomic)
1349    .Case("cache",ACCD_cache)
1350    .Case("data",ACCD_data)
1351    .Case("declare",ACCD_declare)
1352    .Case("enter data",ACCD_enter_data)
1353    .Case("exit data",ACCD_exit_data)
1354    .Case("host_data",ACCD_host_data)
1355    .Case("init",ACCD_init)
1356    .Case("kernels",ACCD_kernels)
1357    .Case("kernels loop",ACCD_kernels_loop)
1358    .Case("loop",ACCD_loop)
1359    .Case("parallel",ACCD_parallel)
1360    .Case("parallel loop",ACCD_parallel_loop)
1361    .Case("routine",ACCD_routine)
1362    .Case("serial",ACCD_serial)
1363    .Case("serial loop",ACCD_serial_loop)
1364    .Case("set",ACCD_set)
1365    .Case("shutdown",ACCD_shutdown)
1366    .Case("unknown",ACCD_unknown)
1367    .Case("update",ACCD_update)
1368    .Case("wait",ACCD_wait)
1369    .Default(ACCD_unknown);
1370}
1371
1372llvm::StringRef llvm::acc::getOpenACCDirectiveName(Directive Kind) {
1373  switch (Kind) {
1374    case ACCD_atomic:
1375      return "atomic";
1376    case ACCD_cache:
1377      return "cache";
1378    case ACCD_data:
1379      return "data";
1380    case ACCD_declare:
1381      return "declare";
1382    case ACCD_enter_data:
1383      return "enter data";
1384    case ACCD_exit_data:
1385      return "exit data";
1386    case ACCD_host_data:
1387      return "host_data";
1388    case ACCD_init:
1389      return "init";
1390    case ACCD_kernels:
1391      return "kernels";
1392    case ACCD_kernels_loop:
1393      return "kernels loop";
1394    case ACCD_loop:
1395      return "loop";
1396    case ACCD_parallel:
1397      return "parallel";
1398    case ACCD_parallel_loop:
1399      return "parallel loop";
1400    case ACCD_routine:
1401      return "routine";
1402    case ACCD_serial:
1403      return "serial";
1404    case ACCD_serial_loop:
1405      return "serial loop";
1406    case ACCD_set:
1407      return "set";
1408    case ACCD_shutdown:
1409      return "shutdown";
1410    case ACCD_unknown:
1411      return "unknown";
1412    case ACCD_update:
1413      return "update";
1414    case ACCD_wait:
1415      return "wait";
1416  }
1417  llvm_unreachable("Invalid OpenACC Directive kind");
1418}
1419
1420Clause llvm::acc::getOpenACCClauseKind(llvm::StringRef Str) {
1421  return llvm::StringSwitch<Clause>(Str)
1422    .Case("async",ACCC_async)
1423    .Case("attach",ACCC_attach)
1424    .Case("auto",ACCC_auto)
1425    .Case("bind",ACCC_bind)
1426    .Case("capture",ACCC_capture)
1427    .Case("collapse",ACCC_collapse)
1428    .Case("copy",ACCC_copy)
1429    .Case("copyin",ACCC_copyin)
1430    .Case("copyout",ACCC_copyout)
1431    .Case("create",ACCC_create)
1432    .Case("default",ACCC_default)
1433    .Case("default_async",ACCC_default_async)
1434    .Case("delete",ACCC_delete)
1435    .Case("detach",ACCC_detach)
1436    .Case("device",ACCC_device)
1437    .Case("device_num",ACCC_device_num)
1438    .Case("deviceptr",ACCC_deviceptr)
1439    .Case("device_resident",ACCC_device_resident)
1440    .Case("device_type",ACCC_device_type)
1441    .Case("finalize",ACCC_finalize)
1442    .Case("firstprivate",ACCC_firstprivate)
1443    .Case("gang",ACCC_gang)
1444    .Case("host",ACCC_host)
1445    .Case("if",ACCC_if)
1446    .Case("if_present",ACCC_if_present)
1447    .Case("independent",ACCC_independent)
1448    .Case("link",ACCC_link)
1449    .Case("no_create",ACCC_no_create)
1450    .Case("nohost",ACCC_nohost)
1451    .Case("num_gangs",ACCC_num_gangs)
1452    .Case("num_workers",ACCC_num_workers)
1453    .Case("present",ACCC_present)
1454    .Case("private",ACCC_private)
1455    .Case("read",ACCC_read)
1456    .Case("reduction",ACCC_reduction)
1457    .Case("self",ACCC_self)
1458    .Case("seq",ACCC_seq)
1459    .Case("tile",ACCC_tile)
1460    .Case("unknown",ACCC_unknown)
1461    .Case("use_device",ACCC_use_device)
1462    .Case("vector",ACCC_vector)
1463    .Case("vector_length",ACCC_vector_length)
1464    .Case("wait",ACCC_wait)
1465    .Case("worker",ACCC_worker)
1466    .Case("write",ACCC_write)
1467    .Default(ACCC_unknown);
1468}
1469
1470llvm::StringRef llvm::acc::getOpenACCClauseName(Clause Kind) {
1471  switch (Kind) {
1472    case ACCC_async:
1473      return "async";
1474    case ACCC_attach:
1475      return "attach";
1476    case ACCC_auto:
1477      return "auto";
1478    case ACCC_bind:
1479      return "bind";
1480    case ACCC_capture:
1481      return "capture";
1482    case ACCC_collapse:
1483      return "collapse";
1484    case ACCC_copy:
1485      return "copy";
1486    case ACCC_copyin:
1487      return "copyin";
1488    case ACCC_copyout:
1489      return "copyout";
1490    case ACCC_create:
1491      return "create";
1492    case ACCC_default:
1493      return "default";
1494    case ACCC_default_async:
1495      return "default_async";
1496    case ACCC_delete:
1497      return "delete";
1498    case ACCC_detach:
1499      return "detach";
1500    case ACCC_device:
1501      return "device";
1502    case ACCC_device_num:
1503      return "device_num";
1504    case ACCC_deviceptr:
1505      return "deviceptr";
1506    case ACCC_device_resident:
1507      return "device_resident";
1508    case ACCC_device_type:
1509      return "device_type";
1510    case ACCC_finalize:
1511      return "finalize";
1512    case ACCC_firstprivate:
1513      return "firstprivate";
1514    case ACCC_gang:
1515      return "gang";
1516    case ACCC_host:
1517      return "host";
1518    case ACCC_if:
1519      return "if";
1520    case ACCC_if_present:
1521      return "if_present";
1522    case ACCC_independent:
1523      return "independent";
1524    case ACCC_link:
1525      return "link";
1526    case ACCC_no_create:
1527      return "no_create";
1528    case ACCC_nohost:
1529      return "nohost";
1530    case ACCC_num_gangs:
1531      return "num_gangs";
1532    case ACCC_num_workers:
1533      return "num_workers";
1534    case ACCC_present:
1535      return "present";
1536    case ACCC_private:
1537      return "private";
1538    case ACCC_read:
1539      return "read";
1540    case ACCC_reduction:
1541      return "reduction";
1542    case ACCC_self:
1543      return "self";
1544    case ACCC_seq:
1545      return "seq";
1546    case ACCC_tile:
1547      return "tile";
1548    case ACCC_unknown:
1549      return "unknown";
1550    case ACCC_use_device:
1551      return "use_device";
1552    case ACCC_vector:
1553      return "vector";
1554    case ACCC_vector_length:
1555      return "vector_length";
1556    case ACCC_wait:
1557      return "wait";
1558    case ACCC_worker:
1559      return "worker";
1560    case ACCC_write:
1561      return "write";
1562  }
1563  llvm_unreachable("Invalid OpenACC Clause kind");
1564}
1565
1566DefaultValue llvm::acc::getDefaultValue(llvm::StringRef Str) {
1567  return llvm::StringSwitch<DefaultValue>(Str)
1568    .Case("present",ACC_Default_present)
1569    .Case("none",ACC_Default_none)
1570    .Default(ACC_Default_none);
1571}
1572
1573llvm::StringRef llvm::acc::getOpenACCDefaultValueName(llvm::acc::DefaultValue x) {
1574  switch (x) {
1575    case ACC_Default_present:
1576      return "present";
1577    case ACC_Default_none:
1578      return "none";
1579  }
1580  llvm_unreachable("Invalid OpenACC DefaultValue kind");
1581}
1582
1583bool llvm::acc::isAllowedClauseForDirective(Directive D, Clause C, unsigned Version) {
1584  assert(unsigned(D) <= llvm::acc::Directive_enumSize);
1585  assert(unsigned(C) <= llvm::acc::Clause_enumSize);
1586  switch (D) {
1587    case ACCD_atomic:
1588      return false;
1589      break;
1590    case ACCD_cache:
1591      return false;
1592      break;
1593    case ACCD_data:
1594      switch (C) {
1595        case ACCC_device_type:
1596          return 32 <= Version && 2147483647 >= Version;
1597        case ACCC_wait:
1598          return 32 <= Version && 2147483647 >= Version;
1599        case ACCC_async:
1600          return 32 <= Version && 2147483647 >= Version;
1601        case ACCC_if:
1602          return 1 <= Version && 2147483647 >= Version;
1603        case ACCC_default:
1604          return 1 <= Version && 2147483647 >= Version;
1605        case ACCC_attach:
1606          return 1 <= Version && 2147483647 >= Version;
1607        case ACCC_copy:
1608          return 1 <= Version && 2147483647 >= Version;
1609        case ACCC_copyin:
1610          return 1 <= Version && 2147483647 >= Version;
1611        case ACCC_copyout:
1612          return 1 <= Version && 2147483647 >= Version;
1613        case ACCC_create:
1614          return 1 <= Version && 2147483647 >= Version;
1615        case ACCC_deviceptr:
1616          return 1 <= Version && 2147483647 >= Version;
1617        case ACCC_no_create:
1618          return 1 <= Version && 2147483647 >= Version;
1619        case ACCC_present:
1620          return 1 <= Version && 2147483647 >= Version;
1621        default:
1622          return false;
1623      }
1624      break;
1625    case ACCD_declare:
1626      switch (C) {
1627        case ACCC_copy:
1628          return 1 <= Version && 2147483647 >= Version;
1629        case ACCC_copyin:
1630          return 1 <= Version && 2147483647 >= Version;
1631        case ACCC_copyout:
1632          return 1 <= Version && 2147483647 >= Version;
1633        case ACCC_create:
1634          return 1 <= Version && 2147483647 >= Version;
1635        case ACCC_present:
1636          return 1 <= Version && 2147483647 >= Version;
1637        case ACCC_deviceptr:
1638          return 1 <= Version && 2147483647 >= Version;
1639        case ACCC_device_resident:
1640          return 1 <= Version && 2147483647 >= Version;
1641        case ACCC_link:
1642          return 1 <= Version && 2147483647 >= Version;
1643        default:
1644          return false;
1645      }
1646      break;
1647    case ACCD_enter_data:
1648      switch (C) {
1649        case ACCC_wait:
1650          return 1 <= Version && 2147483647 >= Version;
1651        case ACCC_async:
1652          return 1 <= Version && 2147483647 >= Version;
1653        case ACCC_if:
1654          return 1 <= Version && 2147483647 >= Version;
1655        case ACCC_attach:
1656          return 1 <= Version && 2147483647 >= Version;
1657        case ACCC_create:
1658          return 1 <= Version && 2147483647 >= Version;
1659        case ACCC_copyin:
1660          return 1 <= Version && 2147483647 >= Version;
1661        default:
1662          return false;
1663      }
1664      break;
1665    case ACCD_exit_data:
1666      switch (C) {
1667        case ACCC_wait:
1668          return 1 <= Version && 2147483647 >= Version;
1669        case ACCC_async:
1670          return 1 <= Version && 2147483647 >= Version;
1671        case ACCC_if:
1672          return 1 <= Version && 2147483647 >= Version;
1673        case ACCC_finalize:
1674          return 1 <= Version && 2147483647 >= Version;
1675        case ACCC_copyout:
1676          return 1 <= Version && 2147483647 >= Version;
1677        case ACCC_delete:
1678          return 1 <= Version && 2147483647 >= Version;
1679        case ACCC_detach:
1680          return 1 <= Version && 2147483647 >= Version;
1681        default:
1682          return false;
1683      }
1684      break;
1685    case ACCD_host_data:
1686      switch (C) {
1687        case ACCC_if:
1688          return 1 <= Version && 2147483647 >= Version;
1689        case ACCC_if_present:
1690          return 1 <= Version && 2147483647 >= Version;
1691        case ACCC_use_device:
1692          return 1 <= Version && 2147483647 >= Version;
1693        default:
1694          return false;
1695      }
1696      break;
1697    case ACCD_init:
1698      switch (C) {
1699        case ACCC_device_num:
1700          return 1 <= Version && 2147483647 >= Version;
1701        case ACCC_device_type:
1702          return 1 <= Version && 2147483647 >= Version;
1703        case ACCC_if:
1704          return 1 <= Version && 2147483647 >= Version;
1705        default:
1706          return false;
1707      }
1708      break;
1709    case ACCD_kernels:
1710      switch (C) {
1711        case ACCC_attach:
1712          return 1 <= Version && 2147483647 >= Version;
1713        case ACCC_copy:
1714          return 1 <= Version && 2147483647 >= Version;
1715        case ACCC_copyin:
1716          return 1 <= Version && 2147483647 >= Version;
1717        case ACCC_copyout:
1718          return 1 <= Version && 2147483647 >= Version;
1719        case ACCC_create:
1720          return 1 <= Version && 2147483647 >= Version;
1721        case ACCC_device_type:
1722          return 1 <= Version && 2147483647 >= Version;
1723        case ACCC_no_create:
1724          return 1 <= Version && 2147483647 >= Version;
1725        case ACCC_present:
1726          return 1 <= Version && 2147483647 >= Version;
1727        case ACCC_deviceptr:
1728          return 1 <= Version && 2147483647 >= Version;
1729        case ACCC_wait:
1730          return 1 <= Version && 2147483647 >= Version;
1731        case ACCC_async:
1732          return 1 <= Version && 2147483647 >= Version;
1733        case ACCC_default:
1734          return 1 <= Version && 2147483647 >= Version;
1735        case ACCC_if:
1736          return 1 <= Version && 2147483647 >= Version;
1737        case ACCC_num_gangs:
1738          return 1 <= Version && 2147483647 >= Version;
1739        case ACCC_num_workers:
1740          return 1 <= Version && 2147483647 >= Version;
1741        case ACCC_self:
1742          return 1 <= Version && 2147483647 >= Version;
1743        case ACCC_vector_length:
1744          return 1 <= Version && 2147483647 >= Version;
1745        default:
1746          return false;
1747      }
1748      break;
1749    case ACCD_kernels_loop:
1750      switch (C) {
1751        case ACCC_copy:
1752          return 1 <= Version && 2147483647 >= Version;
1753        case ACCC_copyin:
1754          return 1 <= Version && 2147483647 >= Version;
1755        case ACCC_copyout:
1756          return 1 <= Version && 2147483647 >= Version;
1757        case ACCC_create:
1758          return 1 <= Version && 2147483647 >= Version;
1759        case ACCC_device_type:
1760          return 1 <= Version && 2147483647 >= Version;
1761        case ACCC_no_create:
1762          return 1 <= Version && 2147483647 >= Version;
1763        case ACCC_present:
1764          return 1 <= Version && 2147483647 >= Version;
1765        case ACCC_private:
1766          return 1 <= Version && 2147483647 >= Version;
1767        case ACCC_reduction:
1768          return 1 <= Version && 2147483647 >= Version;
1769        case ACCC_deviceptr:
1770          return 1 <= Version && 2147483647 >= Version;
1771        case ACCC_attach:
1772          return 1 <= Version && 2147483647 >= Version;
1773        case ACCC_wait:
1774          return 1 <= Version && 2147483647 >= Version;
1775        case ACCC_async:
1776          return 1 <= Version && 2147483647 >= Version;
1777        case ACCC_collapse:
1778          return 1 <= Version && 2147483647 >= Version;
1779        case ACCC_default:
1780          return 1 <= Version && 2147483647 >= Version;
1781        case ACCC_gang:
1782          return 1 <= Version && 2147483647 >= Version;
1783        case ACCC_if:
1784          return 1 <= Version && 2147483647 >= Version;
1785        case ACCC_num_gangs:
1786          return 1 <= Version && 2147483647 >= Version;
1787        case ACCC_num_workers:
1788          return 1 <= Version && 2147483647 >= Version;
1789        case ACCC_self:
1790          return 1 <= Version && 2147483647 >= Version;
1791        case ACCC_tile:
1792          return 1 <= Version && 2147483647 >= Version;
1793        case ACCC_vector:
1794          return 1 <= Version && 2147483647 >= Version;
1795        case ACCC_vector_length:
1796          return 1 <= Version && 2147483647 >= Version;
1797        case ACCC_worker:
1798          return 1 <= Version && 2147483647 >= Version;
1799        case ACCC_auto:
1800          return 1 <= Version && 2147483647 >= Version;
1801        case ACCC_independent:
1802          return 1 <= Version && 2147483647 >= Version;
1803        case ACCC_seq:
1804          return 1 <= Version && 2147483647 >= Version;
1805        default:
1806          return false;
1807      }
1808      break;
1809    case ACCD_loop:
1810      switch (C) {
1811        case ACCC_device_type:
1812          return 1 <= Version && 2147483647 >= Version;
1813        case ACCC_private:
1814          return 1 <= Version && 2147483647 >= Version;
1815        case ACCC_reduction:
1816          return 1 <= Version && 2147483647 >= Version;
1817        case ACCC_collapse:
1818          return 1 <= Version && 2147483647 >= Version;
1819        case ACCC_gang:
1820          return 1 <= Version && 2147483647 >= Version;
1821        case ACCC_tile:
1822          return 1 <= Version && 2147483647 >= Version;
1823        case ACCC_vector:
1824          return 1 <= Version && 2147483647 >= Version;
1825        case ACCC_worker:
1826          return 1 <= Version && 2147483647 >= Version;
1827        case ACCC_auto:
1828          return 1 <= Version && 2147483647 >= Version;
1829        case ACCC_independent:
1830          return 1 <= Version && 2147483647 >= Version;
1831        case ACCC_seq:
1832          return 1 <= Version && 2147483647 >= Version;
1833        default:
1834          return false;
1835      }
1836      break;
1837    case ACCD_parallel:
1838      switch (C) {
1839        case ACCC_attach:
1840          return 1 <= Version && 2147483647 >= Version;
1841        case ACCC_async:
1842          return 1 <= Version && 2147483647 >= Version;
1843        case ACCC_copy:
1844          return 1 <= Version && 2147483647 >= Version;
1845        case ACCC_copyin:
1846          return 1 <= Version && 2147483647 >= Version;
1847        case ACCC_copyout:
1848          return 1 <= Version && 2147483647 >= Version;
1849        case ACCC_create:
1850          return 1 <= Version && 2147483647 >= Version;
1851        case ACCC_deviceptr:
1852          return 1 <= Version && 2147483647 >= Version;
1853        case ACCC_device_type:
1854          return 1 <= Version && 2147483647 >= Version;
1855        case ACCC_no_create:
1856          return 1 <= Version && 2147483647 >= Version;
1857        case ACCC_num_gangs:
1858          return 1 <= Version && 2147483647 >= Version;
1859        case ACCC_num_workers:
1860          return 1 <= Version && 2147483647 >= Version;
1861        case ACCC_present:
1862          return 1 <= Version && 2147483647 >= Version;
1863        case ACCC_private:
1864          return 1 <= Version && 2147483647 >= Version;
1865        case ACCC_firstprivate:
1866          return 1 <= Version && 2147483647 >= Version;
1867        case ACCC_reduction:
1868          return 1 <= Version && 2147483647 >= Version;
1869        case ACCC_wait:
1870          return 1 <= Version && 2147483647 >= Version;
1871        case ACCC_vector_length:
1872          return 1 <= Version && 2147483647 >= Version;
1873        case ACCC_default:
1874          return 1 <= Version && 2147483647 >= Version;
1875        case ACCC_if:
1876          return 1 <= Version && 2147483647 >= Version;
1877        case ACCC_self:
1878          return 1 <= Version && 2147483647 >= Version;
1879        default:
1880          return false;
1881      }
1882      break;
1883    case ACCD_parallel_loop:
1884      switch (C) {
1885        case ACCC_attach:
1886          return 1 <= Version && 2147483647 >= Version;
1887        case ACCC_copy:
1888          return 1 <= Version && 2147483647 >= Version;
1889        case ACCC_copyin:
1890          return 1 <= Version && 2147483647 >= Version;
1891        case ACCC_copyout:
1892          return 1 <= Version && 2147483647 >= Version;
1893        case ACCC_create:
1894          return 1 <= Version && 2147483647 >= Version;
1895        case ACCC_deviceptr:
1896          return 1 <= Version && 2147483647 >= Version;
1897        case ACCC_device_type:
1898          return 1 <= Version && 2147483647 >= Version;
1899        case ACCC_firstprivate:
1900          return 1 <= Version && 2147483647 >= Version;
1901        case ACCC_no_create:
1902          return 1 <= Version && 2147483647 >= Version;
1903        case ACCC_present:
1904          return 1 <= Version && 2147483647 >= Version;
1905        case ACCC_private:
1906          return 1 <= Version && 2147483647 >= Version;
1907        case ACCC_reduction:
1908          return 1 <= Version && 2147483647 >= Version;
1909        case ACCC_tile:
1910          return 1 <= Version && 2147483647 >= Version;
1911        case ACCC_wait:
1912          return 1 <= Version && 2147483647 >= Version;
1913        case ACCC_async:
1914          return 1 <= Version && 2147483647 >= Version;
1915        case ACCC_collapse:
1916          return 1 <= Version && 2147483647 >= Version;
1917        case ACCC_default:
1918          return 1 <= Version && 2147483647 >= Version;
1919        case ACCC_gang:
1920          return 1 <= Version && 2147483647 >= Version;
1921        case ACCC_if:
1922          return 1 <= Version && 2147483647 >= Version;
1923        case ACCC_num_gangs:
1924          return 1 <= Version && 2147483647 >= Version;
1925        case ACCC_num_workers:
1926          return 1 <= Version && 2147483647 >= Version;
1927        case ACCC_self:
1928          return 1 <= Version && 2147483647 >= Version;
1929        case ACCC_vector:
1930          return 1 <= Version && 2147483647 >= Version;
1931        case ACCC_vector_length:
1932          return 1 <= Version && 2147483647 >= Version;
1933        case ACCC_worker:
1934          return 1 <= Version && 2147483647 >= Version;
1935        case ACCC_auto:
1936          return 1 <= Version && 2147483647 >= Version;
1937        case ACCC_independent:
1938          return 1 <= Version && 2147483647 >= Version;
1939        case ACCC_seq:
1940          return 1 <= Version && 2147483647 >= Version;
1941        default:
1942          return false;
1943      }
1944      break;
1945    case ACCD_routine:
1946      switch (C) {
1947        case ACCC_bind:
1948          return 1 <= Version && 2147483647 >= Version;
1949        case ACCC_device_type:
1950          return 1 <= Version && 2147483647 >= Version;
1951        case ACCC_nohost:
1952          return 1 <= Version && 2147483647 >= Version;
1953        case ACCC_gang:
1954          return 1 <= Version && 2147483647 >= Version;
1955        case ACCC_seq:
1956          return 1 <= Version && 2147483647 >= Version;
1957        case ACCC_vector:
1958          return 1 <= Version && 2147483647 >= Version;
1959        case ACCC_worker:
1960          return 1 <= Version && 2147483647 >= Version;
1961        default:
1962          return false;
1963      }
1964      break;
1965    case ACCD_serial:
1966      switch (C) {
1967        case ACCC_attach:
1968          return 1 <= Version && 2147483647 >= Version;
1969        case ACCC_copy:
1970          return 1 <= Version && 2147483647 >= Version;
1971        case ACCC_copyin:
1972          return 1 <= Version && 2147483647 >= Version;
1973        case ACCC_copyout:
1974          return 1 <= Version && 2147483647 >= Version;
1975        case ACCC_create:
1976          return 1 <= Version && 2147483647 >= Version;
1977        case ACCC_deviceptr:
1978          return 1 <= Version && 2147483647 >= Version;
1979        case ACCC_device_type:
1980          return 1 <= Version && 2147483647 >= Version;
1981        case ACCC_no_create:
1982          return 1 <= Version && 2147483647 >= Version;
1983        case ACCC_present:
1984          return 1 <= Version && 2147483647 >= Version;
1985        case ACCC_private:
1986          return 1 <= Version && 2147483647 >= Version;
1987        case ACCC_firstprivate:
1988          return 1 <= Version && 2147483647 >= Version;
1989        case ACCC_reduction:
1990          return 1 <= Version && 2147483647 >= Version;
1991        case ACCC_wait:
1992          return 1 <= Version && 2147483647 >= Version;
1993        case ACCC_async:
1994          return 1 <= Version && 2147483647 >= Version;
1995        case ACCC_default:
1996          return 1 <= Version && 2147483647 >= Version;
1997        case ACCC_if:
1998          return 1 <= Version && 2147483647 >= Version;
1999        case ACCC_self:
2000          return 1 <= Version && 2147483647 >= Version;
2001        default:
2002          return false;
2003      }
2004      break;
2005    case ACCD_serial_loop:
2006      switch (C) {
2007        case ACCC_attach:
2008          return 1 <= Version && 2147483647 >= Version;
2009        case ACCC_copy:
2010          return 1 <= Version && 2147483647 >= Version;
2011        case ACCC_copyin:
2012          return 1 <= Version && 2147483647 >= Version;
2013        case ACCC_copyout:
2014          return 1 <= Version && 2147483647 >= Version;
2015        case ACCC_create:
2016          return 1 <= Version && 2147483647 >= Version;
2017        case ACCC_deviceptr:
2018          return 1 <= Version && 2147483647 >= Version;
2019        case ACCC_device_type:
2020          return 1 <= Version && 2147483647 >= Version;
2021        case ACCC_firstprivate:
2022          return 1 <= Version && 2147483647 >= Version;
2023        case ACCC_no_create:
2024          return 1 <= Version && 2147483647 >= Version;
2025        case ACCC_present:
2026          return 1 <= Version && 2147483647 >= Version;
2027        case ACCC_private:
2028          return 1 <= Version && 2147483647 >= Version;
2029        case ACCC_reduction:
2030          return 1 <= Version && 2147483647 >= Version;
2031        case ACCC_wait:
2032          return 1 <= Version && 2147483647 >= Version;
2033        case ACCC_async:
2034          return 1 <= Version && 2147483647 >= Version;
2035        case ACCC_collapse:
2036          return 1 <= Version && 2147483647 >= Version;
2037        case ACCC_default:
2038          return 1 <= Version && 2147483647 >= Version;
2039        case ACCC_gang:
2040          return 1 <= Version && 2147483647 >= Version;
2041        case ACCC_if:
2042          return 1 <= Version && 2147483647 >= Version;
2043        case ACCC_self:
2044          return 1 <= Version && 2147483647 >= Version;
2045        case ACCC_tile:
2046          return 1 <= Version && 2147483647 >= Version;
2047        case ACCC_vector:
2048          return 1 <= Version && 2147483647 >= Version;
2049        case ACCC_worker:
2050          return 1 <= Version && 2147483647 >= Version;
2051        case ACCC_auto:
2052          return 1 <= Version && 2147483647 >= Version;
2053        case ACCC_independent:
2054          return 1 <= Version && 2147483647 >= Version;
2055        case ACCC_seq:
2056          return 1 <= Version && 2147483647 >= Version;
2057        default:
2058          return false;
2059      }
2060      break;
2061    case ACCD_set:
2062      switch (C) {
2063        case ACCC_default_async:
2064          return 1 <= Version && 2147483647 >= Version;
2065        case ACCC_device_num:
2066          return 1 <= Version && 2147483647 >= Version;
2067        case ACCC_device_type:
2068          return 1 <= Version && 2147483647 >= Version;
2069        case ACCC_if:
2070          return 1 <= Version && 2147483647 >= Version;
2071        default:
2072          return false;
2073      }
2074      break;
2075    case ACCD_shutdown:
2076      switch (C) {
2077        case ACCC_device_num:
2078          return 1 <= Version && 2147483647 >= Version;
2079        case ACCC_device_type:
2080          return 1 <= Version && 2147483647 >= Version;
2081        case ACCC_if:
2082          return 1 <= Version && 2147483647 >= Version;
2083        default:
2084          return false;
2085      }
2086      break;
2087    case ACCD_unknown:
2088      return false;
2089      break;
2090    case ACCD_update:
2091      switch (C) {
2092        case ACCC_device_type:
2093          return 1 <= Version && 2147483647 >= Version;
2094        case ACCC_wait:
2095          return 1 <= Version && 2147483647 >= Version;
2096        case ACCC_async:
2097          return 1 <= Version && 2147483647 >= Version;
2098        case ACCC_if:
2099          return 1 <= Version && 2147483647 >= Version;
2100        case ACCC_if_present:
2101          return 1 <= Version && 2147483647 >= Version;
2102        case ACCC_device:
2103          return 1 <= Version && 2147483647 >= Version;
2104        case ACCC_host:
2105          return 1 <= Version && 2147483647 >= Version;
2106        case ACCC_self:
2107          return 1 <= Version && 2147483647 >= Version;
2108        default:
2109          return false;
2110      }
2111      break;
2112    case ACCD_wait:
2113      switch (C) {
2114        case ACCC_async:
2115          return 1 <= Version && 2147483647 >= Version;
2116        case ACCC_if:
2117          return 1 <= Version && 2147483647 >= Version;
2118        default:
2119          return false;
2120      }
2121      break;
2122  }
2123  llvm_unreachable("Invalid OpenACC Directive kind");
2124}
2125
2126#endif // GEN_DIRECTIVES_IMPL
2127
2128