• 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_attach,
195    llvm::acc::Clause::ACCC_collapse,
196    llvm::acc::Clause::ACCC_copy,
197    llvm::acc::Clause::ACCC_copyin,
198    llvm::acc::Clause::ACCC_copyout,
199    llvm::acc::Clause::ACCC_create,
200    llvm::acc::Clause::ACCC_deviceptr,
201    llvm::acc::Clause::ACCC_device_type,
202    llvm::acc::Clause::ACCC_gang,
203    llvm::acc::Clause::ACCC_no_create,
204    llvm::acc::Clause::ACCC_num_gangs,
205    llvm::acc::Clause::ACCC_num_workers,
206    llvm::acc::Clause::ACCC_present,
207    llvm::acc::Clause::ACCC_private,
208    llvm::acc::Clause::ACCC_reduction,
209    llvm::acc::Clause::ACCC_tile,
210    llvm::acc::Clause::ACCC_vector,
211    llvm::acc::Clause::ACCC_vector_length,
212    llvm::acc::Clause::ACCC_wait,
213    llvm::acc::Clause::ACCC_worker,
214  };
215
216  static AccClauseSet allowedOnceClauses_ACCD_kernels_loop {
217    llvm::acc::Clause::ACCC_async,
218    llvm::acc::Clause::ACCC_default,
219    llvm::acc::Clause::ACCC_if,
220    llvm::acc::Clause::ACCC_self,
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    llvm::acc::Clause::ACCC_collapse,
239    llvm::acc::Clause::ACCC_gang,
240    llvm::acc::Clause::ACCC_tile,
241    llvm::acc::Clause::ACCC_vector,
242    llvm::acc::Clause::ACCC_worker,
243  };
244
245  static AccClauseSet allowedOnceClauses_ACCD_loop {
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_collapse,
296    llvm::acc::Clause::ACCC_copy,
297    llvm::acc::Clause::ACCC_copyin,
298    llvm::acc::Clause::ACCC_copyout,
299    llvm::acc::Clause::ACCC_create,
300    llvm::acc::Clause::ACCC_deviceptr,
301    llvm::acc::Clause::ACCC_device_type,
302    llvm::acc::Clause::ACCC_firstprivate,
303    llvm::acc::Clause::ACCC_gang,
304    llvm::acc::Clause::ACCC_no_create,
305    llvm::acc::Clause::ACCC_num_gangs,
306    llvm::acc::Clause::ACCC_num_workers,
307    llvm::acc::Clause::ACCC_present,
308    llvm::acc::Clause::ACCC_private,
309    llvm::acc::Clause::ACCC_reduction,
310    llvm::acc::Clause::ACCC_tile,
311    llvm::acc::Clause::ACCC_vector,
312    llvm::acc::Clause::ACCC_vector_length,
313    llvm::acc::Clause::ACCC_wait,
314    llvm::acc::Clause::ACCC_worker,
315  };
316
317  static AccClauseSet allowedOnceClauses_ACCD_parallel_loop {
318    llvm::acc::Clause::ACCC_async,
319    llvm::acc::Clause::ACCC_default,
320    llvm::acc::Clause::ACCC_if,
321    llvm::acc::Clause::ACCC_self,
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    llvm::acc::Clause::ACCC_bind,
337    llvm::acc::Clause::ACCC_device_type,
338    llvm::acc::Clause::ACCC_gang,
339    llvm::acc::Clause::ACCC_seq,
340    llvm::acc::Clause::ACCC_vector,
341    llvm::acc::Clause::ACCC_worker,
342  };
343
344  static AccClauseSet allowedOnceClauses_ACCD_routine {
345    llvm::acc::Clause::ACCC_nohost,
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_collapse,
390    llvm::acc::Clause::ACCC_copy,
391    llvm::acc::Clause::ACCC_copyin,
392    llvm::acc::Clause::ACCC_copyout,
393    llvm::acc::Clause::ACCC_create,
394    llvm::acc::Clause::ACCC_deviceptr,
395    llvm::acc::Clause::ACCC_device_type,
396    llvm::acc::Clause::ACCC_firstprivate,
397    llvm::acc::Clause::ACCC_gang,
398    llvm::acc::Clause::ACCC_no_create,
399    llvm::acc::Clause::ACCC_present,
400    llvm::acc::Clause::ACCC_private,
401    llvm::acc::Clause::ACCC_reduction,
402    llvm::acc::Clause::ACCC_tile,
403    llvm::acc::Clause::ACCC_vector,
404    llvm::acc::Clause::ACCC_wait,
405    llvm::acc::Clause::ACCC_worker,
406  };
407
408  static AccClauseSet allowedOnceClauses_ACCD_serial_loop {
409    llvm::acc::Clause::ACCC_async,
410    llvm::acc::Clause::ACCC_default,
411    llvm::acc::Clause::ACCC_if,
412    llvm::acc::Clause::ACCC_self,
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_NO_CLASS
1337#undef __CLAUSE
1338#undef CLAUSE_NO_CLASS
1339#undef CLAUSE_CLASS
1340#undef CLAUSE
1341
1342#endif // GEN_CLANG_CLAUSE_CLASS
1343
1344#ifdef GEN_DIRECTIVES_IMPL
1345#undef GEN_DIRECTIVES_IMPL
1346
1347#include "llvm/Support/ErrorHandling.h"
1348
1349Directive llvm::acc::getOpenACCDirectiveKind(llvm::StringRef Str) {
1350  return llvm::StringSwitch<Directive>(Str)
1351    .Case("atomic",ACCD_atomic)
1352    .Case("cache",ACCD_cache)
1353    .Case("data",ACCD_data)
1354    .Case("declare",ACCD_declare)
1355    .Case("enter data",ACCD_enter_data)
1356    .Case("exit data",ACCD_exit_data)
1357    .Case("host_data",ACCD_host_data)
1358    .Case("init",ACCD_init)
1359    .Case("kernels",ACCD_kernels)
1360    .Case("kernels loop",ACCD_kernels_loop)
1361    .Case("loop",ACCD_loop)
1362    .Case("parallel",ACCD_parallel)
1363    .Case("parallel loop",ACCD_parallel_loop)
1364    .Case("routine",ACCD_routine)
1365    .Case("serial",ACCD_serial)
1366    .Case("serial loop",ACCD_serial_loop)
1367    .Case("set",ACCD_set)
1368    .Case("shutdown",ACCD_shutdown)
1369    .Case("unknown",ACCD_unknown)
1370    .Case("update",ACCD_update)
1371    .Case("wait",ACCD_wait)
1372    .Default(ACCD_unknown);
1373}
1374
1375llvm::StringRef llvm::acc::getOpenACCDirectiveName(Directive Kind) {
1376  switch (Kind) {
1377    case ACCD_atomic:
1378      return "atomic";
1379    case ACCD_cache:
1380      return "cache";
1381    case ACCD_data:
1382      return "data";
1383    case ACCD_declare:
1384      return "declare";
1385    case ACCD_enter_data:
1386      return "enter data";
1387    case ACCD_exit_data:
1388      return "exit data";
1389    case ACCD_host_data:
1390      return "host_data";
1391    case ACCD_init:
1392      return "init";
1393    case ACCD_kernels:
1394      return "kernels";
1395    case ACCD_kernels_loop:
1396      return "kernels loop";
1397    case ACCD_loop:
1398      return "loop";
1399    case ACCD_parallel:
1400      return "parallel";
1401    case ACCD_parallel_loop:
1402      return "parallel loop";
1403    case ACCD_routine:
1404      return "routine";
1405    case ACCD_serial:
1406      return "serial";
1407    case ACCD_serial_loop:
1408      return "serial loop";
1409    case ACCD_set:
1410      return "set";
1411    case ACCD_shutdown:
1412      return "shutdown";
1413    case ACCD_unknown:
1414      return "unknown";
1415    case ACCD_update:
1416      return "update";
1417    case ACCD_wait:
1418      return "wait";
1419  }
1420  llvm_unreachable("Invalid OpenACC Directive kind");
1421}
1422
1423Clause llvm::acc::getOpenACCClauseKind(llvm::StringRef Str) {
1424  return llvm::StringSwitch<Clause>(Str)
1425    .Case("async",ACCC_async)
1426    .Case("attach",ACCC_attach)
1427    .Case("auto",ACCC_auto)
1428    .Case("bind",ACCC_bind)
1429    .Case("capture",ACCC_capture)
1430    .Case("collapse",ACCC_collapse)
1431    .Case("copy",ACCC_copy)
1432    .Case("copyin",ACCC_copyin)
1433    .Case("copyout",ACCC_copyout)
1434    .Case("create",ACCC_create)
1435    .Case("default",ACCC_default)
1436    .Case("default_async",ACCC_default_async)
1437    .Case("delete",ACCC_delete)
1438    .Case("detach",ACCC_detach)
1439    .Case("device",ACCC_device)
1440    .Case("device_num",ACCC_device_num)
1441    .Case("deviceptr",ACCC_deviceptr)
1442    .Case("device_resident",ACCC_device_resident)
1443    .Case("device_type",ACCC_device_type)
1444    .Case("finalize",ACCC_finalize)
1445    .Case("firstprivate",ACCC_firstprivate)
1446    .Case("gang",ACCC_gang)
1447    .Case("host",ACCC_host)
1448    .Case("if",ACCC_if)
1449    .Case("if_present",ACCC_if_present)
1450    .Case("independent",ACCC_independent)
1451    .Case("link",ACCC_link)
1452    .Case("no_create",ACCC_no_create)
1453    .Case("nohost",ACCC_nohost)
1454    .Case("num_gangs",ACCC_num_gangs)
1455    .Case("num_workers",ACCC_num_workers)
1456    .Case("present",ACCC_present)
1457    .Case("private",ACCC_private)
1458    .Case("read",ACCC_read)
1459    .Case("reduction",ACCC_reduction)
1460    .Case("self",ACCC_self)
1461    .Case("seq",ACCC_seq)
1462    .Case("tile",ACCC_tile)
1463    .Case("unknown",ACCC_unknown)
1464    .Case("use_device",ACCC_use_device)
1465    .Case("vector",ACCC_vector)
1466    .Case("vector_length",ACCC_vector_length)
1467    .Case("wait",ACCC_wait)
1468    .Case("worker",ACCC_worker)
1469    .Case("write",ACCC_write)
1470    .Default(ACCC_unknown);
1471}
1472
1473llvm::StringRef llvm::acc::getOpenACCClauseName(Clause Kind) {
1474  switch (Kind) {
1475    case ACCC_async:
1476      return "async";
1477    case ACCC_attach:
1478      return "attach";
1479    case ACCC_auto:
1480      return "auto";
1481    case ACCC_bind:
1482      return "bind";
1483    case ACCC_capture:
1484      return "capture";
1485    case ACCC_collapse:
1486      return "collapse";
1487    case ACCC_copy:
1488      return "copy";
1489    case ACCC_copyin:
1490      return "copyin";
1491    case ACCC_copyout:
1492      return "copyout";
1493    case ACCC_create:
1494      return "create";
1495    case ACCC_default:
1496      return "default";
1497    case ACCC_default_async:
1498      return "default_async";
1499    case ACCC_delete:
1500      return "delete";
1501    case ACCC_detach:
1502      return "detach";
1503    case ACCC_device:
1504      return "device";
1505    case ACCC_device_num:
1506      return "device_num";
1507    case ACCC_deviceptr:
1508      return "deviceptr";
1509    case ACCC_device_resident:
1510      return "device_resident";
1511    case ACCC_device_type:
1512      return "device_type";
1513    case ACCC_finalize:
1514      return "finalize";
1515    case ACCC_firstprivate:
1516      return "firstprivate";
1517    case ACCC_gang:
1518      return "gang";
1519    case ACCC_host:
1520      return "host";
1521    case ACCC_if:
1522      return "if";
1523    case ACCC_if_present:
1524      return "if_present";
1525    case ACCC_independent:
1526      return "independent";
1527    case ACCC_link:
1528      return "link";
1529    case ACCC_no_create:
1530      return "no_create";
1531    case ACCC_nohost:
1532      return "nohost";
1533    case ACCC_num_gangs:
1534      return "num_gangs";
1535    case ACCC_num_workers:
1536      return "num_workers";
1537    case ACCC_present:
1538      return "present";
1539    case ACCC_private:
1540      return "private";
1541    case ACCC_read:
1542      return "read";
1543    case ACCC_reduction:
1544      return "reduction";
1545    case ACCC_self:
1546      return "self";
1547    case ACCC_seq:
1548      return "seq";
1549    case ACCC_tile:
1550      return "tile";
1551    case ACCC_unknown:
1552      return "unknown";
1553    case ACCC_use_device:
1554      return "use_device";
1555    case ACCC_vector:
1556      return "vector";
1557    case ACCC_vector_length:
1558      return "vector_length";
1559    case ACCC_wait:
1560      return "wait";
1561    case ACCC_worker:
1562      return "worker";
1563    case ACCC_write:
1564      return "write";
1565  }
1566  llvm_unreachable("Invalid OpenACC Clause kind");
1567}
1568
1569DefaultValue llvm::acc::getDefaultValue(llvm::StringRef Str) {
1570  return llvm::StringSwitch<DefaultValue>(Str)
1571    .Case("present",ACC_Default_present)
1572    .Case("none",ACC_Default_none)
1573    .Default(ACC_Default_none);
1574}
1575
1576llvm::StringRef llvm::acc::getOpenACCDefaultValueName(llvm::acc::DefaultValue x) {
1577  switch (x) {
1578    case ACC_Default_present:
1579      return "present";
1580    case ACC_Default_none:
1581      return "none";
1582  }
1583  llvm_unreachable("Invalid OpenACC DefaultValue kind");
1584}
1585
1586bool llvm::acc::isAllowedClauseForDirective(Directive D, Clause C, unsigned Version) {
1587  assert(unsigned(D) <= llvm::acc::Directive_enumSize);
1588  assert(unsigned(C) <= llvm::acc::Clause_enumSize);
1589  switch (D) {
1590    case ACCD_atomic:
1591      return false;
1592      break;
1593    case ACCD_cache:
1594      return false;
1595      break;
1596    case ACCD_data:
1597      switch (C) {
1598        case ACCC_device_type:
1599          return 32 <= Version && 2147483647 >= Version;
1600        case ACCC_wait:
1601          return 32 <= Version && 2147483647 >= Version;
1602        case ACCC_async:
1603          return 32 <= Version && 2147483647 >= Version;
1604        case ACCC_if:
1605          return 1 <= Version && 2147483647 >= Version;
1606        case ACCC_default:
1607          return 1 <= Version && 2147483647 >= Version;
1608        case ACCC_attach:
1609          return 1 <= Version && 2147483647 >= Version;
1610        case ACCC_copy:
1611          return 1 <= Version && 2147483647 >= Version;
1612        case ACCC_copyin:
1613          return 1 <= Version && 2147483647 >= Version;
1614        case ACCC_copyout:
1615          return 1 <= Version && 2147483647 >= Version;
1616        case ACCC_create:
1617          return 1 <= Version && 2147483647 >= Version;
1618        case ACCC_deviceptr:
1619          return 1 <= Version && 2147483647 >= Version;
1620        case ACCC_no_create:
1621          return 1 <= Version && 2147483647 >= Version;
1622        case ACCC_present:
1623          return 1 <= Version && 2147483647 >= Version;
1624        default:
1625          return false;
1626      }
1627      break;
1628    case ACCD_declare:
1629      switch (C) {
1630        case ACCC_copy:
1631          return 1 <= Version && 2147483647 >= Version;
1632        case ACCC_copyin:
1633          return 1 <= Version && 2147483647 >= Version;
1634        case ACCC_copyout:
1635          return 1 <= Version && 2147483647 >= Version;
1636        case ACCC_create:
1637          return 1 <= Version && 2147483647 >= Version;
1638        case ACCC_present:
1639          return 1 <= Version && 2147483647 >= Version;
1640        case ACCC_deviceptr:
1641          return 1 <= Version && 2147483647 >= Version;
1642        case ACCC_device_resident:
1643          return 1 <= Version && 2147483647 >= Version;
1644        case ACCC_link:
1645          return 1 <= Version && 2147483647 >= Version;
1646        default:
1647          return false;
1648      }
1649      break;
1650    case ACCD_enter_data:
1651      switch (C) {
1652        case ACCC_wait:
1653          return 1 <= Version && 2147483647 >= Version;
1654        case ACCC_async:
1655          return 1 <= Version && 2147483647 >= Version;
1656        case ACCC_if:
1657          return 1 <= Version && 2147483647 >= Version;
1658        case ACCC_attach:
1659          return 1 <= Version && 2147483647 >= Version;
1660        case ACCC_create:
1661          return 1 <= Version && 2147483647 >= Version;
1662        case ACCC_copyin:
1663          return 1 <= Version && 2147483647 >= Version;
1664        default:
1665          return false;
1666      }
1667      break;
1668    case ACCD_exit_data:
1669      switch (C) {
1670        case ACCC_wait:
1671          return 1 <= Version && 2147483647 >= Version;
1672        case ACCC_async:
1673          return 1 <= Version && 2147483647 >= Version;
1674        case ACCC_if:
1675          return 1 <= Version && 2147483647 >= Version;
1676        case ACCC_finalize:
1677          return 1 <= Version && 2147483647 >= Version;
1678        case ACCC_copyout:
1679          return 1 <= Version && 2147483647 >= Version;
1680        case ACCC_delete:
1681          return 1 <= Version && 2147483647 >= Version;
1682        case ACCC_detach:
1683          return 1 <= Version && 2147483647 >= Version;
1684        default:
1685          return false;
1686      }
1687      break;
1688    case ACCD_host_data:
1689      switch (C) {
1690        case ACCC_if:
1691          return 1 <= Version && 2147483647 >= Version;
1692        case ACCC_if_present:
1693          return 1 <= Version && 2147483647 >= Version;
1694        case ACCC_use_device:
1695          return 1 <= Version && 2147483647 >= Version;
1696        default:
1697          return false;
1698      }
1699      break;
1700    case ACCD_init:
1701      switch (C) {
1702        case ACCC_device_num:
1703          return 1 <= Version && 2147483647 >= Version;
1704        case ACCC_device_type:
1705          return 1 <= Version && 2147483647 >= Version;
1706        case ACCC_if:
1707          return 1 <= Version && 2147483647 >= Version;
1708        default:
1709          return false;
1710      }
1711      break;
1712    case ACCD_kernels:
1713      switch (C) {
1714        case ACCC_attach:
1715          return 1 <= Version && 2147483647 >= Version;
1716        case ACCC_copy:
1717          return 1 <= Version && 2147483647 >= Version;
1718        case ACCC_copyin:
1719          return 1 <= Version && 2147483647 >= Version;
1720        case ACCC_copyout:
1721          return 1 <= Version && 2147483647 >= Version;
1722        case ACCC_create:
1723          return 1 <= Version && 2147483647 >= Version;
1724        case ACCC_device_type:
1725          return 1 <= Version && 2147483647 >= Version;
1726        case ACCC_no_create:
1727          return 1 <= Version && 2147483647 >= Version;
1728        case ACCC_present:
1729          return 1 <= Version && 2147483647 >= Version;
1730        case ACCC_deviceptr:
1731          return 1 <= Version && 2147483647 >= Version;
1732        case ACCC_wait:
1733          return 1 <= Version && 2147483647 >= Version;
1734        case ACCC_async:
1735          return 1 <= Version && 2147483647 >= Version;
1736        case ACCC_default:
1737          return 1 <= Version && 2147483647 >= Version;
1738        case ACCC_if:
1739          return 1 <= Version && 2147483647 >= Version;
1740        case ACCC_num_gangs:
1741          return 1 <= Version && 2147483647 >= Version;
1742        case ACCC_num_workers:
1743          return 1 <= Version && 2147483647 >= Version;
1744        case ACCC_self:
1745          return 1 <= Version && 2147483647 >= Version;
1746        case ACCC_vector_length:
1747          return 1 <= Version && 2147483647 >= Version;
1748        default:
1749          return false;
1750      }
1751      break;
1752    case ACCD_kernels_loop:
1753      switch (C) {
1754        case ACCC_attach:
1755          return 1 <= Version && 2147483647 >= Version;
1756        case ACCC_collapse:
1757          return 1 <= Version && 2147483647 >= Version;
1758        case ACCC_copy:
1759          return 1 <= Version && 2147483647 >= Version;
1760        case ACCC_copyin:
1761          return 1 <= Version && 2147483647 >= Version;
1762        case ACCC_copyout:
1763          return 1 <= Version && 2147483647 >= Version;
1764        case ACCC_create:
1765          return 1 <= Version && 2147483647 >= Version;
1766        case ACCC_deviceptr:
1767          return 1 <= Version && 2147483647 >= Version;
1768        case ACCC_device_type:
1769          return 1 <= Version && 2147483647 >= Version;
1770        case ACCC_gang:
1771          return 1 <= Version && 2147483647 >= Version;
1772        case ACCC_no_create:
1773          return 1 <= Version && 2147483647 >= Version;
1774        case ACCC_num_gangs:
1775          return 1 <= Version && 2147483647 >= Version;
1776        case ACCC_num_workers:
1777          return 1 <= Version && 2147483647 >= Version;
1778        case ACCC_present:
1779          return 1 <= Version && 2147483647 >= Version;
1780        case ACCC_private:
1781          return 1 <= Version && 2147483647 >= Version;
1782        case ACCC_reduction:
1783          return 1 <= Version && 2147483647 >= Version;
1784        case ACCC_tile:
1785          return 1 <= Version && 2147483647 >= Version;
1786        case ACCC_vector:
1787          return 1 <= Version && 2147483647 >= Version;
1788        case ACCC_vector_length:
1789          return 1 <= Version && 2147483647 >= Version;
1790        case ACCC_wait:
1791          return 1 <= Version && 2147483647 >= Version;
1792        case ACCC_worker:
1793          return 1 <= Version && 2147483647 >= Version;
1794        case ACCC_async:
1795          return 1 <= Version && 2147483647 >= Version;
1796        case ACCC_default:
1797          return 1 <= Version && 2147483647 >= Version;
1798        case ACCC_if:
1799          return 1 <= Version && 2147483647 >= Version;
1800        case ACCC_self:
1801          return 1 <= Version && 2147483647 >= Version;
1802        case ACCC_auto:
1803          return 1 <= Version && 2147483647 >= Version;
1804        case ACCC_independent:
1805          return 1 <= Version && 2147483647 >= Version;
1806        case ACCC_seq:
1807          return 1 <= Version && 2147483647 >= Version;
1808        default:
1809          return false;
1810      }
1811      break;
1812    case ACCD_loop:
1813      switch (C) {
1814        case ACCC_device_type:
1815          return 1 <= Version && 2147483647 >= Version;
1816        case ACCC_private:
1817          return 1 <= Version && 2147483647 >= Version;
1818        case ACCC_reduction:
1819          return 1 <= Version && 2147483647 >= Version;
1820        case ACCC_collapse:
1821          return 1 <= Version && 2147483647 >= Version;
1822        case ACCC_gang:
1823          return 1 <= Version && 2147483647 >= Version;
1824        case ACCC_tile:
1825          return 1 <= Version && 2147483647 >= Version;
1826        case ACCC_vector:
1827          return 1 <= Version && 2147483647 >= Version;
1828        case ACCC_worker:
1829          return 1 <= Version && 2147483647 >= Version;
1830        case ACCC_auto:
1831          return 1 <= Version && 2147483647 >= Version;
1832        case ACCC_independent:
1833          return 1 <= Version && 2147483647 >= Version;
1834        case ACCC_seq:
1835          return 1 <= Version && 2147483647 >= Version;
1836        default:
1837          return false;
1838      }
1839      break;
1840    case ACCD_parallel:
1841      switch (C) {
1842        case ACCC_attach:
1843          return 1 <= Version && 2147483647 >= Version;
1844        case ACCC_async:
1845          return 1 <= Version && 2147483647 >= Version;
1846        case ACCC_copy:
1847          return 1 <= Version && 2147483647 >= Version;
1848        case ACCC_copyin:
1849          return 1 <= Version && 2147483647 >= Version;
1850        case ACCC_copyout:
1851          return 1 <= Version && 2147483647 >= Version;
1852        case ACCC_create:
1853          return 1 <= Version && 2147483647 >= Version;
1854        case ACCC_deviceptr:
1855          return 1 <= Version && 2147483647 >= Version;
1856        case ACCC_device_type:
1857          return 1 <= Version && 2147483647 >= Version;
1858        case ACCC_no_create:
1859          return 1 <= Version && 2147483647 >= Version;
1860        case ACCC_num_gangs:
1861          return 1 <= Version && 2147483647 >= Version;
1862        case ACCC_num_workers:
1863          return 1 <= Version && 2147483647 >= Version;
1864        case ACCC_present:
1865          return 1 <= Version && 2147483647 >= Version;
1866        case ACCC_private:
1867          return 1 <= Version && 2147483647 >= Version;
1868        case ACCC_firstprivate:
1869          return 1 <= Version && 2147483647 >= Version;
1870        case ACCC_reduction:
1871          return 1 <= Version && 2147483647 >= Version;
1872        case ACCC_wait:
1873          return 1 <= Version && 2147483647 >= Version;
1874        case ACCC_vector_length:
1875          return 1 <= Version && 2147483647 >= Version;
1876        case ACCC_default:
1877          return 1 <= Version && 2147483647 >= Version;
1878        case ACCC_if:
1879          return 1 <= Version && 2147483647 >= Version;
1880        case ACCC_self:
1881          return 1 <= Version && 2147483647 >= Version;
1882        default:
1883          return false;
1884      }
1885      break;
1886    case ACCD_parallel_loop:
1887      switch (C) {
1888        case ACCC_attach:
1889          return 1 <= Version && 2147483647 >= Version;
1890        case ACCC_collapse:
1891          return 1 <= Version && 2147483647 >= Version;
1892        case ACCC_copy:
1893          return 1 <= Version && 2147483647 >= Version;
1894        case ACCC_copyin:
1895          return 1 <= Version && 2147483647 >= Version;
1896        case ACCC_copyout:
1897          return 1 <= Version && 2147483647 >= Version;
1898        case ACCC_create:
1899          return 1 <= Version && 2147483647 >= Version;
1900        case ACCC_deviceptr:
1901          return 1 <= Version && 2147483647 >= Version;
1902        case ACCC_device_type:
1903          return 1 <= Version && 2147483647 >= Version;
1904        case ACCC_firstprivate:
1905          return 1 <= Version && 2147483647 >= Version;
1906        case ACCC_gang:
1907          return 1 <= Version && 2147483647 >= Version;
1908        case ACCC_no_create:
1909          return 1 <= Version && 2147483647 >= Version;
1910        case ACCC_num_gangs:
1911          return 1 <= Version && 2147483647 >= Version;
1912        case ACCC_num_workers:
1913          return 1 <= Version && 2147483647 >= Version;
1914        case ACCC_present:
1915          return 1 <= Version && 2147483647 >= Version;
1916        case ACCC_private:
1917          return 1 <= Version && 2147483647 >= Version;
1918        case ACCC_reduction:
1919          return 1 <= Version && 2147483647 >= Version;
1920        case ACCC_tile:
1921          return 1 <= Version && 2147483647 >= Version;
1922        case ACCC_vector:
1923          return 1 <= Version && 2147483647 >= Version;
1924        case ACCC_vector_length:
1925          return 1 <= Version && 2147483647 >= Version;
1926        case ACCC_wait:
1927          return 1 <= Version && 2147483647 >= Version;
1928        case ACCC_worker:
1929          return 1 <= Version && 2147483647 >= Version;
1930        case ACCC_async:
1931          return 1 <= Version && 2147483647 >= Version;
1932        case ACCC_default:
1933          return 1 <= Version && 2147483647 >= Version;
1934        case ACCC_if:
1935          return 1 <= Version && 2147483647 >= Version;
1936        case ACCC_self:
1937          return 1 <= Version && 2147483647 >= Version;
1938        case ACCC_auto:
1939          return 1 <= Version && 2147483647 >= Version;
1940        case ACCC_independent:
1941          return 1 <= Version && 2147483647 >= Version;
1942        case ACCC_seq:
1943          return 1 <= Version && 2147483647 >= Version;
1944        default:
1945          return false;
1946      }
1947      break;
1948    case ACCD_routine:
1949      switch (C) {
1950        case ACCC_bind:
1951          return 1 <= Version && 2147483647 >= Version;
1952        case ACCC_device_type:
1953          return 1 <= Version && 2147483647 >= Version;
1954        case ACCC_gang:
1955          return 1 <= Version && 2147483647 >= Version;
1956        case ACCC_seq:
1957          return 1 <= Version && 2147483647 >= Version;
1958        case ACCC_vector:
1959          return 1 <= Version && 2147483647 >= Version;
1960        case ACCC_worker:
1961          return 1 <= Version && 2147483647 >= Version;
1962        case ACCC_nohost:
1963          return 1 <= Version && 2147483647 >= Version;
1964        default:
1965          return false;
1966      }
1967      break;
1968    case ACCD_serial:
1969      switch (C) {
1970        case ACCC_attach:
1971          return 1 <= Version && 2147483647 >= Version;
1972        case ACCC_copy:
1973          return 1 <= Version && 2147483647 >= Version;
1974        case ACCC_copyin:
1975          return 1 <= Version && 2147483647 >= Version;
1976        case ACCC_copyout:
1977          return 1 <= Version && 2147483647 >= Version;
1978        case ACCC_create:
1979          return 1 <= Version && 2147483647 >= Version;
1980        case ACCC_deviceptr:
1981          return 1 <= Version && 2147483647 >= Version;
1982        case ACCC_device_type:
1983          return 1 <= Version && 2147483647 >= Version;
1984        case ACCC_no_create:
1985          return 1 <= Version && 2147483647 >= Version;
1986        case ACCC_present:
1987          return 1 <= Version && 2147483647 >= Version;
1988        case ACCC_private:
1989          return 1 <= Version && 2147483647 >= Version;
1990        case ACCC_firstprivate:
1991          return 1 <= Version && 2147483647 >= Version;
1992        case ACCC_reduction:
1993          return 1 <= Version && 2147483647 >= Version;
1994        case ACCC_wait:
1995          return 1 <= Version && 2147483647 >= Version;
1996        case ACCC_async:
1997          return 1 <= Version && 2147483647 >= Version;
1998        case ACCC_default:
1999          return 1 <= Version && 2147483647 >= Version;
2000        case ACCC_if:
2001          return 1 <= Version && 2147483647 >= Version;
2002        case ACCC_self:
2003          return 1 <= Version && 2147483647 >= Version;
2004        default:
2005          return false;
2006      }
2007      break;
2008    case ACCD_serial_loop:
2009      switch (C) {
2010        case ACCC_attach:
2011          return 1 <= Version && 2147483647 >= Version;
2012        case ACCC_collapse:
2013          return 1 <= Version && 2147483647 >= Version;
2014        case ACCC_copy:
2015          return 1 <= Version && 2147483647 >= Version;
2016        case ACCC_copyin:
2017          return 1 <= Version && 2147483647 >= Version;
2018        case ACCC_copyout:
2019          return 1 <= Version && 2147483647 >= Version;
2020        case ACCC_create:
2021          return 1 <= Version && 2147483647 >= Version;
2022        case ACCC_deviceptr:
2023          return 1 <= Version && 2147483647 >= Version;
2024        case ACCC_device_type:
2025          return 1 <= Version && 2147483647 >= Version;
2026        case ACCC_firstprivate:
2027          return 1 <= Version && 2147483647 >= Version;
2028        case ACCC_gang:
2029          return 1 <= Version && 2147483647 >= Version;
2030        case ACCC_no_create:
2031          return 1 <= Version && 2147483647 >= Version;
2032        case ACCC_present:
2033          return 1 <= Version && 2147483647 >= Version;
2034        case ACCC_private:
2035          return 1 <= Version && 2147483647 >= Version;
2036        case ACCC_reduction:
2037          return 1 <= Version && 2147483647 >= Version;
2038        case ACCC_tile:
2039          return 1 <= Version && 2147483647 >= Version;
2040        case ACCC_vector:
2041          return 1 <= Version && 2147483647 >= Version;
2042        case ACCC_wait:
2043          return 1 <= Version && 2147483647 >= Version;
2044        case ACCC_worker:
2045          return 1 <= Version && 2147483647 >= Version;
2046        case ACCC_async:
2047          return 1 <= Version && 2147483647 >= Version;
2048        case ACCC_default:
2049          return 1 <= Version && 2147483647 >= Version;
2050        case ACCC_if:
2051          return 1 <= Version && 2147483647 >= Version;
2052        case ACCC_self:
2053          return 1 <= Version && 2147483647 >= Version;
2054        case ACCC_auto:
2055          return 1 <= Version && 2147483647 >= Version;
2056        case ACCC_independent:
2057          return 1 <= Version && 2147483647 >= Version;
2058        case ACCC_seq:
2059          return 1 <= Version && 2147483647 >= Version;
2060        default:
2061          return false;
2062      }
2063      break;
2064    case ACCD_set:
2065      switch (C) {
2066        case ACCC_default_async:
2067          return 1 <= Version && 2147483647 >= Version;
2068        case ACCC_device_num:
2069          return 1 <= Version && 2147483647 >= Version;
2070        case ACCC_device_type:
2071          return 1 <= Version && 2147483647 >= Version;
2072        case ACCC_if:
2073          return 1 <= Version && 2147483647 >= Version;
2074        default:
2075          return false;
2076      }
2077      break;
2078    case ACCD_shutdown:
2079      switch (C) {
2080        case ACCC_device_num:
2081          return 1 <= Version && 2147483647 >= Version;
2082        case ACCC_device_type:
2083          return 1 <= Version && 2147483647 >= Version;
2084        case ACCC_if:
2085          return 1 <= Version && 2147483647 >= Version;
2086        default:
2087          return false;
2088      }
2089      break;
2090    case ACCD_unknown:
2091      return false;
2092      break;
2093    case ACCD_update:
2094      switch (C) {
2095        case ACCC_device_type:
2096          return 1 <= Version && 2147483647 >= Version;
2097        case ACCC_wait:
2098          return 1 <= Version && 2147483647 >= Version;
2099        case ACCC_async:
2100          return 1 <= Version && 2147483647 >= Version;
2101        case ACCC_if:
2102          return 1 <= Version && 2147483647 >= Version;
2103        case ACCC_if_present:
2104          return 1 <= Version && 2147483647 >= Version;
2105        case ACCC_device:
2106          return 1 <= Version && 2147483647 >= Version;
2107        case ACCC_host:
2108          return 1 <= Version && 2147483647 >= Version;
2109        case ACCC_self:
2110          return 1 <= Version && 2147483647 >= Version;
2111        default:
2112          return false;
2113      }
2114      break;
2115    case ACCD_wait:
2116      switch (C) {
2117        case ACCC_async:
2118          return 1 <= Version && 2147483647 >= Version;
2119        case ACCC_if:
2120          return 1 <= Version && 2147483647 >= Version;
2121        default:
2122          return false;
2123      }
2124      break;
2125  }
2126  llvm_unreachable("Invalid OpenACC Directive kind");
2127}
2128
2129llvm::ArrayRef<llvm::acc::Directive> llvm::acc::getLeafConstructs(llvm::acc::Directive Dir) {
2130  static const llvm::acc::Directive leafConstructs_kernels_loop[] = {
2131    llvm::acc::Directive::ACCD_kernels,
2132    llvm::acc::Directive::ACCD_loop,
2133  };
2134  static const llvm::acc::Directive leafConstructs_parallel_loop[] = {
2135    llvm::acc::Directive::ACCD_parallel,
2136    llvm::acc::Directive::ACCD_loop,
2137  };
2138  static const llvm::acc::Directive leafConstructs_serial_loop[] = {
2139    llvm::acc::Directive::ACCD_serial,
2140    llvm::acc::Directive::ACCD_loop,
2141  };
2142
2143  switch (Dir) {
2144  case llvm::acc::Directive::ACCD_kernels_loop:
2145    return leafConstructs_kernels_loop;
2146  case llvm::acc::Directive::ACCD_parallel_loop:
2147    return leafConstructs_parallel_loop;
2148  case llvm::acc::Directive::ACCD_serial_loop:
2149    return leafConstructs_serial_loop;
2150  default:
2151    return ArrayRef<llvm::acc::Directive>{};
2152  } // switch (Dir)
2153}
2154
2155llvm::acc::Association llvm::acc::getDirectiveAssociation(llvm::acc::Directive Dir) {
2156  switch (Dir) {
2157  case llvm::acc::Directive::ACCD_atomic:
2158    return llvm::acc::Association::Block;
2159  case llvm::acc::Directive::ACCD_cache:
2160    return llvm::acc::Association::None;
2161  case llvm::acc::Directive::ACCD_data:
2162    return llvm::acc::Association::Block;
2163  case llvm::acc::Directive::ACCD_declare:
2164    return llvm::acc::Association::None;
2165  case llvm::acc::Directive::ACCD_enter_data:
2166    return llvm::acc::Association::None;
2167  case llvm::acc::Directive::ACCD_exit_data:
2168    return llvm::acc::Association::None;
2169  case llvm::acc::Directive::ACCD_host_data:
2170    return llvm::acc::Association::Block;
2171  case llvm::acc::Directive::ACCD_init:
2172    return llvm::acc::Association::None;
2173  case llvm::acc::Directive::ACCD_kernels:
2174    return llvm::acc::Association::Block;
2175  case llvm::acc::Directive::ACCD_kernels_loop:
2176    return llvm::acc::Association::Loop;
2177  case llvm::acc::Directive::ACCD_loop:
2178    return llvm::acc::Association::Loop;
2179  case llvm::acc::Directive::ACCD_parallel:
2180    return llvm::acc::Association::Block;
2181  case llvm::acc::Directive::ACCD_parallel_loop:
2182    return llvm::acc::Association::Loop;
2183  case llvm::acc::Directive::ACCD_routine:
2184    return llvm::acc::Association::Declaration;
2185  case llvm::acc::Directive::ACCD_serial:
2186    return llvm::acc::Association::Block;
2187  case llvm::acc::Directive::ACCD_serial_loop:
2188    return llvm::acc::Association::Loop;
2189  case llvm::acc::Directive::ACCD_set:
2190    return llvm::acc::Association::None;
2191  case llvm::acc::Directive::ACCD_shutdown:
2192    return llvm::acc::Association::None;
2193  case llvm::acc::Directive::ACCD_unknown:
2194    return llvm::acc::Association::None;
2195  case llvm::acc::Directive::ACCD_update:
2196    return llvm::acc::Association::None;
2197  case llvm::acc::Directive::ACCD_wait:
2198    return llvm::acc::Association::None;
2199  } // switch(Dir)
2200  llvm_unreachable("Unexpected directive");
2201}
2202
2203#endif // GEN_DIRECTIVES_IMPL
2204
2205