Update prebuilt Clang to r416183b from Android.

https://android.googlesource.com/platform/prebuilts/clang/host/
linux-x86/+/06a71ddac05c22edb2d10b590e1769b3f8619bef

clang 12.0.5 (based on r416183b) from build 7284624.

Change-Id: I277a316abcf47307562d8b748b84870f31a72866
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
diff --git a/linux-x64/clang/include/llvm/Frontend/OpenACC/ACC.inc b/linux-x64/clang/include/llvm/Frontend/OpenACC/ACC.inc
new file mode 100644
index 0000000..e897fa9
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Frontend/OpenACC/ACC.inc
@@ -0,0 +1,1143 @@
+#ifdef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
+#undef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
+
+namespace llvm {
+namespace acc {
+
+  // Sets for atomic
+
+  static AccClauseSet allowedClauses_ACCD_atomic {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_atomic {
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_atomic {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_atomic {
+  };
+
+  // Sets for cache
+
+  static AccClauseSet allowedClauses_ACCD_cache {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_cache {
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_cache {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_cache {
+  };
+
+  // Sets for data
+
+  static AccClauseSet allowedClauses_ACCD_data {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_data {
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_default,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_data {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_data {
+    llvm::acc::Clause::ACCC_attach,
+    llvm::acc::Clause::ACCC_copy,
+    llvm::acc::Clause::ACCC_copyin,
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_default,
+    llvm::acc::Clause::ACCC_deviceptr,
+    llvm::acc::Clause::ACCC_no_create,
+    llvm::acc::Clause::ACCC_present,
+  };
+
+  // Sets for declare
+
+  static AccClauseSet allowedClauses_ACCD_declare {
+    llvm::acc::Clause::ACCC_copy,
+    llvm::acc::Clause::ACCC_copyin,
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_present,
+    llvm::acc::Clause::ACCC_deviceptr,
+    llvm::acc::Clause::ACCC_device_resident,
+    llvm::acc::Clause::ACCC_link,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_declare {
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_declare {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_declare {
+  };
+
+  // Sets for enter data
+
+  static AccClauseSet allowedClauses_ACCD_enter_data {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_enter_data {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_wait,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_enter_data {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_enter_data {
+    llvm::acc::Clause::ACCC_attach,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_copyin,
+  };
+
+  // Sets for exit data
+
+  static AccClauseSet allowedClauses_ACCD_exit_data {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_wait,
+    llvm::acc::Clause::ACCC_finalize,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_exit_data {
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_exit_data {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_exit_data {
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_delete,
+    llvm::acc::Clause::ACCC_detach,
+  };
+
+  // Sets for host_data
+
+  static AccClauseSet allowedClauses_ACCD_host_data {
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_if_present,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_host_data {
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_host_data {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_host_data {
+    llvm::acc::Clause::ACCC_use_device,
+  };
+
+  // Sets for init
+
+  static AccClauseSet allowedClauses_ACCD_init {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_init {
+    llvm::acc::Clause::ACCC_device_num,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_if,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_init {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_init {
+  };
+
+  // Sets for kernels
+
+  static AccClauseSet allowedClauses_ACCD_kernels {
+    llvm::acc::Clause::ACCC_attach,
+    llvm::acc::Clause::ACCC_copy,
+    llvm::acc::Clause::ACCC_copyin,
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_no_create,
+    llvm::acc::Clause::ACCC_present,
+    llvm::acc::Clause::ACCC_deviceptr,
+    llvm::acc::Clause::ACCC_wait,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_kernels {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_default,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_num_gangs,
+    llvm::acc::Clause::ACCC_num_workers,
+    llvm::acc::Clause::ACCC_self,
+    llvm::acc::Clause::ACCC_vector_length,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_kernels {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_kernels {
+  };
+
+  // Sets for kernels loop
+
+  static AccClauseSet allowedClauses_ACCD_kernels_loop {
+    llvm::acc::Clause::ACCC_copy,
+    llvm::acc::Clause::ACCC_copyin,
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_no_create,
+    llvm::acc::Clause::ACCC_present,
+    llvm::acc::Clause::ACCC_private,
+    llvm::acc::Clause::ACCC_deviceptr,
+    llvm::acc::Clause::ACCC_attach,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_kernels_loop {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_collapse,
+    llvm::acc::Clause::ACCC_default,
+    llvm::acc::Clause::ACCC_gang,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_num_gangs,
+    llvm::acc::Clause::ACCC_num_workers,
+    llvm::acc::Clause::ACCC_reduction,
+    llvm::acc::Clause::ACCC_self,
+    llvm::acc::Clause::ACCC_tile,
+    llvm::acc::Clause::ACCC_vector,
+    llvm::acc::Clause::ACCC_vector_length,
+    llvm::acc::Clause::ACCC_wait,
+    llvm::acc::Clause::ACCC_worker,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_kernels_loop {
+    llvm::acc::Clause::ACCC_auto,
+    llvm::acc::Clause::ACCC_independent,
+    llvm::acc::Clause::ACCC_seq,
+  };
+
+  static AccClauseSet requiredClauses_ACCD_kernels_loop {
+  };
+
+  // Sets for loop
+
+  static AccClauseSet allowedClauses_ACCD_loop {
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_private,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_loop {
+    llvm::acc::Clause::ACCC_collapse,
+    llvm::acc::Clause::ACCC_gang,
+    llvm::acc::Clause::ACCC_reduction,
+    llvm::acc::Clause::ACCC_tile,
+    llvm::acc::Clause::ACCC_vector,
+    llvm::acc::Clause::ACCC_worker,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_loop {
+    llvm::acc::Clause::ACCC_auto,
+    llvm::acc::Clause::ACCC_independent,
+    llvm::acc::Clause::ACCC_seq,
+  };
+
+  static AccClauseSet requiredClauses_ACCD_loop {
+  };
+
+  // Sets for parallel
+
+  static AccClauseSet allowedClauses_ACCD_parallel {
+    llvm::acc::Clause::ACCC_attach,
+    llvm::acc::Clause::ACCC_copy,
+    llvm::acc::Clause::ACCC_copyin,
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_deviceptr,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_no_create,
+    llvm::acc::Clause::ACCC_present,
+    llvm::acc::Clause::ACCC_private,
+    llvm::acc::Clause::ACCC_firstprivate,
+    llvm::acc::Clause::ACCC_wait,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_parallel {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_default,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_num_gangs,
+    llvm::acc::Clause::ACCC_num_workers,
+    llvm::acc::Clause::ACCC_reduction,
+    llvm::acc::Clause::ACCC_self,
+    llvm::acc::Clause::ACCC_vector_length,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_parallel {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_parallel {
+  };
+
+  // Sets for parallel loop
+
+  static AccClauseSet allowedClauses_ACCD_parallel_loop {
+    llvm::acc::Clause::ACCC_attach,
+    llvm::acc::Clause::ACCC_copy,
+    llvm::acc::Clause::ACCC_copyin,
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_deviceptr,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_firstprivate,
+    llvm::acc::Clause::ACCC_no_create,
+    llvm::acc::Clause::ACCC_present,
+    llvm::acc::Clause::ACCC_private,
+    llvm::acc::Clause::ACCC_tile,
+    llvm::acc::Clause::ACCC_wait,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_parallel_loop {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_collapse,
+    llvm::acc::Clause::ACCC_default,
+    llvm::acc::Clause::ACCC_gang,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_num_gangs,
+    llvm::acc::Clause::ACCC_num_workers,
+    llvm::acc::Clause::ACCC_reduction,
+    llvm::acc::Clause::ACCC_self,
+    llvm::acc::Clause::ACCC_vector,
+    llvm::acc::Clause::ACCC_vector_length,
+    llvm::acc::Clause::ACCC_worker,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_parallel_loop {
+    llvm::acc::Clause::ACCC_auto,
+    llvm::acc::Clause::ACCC_independent,
+    llvm::acc::Clause::ACCC_seq,
+  };
+
+  static AccClauseSet requiredClauses_ACCD_parallel_loop {
+  };
+
+  // Sets for routine
+
+  static AccClauseSet allowedClauses_ACCD_routine {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_routine {
+    llvm::acc::Clause::ACCC_bind,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_nohost,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_routine {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_routine {
+    llvm::acc::Clause::ACCC_gang,
+    llvm::acc::Clause::ACCC_seq,
+    llvm::acc::Clause::ACCC_vector,
+    llvm::acc::Clause::ACCC_worker,
+  };
+
+  // Sets for serial
+
+  static AccClauseSet allowedClauses_ACCD_serial {
+    llvm::acc::Clause::ACCC_attach,
+    llvm::acc::Clause::ACCC_copy,
+    llvm::acc::Clause::ACCC_copyin,
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_deviceptr,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_no_create,
+    llvm::acc::Clause::ACCC_present,
+    llvm::acc::Clause::ACCC_private,
+    llvm::acc::Clause::ACCC_firstprivate,
+    llvm::acc::Clause::ACCC_wait,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_serial {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_default,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_reduction,
+    llvm::acc::Clause::ACCC_self,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_serial {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_serial {
+  };
+
+  // Sets for serial loop
+
+  static AccClauseSet allowedClauses_ACCD_serial_loop {
+    llvm::acc::Clause::ACCC_attach,
+    llvm::acc::Clause::ACCC_copy,
+    llvm::acc::Clause::ACCC_copyin,
+    llvm::acc::Clause::ACCC_copyout,
+    llvm::acc::Clause::ACCC_create,
+    llvm::acc::Clause::ACCC_deviceptr,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_firstprivate,
+    llvm::acc::Clause::ACCC_no_create,
+    llvm::acc::Clause::ACCC_present,
+    llvm::acc::Clause::ACCC_private,
+    llvm::acc::Clause::ACCC_wait,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_serial_loop {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_collapse,
+    llvm::acc::Clause::ACCC_default,
+    llvm::acc::Clause::ACCC_gang,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_reduction,
+    llvm::acc::Clause::ACCC_self,
+    llvm::acc::Clause::ACCC_tile,
+    llvm::acc::Clause::ACCC_vector,
+    llvm::acc::Clause::ACCC_worker,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_serial_loop {
+    llvm::acc::Clause::ACCC_auto,
+    llvm::acc::Clause::ACCC_independent,
+    llvm::acc::Clause::ACCC_seq,
+  };
+
+  static AccClauseSet requiredClauses_ACCD_serial_loop {
+  };
+
+  // Sets for set
+
+  static AccClauseSet allowedClauses_ACCD_set {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_set {
+    llvm::acc::Clause::ACCC_default_async,
+    llvm::acc::Clause::ACCC_device_num,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_if,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_set {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_set {
+    llvm::acc::Clause::ACCC_default_async,
+    llvm::acc::Clause::ACCC_device_num,
+    llvm::acc::Clause::ACCC_device_type,
+  };
+
+  // Sets for shutdown
+
+  static AccClauseSet allowedClauses_ACCD_shutdown {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_shutdown {
+    llvm::acc::Clause::ACCC_device_num,
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_if,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_shutdown {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_shutdown {
+  };
+
+  // Sets for unknown
+
+  static AccClauseSet allowedClauses_ACCD_unknown {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_unknown {
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_unknown {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_unknown {
+  };
+
+  // Sets for update
+
+  static AccClauseSet allowedClauses_ACCD_update {
+    llvm::acc::Clause::ACCC_device_type,
+    llvm::acc::Clause::ACCC_wait,
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_update {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_if,
+    llvm::acc::Clause::ACCC_if_present,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_update {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_update {
+    llvm::acc::Clause::ACCC_device,
+    llvm::acc::Clause::ACCC_host,
+    llvm::acc::Clause::ACCC_self,
+  };
+
+  // Sets for wait
+
+  static AccClauseSet allowedClauses_ACCD_wait {
+  };
+
+  static AccClauseSet allowedOnceClauses_ACCD_wait {
+    llvm::acc::Clause::ACCC_async,
+    llvm::acc::Clause::ACCC_if,
+  };
+
+  static AccClauseSet allowedExclusiveClauses_ACCD_wait {
+  };
+
+  static AccClauseSet requiredClauses_ACCD_wait {
+  };
+} // namespace acc
+} // namespace llvm
+
+#endif // GEN_FLANG_DIRECTIVE_CLAUSE_SETS
+
+#ifdef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
+#undef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
+
+{
+  {llvm::acc::Directive::ACCD_atomic,
+    {
+      llvm::acc::allowedClauses_ACCD_atomic,
+      llvm::acc::allowedOnceClauses_ACCD_atomic,
+      llvm::acc::allowedExclusiveClauses_ACCD_atomic,
+      llvm::acc::requiredClauses_ACCD_atomic,
+    }
+  },
+  {llvm::acc::Directive::ACCD_cache,
+    {
+      llvm::acc::allowedClauses_ACCD_cache,
+      llvm::acc::allowedOnceClauses_ACCD_cache,
+      llvm::acc::allowedExclusiveClauses_ACCD_cache,
+      llvm::acc::requiredClauses_ACCD_cache,
+    }
+  },
+  {llvm::acc::Directive::ACCD_data,
+    {
+      llvm::acc::allowedClauses_ACCD_data,
+      llvm::acc::allowedOnceClauses_ACCD_data,
+      llvm::acc::allowedExclusiveClauses_ACCD_data,
+      llvm::acc::requiredClauses_ACCD_data,
+    }
+  },
+  {llvm::acc::Directive::ACCD_declare,
+    {
+      llvm::acc::allowedClauses_ACCD_declare,
+      llvm::acc::allowedOnceClauses_ACCD_declare,
+      llvm::acc::allowedExclusiveClauses_ACCD_declare,
+      llvm::acc::requiredClauses_ACCD_declare,
+    }
+  },
+  {llvm::acc::Directive::ACCD_enter_data,
+    {
+      llvm::acc::allowedClauses_ACCD_enter_data,
+      llvm::acc::allowedOnceClauses_ACCD_enter_data,
+      llvm::acc::allowedExclusiveClauses_ACCD_enter_data,
+      llvm::acc::requiredClauses_ACCD_enter_data,
+    }
+  },
+  {llvm::acc::Directive::ACCD_exit_data,
+    {
+      llvm::acc::allowedClauses_ACCD_exit_data,
+      llvm::acc::allowedOnceClauses_ACCD_exit_data,
+      llvm::acc::allowedExclusiveClauses_ACCD_exit_data,
+      llvm::acc::requiredClauses_ACCD_exit_data,
+    }
+  },
+  {llvm::acc::Directive::ACCD_host_data,
+    {
+      llvm::acc::allowedClauses_ACCD_host_data,
+      llvm::acc::allowedOnceClauses_ACCD_host_data,
+      llvm::acc::allowedExclusiveClauses_ACCD_host_data,
+      llvm::acc::requiredClauses_ACCD_host_data,
+    }
+  },
+  {llvm::acc::Directive::ACCD_init,
+    {
+      llvm::acc::allowedClauses_ACCD_init,
+      llvm::acc::allowedOnceClauses_ACCD_init,
+      llvm::acc::allowedExclusiveClauses_ACCD_init,
+      llvm::acc::requiredClauses_ACCD_init,
+    }
+  },
+  {llvm::acc::Directive::ACCD_kernels,
+    {
+      llvm::acc::allowedClauses_ACCD_kernels,
+      llvm::acc::allowedOnceClauses_ACCD_kernels,
+      llvm::acc::allowedExclusiveClauses_ACCD_kernels,
+      llvm::acc::requiredClauses_ACCD_kernels,
+    }
+  },
+  {llvm::acc::Directive::ACCD_kernels_loop,
+    {
+      llvm::acc::allowedClauses_ACCD_kernels_loop,
+      llvm::acc::allowedOnceClauses_ACCD_kernels_loop,
+      llvm::acc::allowedExclusiveClauses_ACCD_kernels_loop,
+      llvm::acc::requiredClauses_ACCD_kernels_loop,
+    }
+  },
+  {llvm::acc::Directive::ACCD_loop,
+    {
+      llvm::acc::allowedClauses_ACCD_loop,
+      llvm::acc::allowedOnceClauses_ACCD_loop,
+      llvm::acc::allowedExclusiveClauses_ACCD_loop,
+      llvm::acc::requiredClauses_ACCD_loop,
+    }
+  },
+  {llvm::acc::Directive::ACCD_parallel,
+    {
+      llvm::acc::allowedClauses_ACCD_parallel,
+      llvm::acc::allowedOnceClauses_ACCD_parallel,
+      llvm::acc::allowedExclusiveClauses_ACCD_parallel,
+      llvm::acc::requiredClauses_ACCD_parallel,
+    }
+  },
+  {llvm::acc::Directive::ACCD_parallel_loop,
+    {
+      llvm::acc::allowedClauses_ACCD_parallel_loop,
+      llvm::acc::allowedOnceClauses_ACCD_parallel_loop,
+      llvm::acc::allowedExclusiveClauses_ACCD_parallel_loop,
+      llvm::acc::requiredClauses_ACCD_parallel_loop,
+    }
+  },
+  {llvm::acc::Directive::ACCD_routine,
+    {
+      llvm::acc::allowedClauses_ACCD_routine,
+      llvm::acc::allowedOnceClauses_ACCD_routine,
+      llvm::acc::allowedExclusiveClauses_ACCD_routine,
+      llvm::acc::requiredClauses_ACCD_routine,
+    }
+  },
+  {llvm::acc::Directive::ACCD_serial,
+    {
+      llvm::acc::allowedClauses_ACCD_serial,
+      llvm::acc::allowedOnceClauses_ACCD_serial,
+      llvm::acc::allowedExclusiveClauses_ACCD_serial,
+      llvm::acc::requiredClauses_ACCD_serial,
+    }
+  },
+  {llvm::acc::Directive::ACCD_serial_loop,
+    {
+      llvm::acc::allowedClauses_ACCD_serial_loop,
+      llvm::acc::allowedOnceClauses_ACCD_serial_loop,
+      llvm::acc::allowedExclusiveClauses_ACCD_serial_loop,
+      llvm::acc::requiredClauses_ACCD_serial_loop,
+    }
+  },
+  {llvm::acc::Directive::ACCD_set,
+    {
+      llvm::acc::allowedClauses_ACCD_set,
+      llvm::acc::allowedOnceClauses_ACCD_set,
+      llvm::acc::allowedExclusiveClauses_ACCD_set,
+      llvm::acc::requiredClauses_ACCD_set,
+    }
+  },
+  {llvm::acc::Directive::ACCD_shutdown,
+    {
+      llvm::acc::allowedClauses_ACCD_shutdown,
+      llvm::acc::allowedOnceClauses_ACCD_shutdown,
+      llvm::acc::allowedExclusiveClauses_ACCD_shutdown,
+      llvm::acc::requiredClauses_ACCD_shutdown,
+    }
+  },
+  {llvm::acc::Directive::ACCD_unknown,
+    {
+      llvm::acc::allowedClauses_ACCD_unknown,
+      llvm::acc::allowedOnceClauses_ACCD_unknown,
+      llvm::acc::allowedExclusiveClauses_ACCD_unknown,
+      llvm::acc::requiredClauses_ACCD_unknown,
+    }
+  },
+  {llvm::acc::Directive::ACCD_update,
+    {
+      llvm::acc::allowedClauses_ACCD_update,
+      llvm::acc::allowedOnceClauses_ACCD_update,
+      llvm::acc::allowedExclusiveClauses_ACCD_update,
+      llvm::acc::requiredClauses_ACCD_update,
+    }
+  },
+  {llvm::acc::Directive::ACCD_wait,
+    {
+      llvm::acc::allowedClauses_ACCD_wait,
+      llvm::acc::allowedOnceClauses_ACCD_wait,
+      llvm::acc::allowedExclusiveClauses_ACCD_wait,
+      llvm::acc::requiredClauses_ACCD_wait,
+    }
+  },
+}
+
+#endif // GEN_FLANG_DIRECTIVE_CLAUSE_MAP
+
+#ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES
+#undef GEN_FLANG_CLAUSE_PARSER_CLASSES
+
+WRAPPER_CLASS(Async, std::optional<ScalarIntExpr>);
+WRAPPER_CLASS(Attach, AccObjectList);
+EMPTY_CLASS(Auto);
+WRAPPER_CLASS(Bind, AccBindClause);
+EMPTY_CLASS(Capture);
+WRAPPER_CLASS(Collapse, ScalarIntConstantExpr);
+WRAPPER_CLASS(Copy, AccObjectList);
+WRAPPER_CLASS(Copyin, AccObjectListWithModifier);
+WRAPPER_CLASS(Copyout, AccObjectListWithModifier);
+WRAPPER_CLASS(Create, AccObjectListWithModifier);
+WRAPPER_CLASS(Default, AccDefaultClause);
+WRAPPER_CLASS(DefaultAsync, ScalarIntExpr);
+WRAPPER_CLASS(Delete, AccObjectList);
+WRAPPER_CLASS(Detach, AccObjectList);
+WRAPPER_CLASS(Device, AccObjectList);
+WRAPPER_CLASS(DeviceNum, ScalarIntExpr);
+WRAPPER_CLASS(Deviceptr, AccObjectList);
+WRAPPER_CLASS(DeviceResident, AccObjectList);
+WRAPPER_CLASS(DeviceType, std::optional<std::list<ScalarIntExpr>>);
+EMPTY_CLASS(Finalize);
+WRAPPER_CLASS(Firstprivate, AccObjectList);
+WRAPPER_CLASS(Gang, std::optional<AccGangArgument>);
+WRAPPER_CLASS(Host, AccObjectList);
+WRAPPER_CLASS(If, ScalarLogicalExpr);
+EMPTY_CLASS(IfPresent);
+EMPTY_CLASS(Independent);
+WRAPPER_CLASS(Link, AccObjectList);
+WRAPPER_CLASS(NoCreate, AccObjectList);
+EMPTY_CLASS(Nohost);
+WRAPPER_CLASS(NumGangs, ScalarIntExpr);
+WRAPPER_CLASS(NumWorkers, ScalarIntExpr);
+WRAPPER_CLASS(Present, AccObjectList);
+WRAPPER_CLASS(Private, AccObjectList);
+EMPTY_CLASS(Read);
+WRAPPER_CLASS(Reduction, AccObjectListWithReduction);
+WRAPPER_CLASS(Self, AccSelfClause);
+EMPTY_CLASS(Seq);
+WRAPPER_CLASS(Tile, AccTileExprList);
+EMPTY_CLASS(Unknown);
+WRAPPER_CLASS(UseDevice, AccObjectList);
+WRAPPER_CLASS(Vector, std::optional<ScalarIntExpr>);
+WRAPPER_CLASS(VectorLength, ScalarIntExpr);
+WRAPPER_CLASS(Wait, std::optional<AccWaitArgument>);
+WRAPPER_CLASS(Worker, std::optional<ScalarIntExpr>);
+EMPTY_CLASS(Write);
+
+#endif // GEN_FLANG_CLAUSE_PARSER_CLASSES
+
+#ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
+#undef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
+
+Async
+, Attach
+, Auto
+, Bind
+, Capture
+, Collapse
+, Copy
+, Copyin
+, Copyout
+, Create
+, Default
+, DefaultAsync
+, Delete
+, Detach
+, Device
+, DeviceNum
+, Deviceptr
+, DeviceResident
+, DeviceType
+, Finalize
+, Firstprivate
+, Gang
+, Host
+, If
+, IfPresent
+, Independent
+, Link
+, NoCreate
+, Nohost
+, NumGangs
+, NumWorkers
+, Present
+, Private
+, Read
+, Reduction
+, Self
+, Seq
+, Tile
+, Unknown
+, UseDevice
+, Vector
+, VectorLength
+, Wait
+, Worker
+, Write
+
+#endif // GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
+
+#ifdef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
+#undef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
+
+NODE(AccClause, Async)
+NODE(AccClause, Attach)
+NODE(AccClause, Auto)
+NODE(AccClause, Bind)
+NODE(AccClause, Capture)
+NODE(AccClause, Collapse)
+NODE(AccClause, Copy)
+NODE(AccClause, Copyin)
+NODE(AccClause, Copyout)
+NODE(AccClause, Create)
+NODE(AccClause, Default)
+NODE(AccClause, DefaultAsync)
+NODE(AccClause, Delete)
+NODE(AccClause, Detach)
+NODE(AccClause, Device)
+NODE(AccClause, DeviceNum)
+NODE(AccClause, Deviceptr)
+NODE(AccClause, DeviceResident)
+NODE(AccClause, DeviceType)
+NODE(AccClause, Finalize)
+NODE(AccClause, Firstprivate)
+NODE(AccClause, Gang)
+NODE(AccClause, Host)
+NODE(AccClause, If)
+NODE(AccClause, IfPresent)
+NODE(AccClause, Independent)
+NODE(AccClause, Link)
+NODE(AccClause, NoCreate)
+NODE(AccClause, Nohost)
+NODE(AccClause, NumGangs)
+NODE(AccClause, NumWorkers)
+NODE(AccClause, Present)
+NODE(AccClause, Private)
+NODE(AccClause, Read)
+NODE(AccClause, Reduction)
+NODE(AccClause, Self)
+NODE(AccClause, Seq)
+NODE(AccClause, Tile)
+NODE(AccClause, Unknown)
+NODE(AccClause, UseDevice)
+NODE(AccClause, Vector)
+NODE(AccClause, VectorLength)
+NODE(AccClause, Wait)
+NODE(AccClause, Worker)
+NODE(AccClause, Write)
+
+#endif // GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
+
+#ifdef GEN_FLANG_CLAUSE_UNPARSE
+#undef GEN_FLANG_CLAUSE_UNPARSE
+
+void Unparse(const AccClause::Async &x) {
+  Word("ASYNC");
+  Walk("(", x.v, ")");
+}
+void Unparse(const AccClause::Attach &x) {
+  Word("ATTACH");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Before(const AccClause::Auto &) { Word("AUTO"); }
+void Unparse(const AccClause::Bind &x) {
+  Word("BIND");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Before(const AccClause::Capture &) { Word("CAPTURE"); }
+void Unparse(const AccClause::Collapse &x) {
+  Word("COLLAPSE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Copy &x) {
+  Word("COPY");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Copyin &x) {
+  Word("COPYIN");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Copyout &x) {
+  Word("COPYOUT");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Create &x) {
+  Word("CREATE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Default &x) {
+  Word("DEFAULT");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::DefaultAsync &x) {
+  Word("DEFAULT_ASYNC");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Delete &x) {
+  Word("DELETE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Detach &x) {
+  Word("DETACH");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Device &x) {
+  Word("DEVICE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::DeviceNum &x) {
+  Word("DEVICE_NUM");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Deviceptr &x) {
+  Word("DEVICEPTR");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::DeviceResident &x) {
+  Word("DEVICE_RESIDENT");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::DeviceType &x) {
+  Word("DEVICE_TYPE");
+  Put("(");
+  if (x.v.has_value())
+    Walk(x.v, ",");
+  else
+    Put("*");
+  Put(")");
+}
+void Before(const AccClause::Finalize &) { Word("FINALIZE"); }
+void Unparse(const AccClause::Firstprivate &x) {
+  Word("FIRSTPRIVATE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Gang &x) {
+  Word("GANG");
+  Walk("(", x.v, ")");
+}
+void Unparse(const AccClause::Host &x) {
+  Word("HOST");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::If &x) {
+  Word("IF");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Before(const AccClause::IfPresent &) { Word("IF_PRESENT"); }
+void Before(const AccClause::Independent &) { Word("INDEPENDENT"); }
+void Unparse(const AccClause::Link &x) {
+  Word("LINK");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::NoCreate &x) {
+  Word("NO_CREATE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Before(const AccClause::Nohost &) { Word("NOHOST"); }
+void Unparse(const AccClause::NumGangs &x) {
+  Word("NUM_GANGS");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::NumWorkers &x) {
+  Word("NUM_WORKERS");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Present &x) {
+  Word("PRESENT");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Private &x) {
+  Word("PRIVATE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Before(const AccClause::Read &) { Word("READ"); }
+void Unparse(const AccClause::Reduction &x) {
+  Word("REDUCTION");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Self &x) {
+  Word("SELF");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Before(const AccClause::Seq &) { Word("SEQ"); }
+void Unparse(const AccClause::Tile &x) {
+  Word("TILE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Before(const AccClause::Unknown &) { Word("UNKNOWN"); }
+void Unparse(const AccClause::UseDevice &x) {
+  Word("USE_DEVICE");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Vector &x) {
+  Word("VECTOR");
+  Walk("(", x.v, ")");
+}
+void Unparse(const AccClause::VectorLength &x) {
+  Word("VECTOR_LENGTH");
+  Put("(");
+  Walk(x.v);
+  Put(")");
+}
+void Unparse(const AccClause::Wait &x) {
+  Word("WAIT");
+  Walk("(", x.v, ")");
+}
+void Unparse(const AccClause::Worker &x) {
+  Word("WORKER");
+  Walk("(", x.v, ")");
+}
+void Before(const AccClause::Write &) { Word("WRITE"); }
+
+#endif // GEN_FLANG_CLAUSE_UNPARSE
+
+#ifdef GEN_CLANG_CLAUSE_CLASS
+#undef GEN_CLANG_CLAUSE_CLASS
+
+#ifndef CLAUSE
+#define CLAUSE(Enum, Str, Implicit)
+#endif
+#ifndef CLAUSE_CLASS
+#define CLAUSE_CLASS(Enum, Str, Class)
+#endif
+#ifndef CLAUSE_NO_CLASS
+#define CLAUSE_NO_CLASS(Enum, Str)
+#endif
+
+#define __CLAUSE(Name, Class)                      \
+  CLAUSE(ACCC_##Name, #Name, /* Implicit */ false) \
+  CLAUSE_CLASS(ACCC_##Name, #Name, Class)
+#define __CLAUSE_NO_CLASS(Name)                    \
+  CLAUSE(ACCC_##Name, #Name, /* Implicit */ false) \
+  CLAUSE_NO_CLASS(ACCC_##Name, #Name)
+#define __IMPLICIT_CLAUSE_CLASS(Name, Str, Class)  \
+  CLAUSE(ACCC_##Name, Str, /* Implicit */ true)    \
+  CLAUSE_CLASS(ACCC_##Name, Str, Class)
+#define __IMPLICIT_CLAUSE_NO_CLASS(Name, Str)      \
+  CLAUSE(ACCC_##Name, Str, /* Implicit */ true)    \
+  CLAUSE_NO_CLASS(ACCC_##Name, Str)
+
+__CLAUSE_NO_CLASS(async)
+__CLAUSE_NO_CLASS(attach)
+__CLAUSE_NO_CLASS(auto)
+__CLAUSE_NO_CLASS(bind)
+__CLAUSE_NO_CLASS(capture)
+__CLAUSE_NO_CLASS(collapse)
+__CLAUSE_NO_CLASS(copy)
+__CLAUSE_NO_CLASS(copyin)
+__CLAUSE_NO_CLASS(copyout)
+__CLAUSE_NO_CLASS(create)
+__CLAUSE_NO_CLASS(default)
+__CLAUSE_NO_CLASS(default_async)
+__CLAUSE_NO_CLASS(delete)
+__CLAUSE_NO_CLASS(detach)
+__CLAUSE_NO_CLASS(device)
+__CLAUSE_NO_CLASS(device_num)
+__CLAUSE_NO_CLASS(deviceptr)
+__CLAUSE_NO_CLASS(device_resident)
+__CLAUSE_NO_CLASS(device_type)
+__CLAUSE_NO_CLASS(finalize)
+__CLAUSE_NO_CLASS(firstprivate)
+__CLAUSE_NO_CLASS(gang)
+__CLAUSE_NO_CLASS(host)
+__CLAUSE_NO_CLASS(if)
+__CLAUSE_NO_CLASS(if_present)
+__CLAUSE_NO_CLASS(independent)
+__CLAUSE_NO_CLASS(link)
+__CLAUSE_NO_CLASS(no_create)
+__CLAUSE_NO_CLASS(nohost)
+__CLAUSE_NO_CLASS(num_gangs)
+__CLAUSE_NO_CLASS(num_workers)
+__CLAUSE_NO_CLASS(present)
+__CLAUSE_NO_CLASS(private)
+__CLAUSE_NO_CLASS(read)
+__CLAUSE_NO_CLASS(reduction)
+__CLAUSE_NO_CLASS(self)
+__CLAUSE_NO_CLASS(seq)
+__CLAUSE_NO_CLASS(tile)
+__CLAUSE_NO_CLASS(unknown)
+__CLAUSE_NO_CLASS(use_device)
+__CLAUSE_NO_CLASS(vector)
+__CLAUSE_NO_CLASS(vector_length)
+__CLAUSE_NO_CLASS(wait)
+__CLAUSE_NO_CLASS(worker)
+__CLAUSE_NO_CLASS(write)
+
+#undef __IMPLICIT_CLAUSE_NO_CLASS
+#undef __IMPLICIT_CLAUSE_CLASS
+#undef __CLAUSE
+#undef CLAUSE_NO_CLASS
+#undef CLAUSE_CLASS
+#undef CLAUSE
+
+#endif // GEN_CLANG_CLAUSE_CLASS
+