Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/llvm/Frontend/OpenACC/ACC.td is written in an unsupported language. File is not indexed.

0001 //===-- ACC.td - OpenACC directive definition file ---------*- tablegen -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This is the definition file for OpenACC 3.3 directives and clauses.
0010 //
0011 //===----------------------------------------------------------------------===//
0012 
0013 include "llvm/Frontend/Directive/DirectiveBase.td"
0014 
0015 //===----------------------------------------------------------------------===//
0016 // Definition of general OpenACC information
0017 //===----------------------------------------------------------------------===//
0018 
0019 def OpenACC : DirectiveLanguage {
0020   let name = "OpenACC";
0021   let cppNamespace = "acc"; // final namespace will be llvm::acc
0022   let directivePrefix = "ACCD_";
0023   let clausePrefix = "ACCC_";
0024   let makeEnumAvailableInNamespace = true;
0025   let enableBitmaskEnumInNamespace = true;
0026   let clauseEnumSetClass = "AccClauseSet";
0027   let flangClauseBaseClass = "AccClause";
0028 }
0029 
0030 //===----------------------------------------------------------------------===//
0031 // Definition of OpenACC clauses
0032 //===----------------------------------------------------------------------===//
0033 
0034 // 2.16.1
0035 def ACCC_Async : Clause<"async"> {
0036   let flangClass = "ScalarIntExpr";
0037   let isValueOptional = true;
0038 }
0039 
0040 // 2.9.7
0041 def ACCC_Auto : Clause<"auto"> {}
0042 
0043 // 2.7.12
0044 def ACCC_Attach : Clause<"attach"> {
0045   let flangClass = "AccObjectList";
0046 }
0047 
0048 // 2.15.1
0049 def ACCC_Bind : Clause<"bind"> {
0050   let flangClass = "AccBindClause";
0051 }
0052 
0053 // 2.12
0054 def ACCC_Capture : Clause<"capture"> {
0055 }
0056 
0057 // 2.9.1
0058 def ACCC_Collapse : Clause<"collapse"> {
0059   let flangClass = "AccCollapseArg";
0060 }
0061 
0062 // 2.7.6
0063 def ACCC_Copy : Clause<"copy"> {
0064   let flangClass = "AccObjectList";
0065   let aliases = ["present_or_copy", "pcopy"];
0066 }
0067 
0068 // 2.7.7
0069 def ACCC_Copyin : Clause<"copyin"> {
0070   let flangClass = "AccObjectListWithModifier";
0071   let aliases = ["present_or_copyin", "pcopyin"];
0072 }
0073 
0074 // 2.7.8
0075 def ACCC_Copyout : Clause<"copyout"> {
0076   let flangClass = "AccObjectListWithModifier";
0077   let aliases = ["present_or_copyout", "pcopyout"];
0078 }
0079 
0080 // 2.7.9
0081 def ACCC_Create : Clause<"create"> {
0082   let flangClass = "AccObjectListWithModifier";
0083   let aliases = ["present_or_create", "pcreate"];
0084 }
0085 
0086 // 2.5.16
0087 def ACC_Default_none : ClauseVal<"none", 1, 1> { let isDefault = 1; }
0088 def ACC_Default_present : ClauseVal<"present", 0, 1> {}
0089 
0090 def ACCC_Default : Clause<"default"> {
0091   let flangClass = "AccDefaultClause";
0092   let enumClauseValue = "DefaultValue";
0093   let allowedClauseValues = [
0094     ACC_Default_present,
0095     ACC_Default_none
0096   ];
0097 }
0098 
0099 // 2.14.3
0100 def ACCC_DefaultAsync : Clause<"default_async"> {
0101   let flangClass = "ScalarIntExpr";
0102 }
0103 
0104 // 2.7.11
0105 def ACCC_Delete : Clause<"delete"> {
0106   let flangClass = "AccObjectList";
0107 }
0108 
0109 // 2.7.13
0110 def ACCC_Detach : Clause<"detach"> {
0111   let flangClass = "AccObjectList";
0112 }
0113 
0114 // 2.14.4
0115 def ACCC_Device : Clause<"device"> {
0116   let flangClass = "AccObjectList";
0117 }
0118 
0119 // 2.14.1 - 2.14.2
0120 def ACCC_DeviceNum : Clause<"device_num">  {
0121   let flangClass = "ScalarIntExpr";
0122 }
0123 
0124 // 2.7.4
0125 def ACCC_DevicePtr : Clause<"deviceptr"> {
0126   let flangClass = "AccObjectList";
0127 }
0128 
0129 // 2.13.1
0130 def ACCC_DeviceResident : Clause<"device_resident"> {
0131   let flangClass = "AccObjectList";
0132 }
0133 
0134 // 2.4
0135 def ACCC_DeviceType : Clause<"device_type"> {
0136   let flangClass = "AccDeviceTypeExprList";
0137   let defaultValue = "*";
0138   let aliases = ["dtype"];
0139 }
0140 
0141 // 2.6.6
0142 def ACCC_Finalize : Clause<"finalize"> {}
0143 
0144 // 2.5.14
0145 def ACCC_FirstPrivate : Clause<"firstprivate"> {
0146   let flangClass = "AccObjectList";
0147 }
0148 
0149 // 2.9.2
0150 def ACCC_Gang : Clause<"gang"> {
0151   let flangClass = "AccGangArgList";
0152   let isValueOptional = true;
0153 }
0154 
0155 // 2.14.4
0156 def ACCC_Host : Clause<"host"> {
0157   let flangClass = "AccObjectList";
0158 }
0159 
0160 // 2.5.6
0161 def ACCC_If : Clause <"if"> {
0162   let flangClass = "ScalarExpr";
0163 }
0164 
0165 // 2.14.4
0166 def ACCC_IfPresent : Clause<"if_present"> {}
0167 
0168 // 2.9.6
0169 def ACCC_Independent : Clause<"independent"> {}
0170 
0171 // 2.13.3
0172 def ACCC_Link : Clause<"link"> {
0173   let flangClass = "AccObjectList";
0174 }
0175 
0176 // 2.7.10
0177 def ACCC_NoCreate : Clause<"no_create"> {
0178   let flangClass = "AccObjectList";
0179 }
0180 
0181 // 2.15.1
0182 def ACCC_NoHost : Clause<"nohost"> {}
0183 
0184 // 2.5.10
0185 def ACCC_NumGangs : Clause<"num_gangs"> {
0186   let flangClass = "ScalarIntExpr";
0187   let isValueList = 1;
0188 }
0189 
0190 // 2.5.11
0191 def ACCC_NumWorkers : Clause<"num_workers"> {
0192   let flangClass = "ScalarIntExpr";
0193 }
0194 
0195 // 2.7.5
0196 def ACCC_Present : Clause<"present"> {
0197   let flangClass = "AccObjectList";
0198 }
0199 
0200 // 2.5.13
0201 def ACCC_Private : Clause<"private"> {
0202   let flangClass = "AccObjectList";
0203 }
0204 
0205 // 2.9.8
0206 def ACCC_Tile : Clause <"tile"> {
0207   let flangClass = "AccTileExprList";
0208 }
0209 
0210 // 2.8.1
0211 def ACCC_UseDevice : Clause <"use_device"> {
0212   let flangClass = "AccObjectList";
0213 }
0214 
0215 // 2.12
0216 def ACCC_Read : Clause<"read"> {}
0217 
0218 // 2.5.15
0219 def ACCC_Reduction : Clause<"reduction"> {
0220   let flangClass = "AccObjectListWithReduction";
0221 }
0222 
0223 // 2.5.7
0224 def ACCC_Self : Clause<"self"> {
0225   let flangClass = "AccSelfClause";
0226   let isValueOptional = true;
0227 }
0228 
0229 // 2.9.5
0230 def ACCC_Seq : Clause<"seq"> {}
0231 
0232 // Non-standard extension
0233 def ACCC_ShortLoop : Clause<"shortloop"> {}
0234 
0235 // 2.9.4
0236 def ACCC_Vector : Clause<"vector"> {
0237   let flangClass = "ScalarIntExpr";
0238   let isValueOptional = true;
0239   let prefix = "length";
0240 }
0241 
0242 // 2.5.12
0243 def ACCC_VectorLength : Clause<"vector_length"> {
0244   let flangClass = "ScalarIntExpr";
0245 }
0246 
0247 // 2.16.2
0248 def ACCC_Wait : Clause<"wait"> {
0249   let flangClass = "AccWaitArgument";
0250   let isValueOptional = true;
0251 }
0252 
0253 // 2.9.3
0254 def ACCC_Worker: Clause<"worker"> {
0255   let flangClass = "ScalarIntExpr";
0256   let isValueOptional = true;
0257   let prefix = "num";
0258 }
0259 
0260 // 2.12
0261 def ACCC_Write : Clause<"write"> {}
0262 
0263 def ACCC_Unknown : Clause<"unknown"> {
0264   let isDefault = true;
0265 }
0266 
0267 //===----------------------------------------------------------------------===//
0268 // Definition of OpenACC directives
0269 //===----------------------------------------------------------------------===//
0270 
0271 // 2.12
0272 def ACC_Atomic : Directive<"atomic"> {
0273   let association = AS_Block;
0274   let category = CA_Executable;
0275 }
0276 
0277 // 2.6.5
0278 def ACC_Data : Directive<"data"> {
0279   let allowedOnceClauses = [
0280     VersionedClause<ACCC_Async, 32>,
0281     VersionedClause<ACCC_If>,
0282     VersionedClause<ACCC_Default>
0283   ];
0284   let allowedClauses = [
0285     VersionedClause<ACCC_DeviceType, 32>,
0286     VersionedClause<ACCC_Wait, 32>
0287   ];
0288   let requiredClauses = [
0289     VersionedClause<ACCC_Attach>,
0290     VersionedClause<ACCC_Copy>,
0291     VersionedClause<ACCC_Copyin>,
0292     VersionedClause<ACCC_Copyout>,
0293     VersionedClause<ACCC_Create>,
0294     VersionedClause<ACCC_Default>,
0295     VersionedClause<ACCC_DevicePtr>,
0296     VersionedClause<ACCC_NoCreate>,
0297     VersionedClause<ACCC_Present>
0298   ];
0299   let association = AS_Block;
0300   let category = CA_Executable;
0301 }
0302 
0303 // 2.13
0304 def ACC_Declare : Directive<"declare"> {
0305   let allowedClauses = [
0306     VersionedClause<ACCC_Copy>,
0307     VersionedClause<ACCC_Copyin>,
0308     VersionedClause<ACCC_Copyout>,
0309     VersionedClause<ACCC_Create>,
0310     VersionedClause<ACCC_Present>,
0311     VersionedClause<ACCC_DevicePtr>,
0312     VersionedClause<ACCC_DeviceResident>,
0313     VersionedClause<ACCC_Link>
0314   ];
0315   let association = AS_None;
0316   let category = CA_Declarative;
0317 }
0318 
0319 // 2.5.3
0320 def ACC_Kernels : Directive<"kernels"> {
0321   let allowedClauses = [
0322     VersionedClause<ACCC_Attach>,
0323     VersionedClause<ACCC_Copy>,
0324     VersionedClause<ACCC_Copyin>,
0325     VersionedClause<ACCC_Copyout>,
0326     VersionedClause<ACCC_Create>,
0327     VersionedClause<ACCC_DeviceType>,
0328     VersionedClause<ACCC_NoCreate>,
0329     VersionedClause<ACCC_Present>,
0330     VersionedClause<ACCC_DevicePtr>,
0331     VersionedClause<ACCC_Wait>
0332   ];
0333   let allowedOnceClauses = [
0334     VersionedClause<ACCC_Async>,
0335     VersionedClause<ACCC_Default>,
0336     VersionedClause<ACCC_If>,
0337     VersionedClause<ACCC_NumGangs>,
0338     VersionedClause<ACCC_NumWorkers>,
0339     VersionedClause<ACCC_Self>,
0340     VersionedClause<ACCC_VectorLength>
0341   ];
0342   let association = AS_Block;
0343   let category = CA_Executable;
0344 }
0345 
0346 // 2.5.1
0347 def ACC_Parallel : Directive<"parallel"> {
0348   let allowedClauses = [
0349     VersionedClause<ACCC_Attach>,
0350     VersionedClause<ACCC_Async>,
0351     VersionedClause<ACCC_Copy>,
0352     VersionedClause<ACCC_Copyin>,
0353     VersionedClause<ACCC_Copyout>,
0354     VersionedClause<ACCC_Create>,
0355     VersionedClause<ACCC_DevicePtr>,
0356     VersionedClause<ACCC_DeviceType>,
0357     VersionedClause<ACCC_NoCreate>,
0358     VersionedClause<ACCC_NumGangs>,
0359     VersionedClause<ACCC_NumWorkers>,
0360     VersionedClause<ACCC_Present>,
0361     VersionedClause<ACCC_Private>,
0362     VersionedClause<ACCC_FirstPrivate>,
0363     VersionedClause<ACCC_Reduction>,
0364     VersionedClause<ACCC_Wait>,
0365     VersionedClause<ACCC_VectorLength>
0366   ];
0367   let allowedOnceClauses = [
0368     VersionedClause<ACCC_Default>,
0369     VersionedClause<ACCC_If>,
0370     VersionedClause<ACCC_Self>
0371   ];
0372   let association = AS_Block;
0373   let category = CA_Executable;
0374 }
0375 
0376 // 2.5.2
0377 def ACC_Serial : Directive<"serial"> {
0378   // Spec line 950-951: clause is as for the parallel construct except that the
0379   // num_gangs, num_workers, and vector_length clauses are not permitted.
0380   let allowedClauses = [
0381     VersionedClause<ACCC_Attach>,
0382     VersionedClause<ACCC_Copy>,
0383     VersionedClause<ACCC_Copyin>,
0384     VersionedClause<ACCC_Copyout>,
0385     VersionedClause<ACCC_Create>,
0386     VersionedClause<ACCC_DevicePtr>,
0387     VersionedClause<ACCC_DeviceType>,
0388     VersionedClause<ACCC_NoCreate>,
0389     VersionedClause<ACCC_Present>,
0390     VersionedClause<ACCC_Private>,
0391     VersionedClause<ACCC_FirstPrivate>,
0392     VersionedClause<ACCC_Reduction>,
0393     VersionedClause<ACCC_Wait>
0394   ];
0395   let allowedOnceClauses = [
0396     VersionedClause<ACCC_Async>,
0397     VersionedClause<ACCC_Default>,
0398     VersionedClause<ACCC_If>,
0399     VersionedClause<ACCC_Self>
0400   ];
0401   let association = AS_Block;
0402   let category = CA_Executable;
0403 }
0404 
0405 // 2.9
0406 def ACC_Loop : Directive<"loop"> {
0407   let allowedClauses = [
0408     VersionedClause<ACCC_DeviceType>,
0409     VersionedClause<ACCC_Private>,
0410     VersionedClause<ACCC_Reduction>,
0411     VersionedClause<ACCC_Collapse>,
0412     VersionedClause<ACCC_Gang>,
0413     VersionedClause<ACCC_ShortLoop>,
0414     VersionedClause<ACCC_Tile>,
0415     VersionedClause<ACCC_Vector>,
0416     VersionedClause<ACCC_Worker>
0417   ];
0418   let allowedExclusiveClauses = [
0419     VersionedClause<ACCC_Auto>,
0420     VersionedClause<ACCC_Independent>,
0421     VersionedClause<ACCC_Seq>
0422   ];
0423   let association = AS_Loop;
0424   let category = CA_Executable;
0425 }
0426 
0427 // 2.10
0428 def ACC_Cache : Directive<"cache"> {
0429   let association = AS_None;
0430   let category = CA_Executable;
0431 }
0432 
0433 // 2.14.1
0434 def ACC_Init : Directive<"init"> {
0435   let allowedOnceClauses = [
0436     VersionedClause<ACCC_DeviceNum>,
0437     VersionedClause<ACCC_DeviceType>,
0438     VersionedClause<ACCC_If>
0439   ];
0440   let association = AS_None;
0441   let category = CA_Executable;
0442 }
0443 
0444 // 2.15.1
0445 def ACC_Routine : Directive<"routine"> {
0446   let allowedClauses = [
0447     VersionedClause<ACCC_Bind>,
0448     VersionedClause<ACCC_DeviceType>,
0449     VersionedClause<ACCC_Gang>,
0450     VersionedClause<ACCC_Seq>,
0451     VersionedClause<ACCC_Vector>,
0452     VersionedClause<ACCC_Worker>
0453   ];
0454   let allowedOnceClauses = [
0455     VersionedClause<ACCC_NoHost>
0456   ];
0457   let association = AS_Declaration;
0458   let category = CA_Declarative;
0459 }
0460 
0461 // 2.14.3
0462 def ACC_Set : Directive<"set"> {
0463   let allowedOnceClauses = [
0464     VersionedClause<ACCC_DefaultAsync>,
0465     VersionedClause<ACCC_DeviceNum>,
0466     VersionedClause<ACCC_DeviceType>,
0467     VersionedClause<ACCC_If>
0468   ];
0469   let requiredClauses = [
0470     // The three following clauses are also in allowedOnceClauses list due to
0471     // restriction 2255 - Two instances of the same clause may not appear on the
0472     // same directive.
0473     VersionedClause<ACCC_DefaultAsync>,
0474     VersionedClause<ACCC_DeviceNum>,
0475     VersionedClause<ACCC_DeviceType>
0476   ];
0477   let association = AS_None;
0478   let category = CA_Executable;
0479 }
0480 
0481 // 2.14.2
0482 def ACC_Shutdown : Directive<"shutdown"> {
0483   let allowedOnceClauses = [
0484     VersionedClause<ACCC_DeviceNum>,
0485     VersionedClause<ACCC_DeviceType>,
0486     VersionedClause<ACCC_If>
0487   ];
0488   let association = AS_None;
0489   let category = CA_Executable;
0490 }
0491 
0492 // 2.14.4
0493 def ACC_Update : Directive<"update"> {
0494   let allowedClauses = [
0495     VersionedClause<ACCC_DeviceType>,
0496     VersionedClause<ACCC_Wait>
0497   ];
0498   let allowedOnceClauses = [
0499     VersionedClause<ACCC_Async>,
0500     VersionedClause<ACCC_If>,
0501     VersionedClause<ACCC_IfPresent>
0502   ];
0503   let requiredClauses = [
0504     VersionedClause<ACCC_Device>,
0505     VersionedClause<ACCC_Host>,
0506     VersionedClause<ACCC_Self>
0507   ];
0508   let association = AS_None;
0509   let category = CA_Executable;
0510 }
0511 
0512 // 2.16.3
0513 def ACC_Wait : Directive<"wait"> {
0514   let allowedOnceClauses = [
0515     VersionedClause<ACCC_Async>,
0516     VersionedClause<ACCC_If>
0517   ];
0518   let association = AS_None;
0519   let category = CA_Executable;
0520 }
0521 
0522 // 2.14.6
0523 def ACC_EnterData : Directive<"enter data"> {
0524   let allowedClauses = [
0525     VersionedClause<ACCC_Wait>
0526   ];
0527   let allowedOnceClauses = [
0528     VersionedClause<ACCC_Async>,
0529     VersionedClause<ACCC_If>
0530   ];
0531   let requiredClauses = [
0532     VersionedClause<ACCC_Attach>,
0533     VersionedClause<ACCC_Create>,
0534     VersionedClause<ACCC_Copyin>
0535   ];
0536   let association = AS_None;
0537   let category = CA_Executable;
0538 }
0539 
0540 // 2.14.7
0541 def ACC_ExitData : Directive<"exit data"> {
0542   let allowedClauses = [
0543     VersionedClause<ACCC_Wait>
0544   ];
0545   let allowedOnceClauses = [
0546     VersionedClause<ACCC_Async>,
0547     VersionedClause<ACCC_If>,
0548     VersionedClause<ACCC_Finalize>
0549   ];
0550   let requiredClauses = [
0551     VersionedClause<ACCC_Copyout>,
0552     VersionedClause<ACCC_Delete>,
0553     VersionedClause<ACCC_Detach>
0554   ];
0555   let association = AS_None;
0556   let category = CA_Executable;
0557 }
0558 
0559 // 2.8
0560 def ACC_HostData : Directive<"host_data"> {
0561   let allowedOnceClauses = [
0562     VersionedClause<ACCC_If>,
0563     VersionedClause<ACCC_IfPresent>
0564   ];
0565   let requiredClauses = [
0566     VersionedClause<ACCC_UseDevice>
0567   ];
0568   let association = AS_Block;
0569   let category = CA_Executable;
0570 }
0571 
0572 // 2.11
0573 def ACC_KernelsLoop : Directive<"kernels loop"> {
0574   let allowedClauses = [
0575     VersionedClause<ACCC_Attach>,
0576     VersionedClause<ACCC_Collapse>,
0577     VersionedClause<ACCC_Copy>,
0578     VersionedClause<ACCC_Copyin>,
0579     VersionedClause<ACCC_Copyout>,
0580     VersionedClause<ACCC_Create>,
0581     VersionedClause<ACCC_DevicePtr>,
0582     VersionedClause<ACCC_DeviceType>,
0583     VersionedClause<ACCC_Gang>,
0584     VersionedClause<ACCC_NoCreate>,
0585     VersionedClause<ACCC_NumGangs>,
0586     VersionedClause<ACCC_NumWorkers>,
0587     VersionedClause<ACCC_Present>,
0588     VersionedClause<ACCC_Private>,
0589     VersionedClause<ACCC_Reduction>,
0590     VersionedClause<ACCC_ShortLoop>,
0591     VersionedClause<ACCC_Tile>,
0592     VersionedClause<ACCC_Vector>,
0593     VersionedClause<ACCC_VectorLength>,
0594     VersionedClause<ACCC_Wait>,
0595     VersionedClause<ACCC_Worker>
0596   ];
0597   let allowedOnceClauses = [
0598     VersionedClause<ACCC_Async>,
0599     VersionedClause<ACCC_Default>,
0600     VersionedClause<ACCC_If>,
0601     VersionedClause<ACCC_Self>
0602   ];
0603   let allowedExclusiveClauses = [
0604     VersionedClause<ACCC_Auto>,
0605     VersionedClause<ACCC_Independent>,
0606     VersionedClause<ACCC_Seq>
0607   ];
0608   let leafConstructs = [ACC_Kernels, ACC_Loop];
0609   let category = CA_Executable;
0610 }
0611 
0612 // 2.11
0613 def ACC_ParallelLoop : Directive<"parallel loop"> {
0614   let allowedClauses = [
0615     VersionedClause<ACCC_Attach>,
0616     VersionedClause<ACCC_Collapse>,
0617     VersionedClause<ACCC_Copy>,
0618     VersionedClause<ACCC_Copyin>,
0619     VersionedClause<ACCC_Copyout>,
0620     VersionedClause<ACCC_Create>,
0621     VersionedClause<ACCC_DevicePtr>,
0622     VersionedClause<ACCC_DeviceType>,
0623     VersionedClause<ACCC_FirstPrivate>,
0624     VersionedClause<ACCC_Gang>,
0625     VersionedClause<ACCC_NoCreate>,
0626     VersionedClause<ACCC_NumGangs>,
0627     VersionedClause<ACCC_NumWorkers>,
0628     VersionedClause<ACCC_Present>,
0629     VersionedClause<ACCC_Private>,
0630     VersionedClause<ACCC_Reduction>,
0631     VersionedClause<ACCC_ShortLoop>,
0632     VersionedClause<ACCC_Tile>,
0633     VersionedClause<ACCC_Vector>,
0634     VersionedClause<ACCC_VectorLength>,
0635     VersionedClause<ACCC_Wait>,
0636     VersionedClause<ACCC_Worker>
0637   ];
0638   let allowedOnceClauses = [
0639     VersionedClause<ACCC_Async>,
0640     VersionedClause<ACCC_Default>,
0641     VersionedClause<ACCC_If>,
0642     VersionedClause<ACCC_Self>
0643   ];
0644   let allowedExclusiveClauses = [
0645     VersionedClause<ACCC_Auto>,
0646     VersionedClause<ACCC_Independent>,
0647     VersionedClause<ACCC_Seq>
0648   ];
0649   let leafConstructs = [ACC_Parallel, ACC_Loop];
0650   let category = CA_Executable;
0651 }
0652 
0653 // 2.11
0654 def ACC_SerialLoop : Directive<"serial loop"> {
0655   let allowedClauses = [
0656     VersionedClause<ACCC_Attach>,
0657     VersionedClause<ACCC_Collapse>,
0658     VersionedClause<ACCC_Copy>,
0659     VersionedClause<ACCC_Copyin>,
0660     VersionedClause<ACCC_Copyout>,
0661     VersionedClause<ACCC_Create>,
0662     VersionedClause<ACCC_DevicePtr>,
0663     VersionedClause<ACCC_DeviceType>,
0664     VersionedClause<ACCC_FirstPrivate>,
0665     VersionedClause<ACCC_Gang>,
0666     VersionedClause<ACCC_NoCreate>,
0667     VersionedClause<ACCC_Present>,
0668     VersionedClause<ACCC_Private>,
0669     VersionedClause<ACCC_Reduction>,
0670     VersionedClause<ACCC_ShortLoop>,
0671     VersionedClause<ACCC_Tile>,
0672     VersionedClause<ACCC_Vector>,
0673     VersionedClause<ACCC_Wait>,
0674     VersionedClause<ACCC_Worker>
0675   ];
0676   let allowedOnceClauses = [
0677     VersionedClause<ACCC_Async>,
0678     VersionedClause<ACCC_Default>,
0679     VersionedClause<ACCC_If>,
0680     VersionedClause<ACCC_Self>
0681   ];
0682   let allowedExclusiveClauses = [
0683     VersionedClause<ACCC_Auto>,
0684     VersionedClause<ACCC_Independent>,
0685     VersionedClause<ACCC_Seq>
0686   ];
0687   let leafConstructs = [ACC_Serial, ACC_Loop];
0688   let category = CA_Executable;
0689 }
0690 
0691 def ACC_Unknown : Directive<"unknown"> {
0692   let isDefault = true;
0693   let association = AS_None;
0694   let category = CA_Utility;
0695 }