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 }