xref: /llvm-project/llvm/include/llvm/Frontend/OpenACC/ACC.td (revision 8ca6401fdd36c17a8d68a8fb06b7d43c2540a027)
10a90ffa7SValentin Clement//===-- ACC.td - OpenACC directive definition file ---------*- tablegen -*-===//
20a90ffa7SValentin Clement//
30a90ffa7SValentin Clement// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40a90ffa7SValentin Clement// See https://llvm.org/LICENSE.txt for license information.
50a90ffa7SValentin Clement// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60a90ffa7SValentin Clement//
70a90ffa7SValentin Clement//===----------------------------------------------------------------------===//
80a90ffa7SValentin Clement//
90d6017cdSValentin Clement// This is the definition file for OpenACC 3.3 directives and clauses.
100a90ffa7SValentin Clement//
110a90ffa7SValentin Clement//===----------------------------------------------------------------------===//
120a90ffa7SValentin Clement
130a90ffa7SValentin Clementinclude "llvm/Frontend/Directive/DirectiveBase.td"
140a90ffa7SValentin Clement
150a90ffa7SValentin Clement//===----------------------------------------------------------------------===//
160a90ffa7SValentin Clement// Definition of general OpenACC information
170a90ffa7SValentin Clement//===----------------------------------------------------------------------===//
180a90ffa7SValentin Clement
190a90ffa7SValentin Clementdef OpenACC : DirectiveLanguage {
200a90ffa7SValentin Clement  let name = "OpenACC";
210a90ffa7SValentin Clement  let cppNamespace = "acc"; // final namespace will be llvm::acc
220a90ffa7SValentin Clement  let directivePrefix = "ACCD_";
230a90ffa7SValentin Clement  let clausePrefix = "ACCC_";
24c044709bSPaul C. Anagnostopoulos  let makeEnumAvailableInNamespace = true;
25c044709bSPaul C. Anagnostopoulos  let enableBitmaskEnumInNamespace = true;
260a90ffa7SValentin Clement  let clauseEnumSetClass = "AccClauseSet";
2716c1d251SValentin Clement  let flangClauseBaseClass = "AccClause";
280a90ffa7SValentin Clement}
290a90ffa7SValentin Clement
300a90ffa7SValentin Clement//===----------------------------------------------------------------------===//
310a90ffa7SValentin Clement// Definition of OpenACC clauses
320a90ffa7SValentin Clement//===----------------------------------------------------------------------===//
330a90ffa7SValentin Clement
3416c1d251SValentin Clement// 2.16.1
3516c1d251SValentin Clementdef ACCC_Async : Clause<"async"> {
366bd0a445SValentin Clement  let flangClass = "ScalarIntExpr";
37c044709bSPaul C. Anagnostopoulos  let isValueOptional = true;
3816c1d251SValentin Clement}
3916c1d251SValentin Clement
40d553243fSValentin Clement// 2.9.7
410a90ffa7SValentin Clementdef ACCC_Auto : Clause<"auto"> {}
420a90ffa7SValentin Clement
43d553243fSValentin Clement// 2.7.12
440a90ffa7SValentin Clementdef ACCC_Attach : Clause<"attach"> {
456bd0a445SValentin Clement  let flangClass = "AccObjectList";
460a90ffa7SValentin Clement}
470a90ffa7SValentin Clement
480a90ffa7SValentin Clement// 2.15.1
490a90ffa7SValentin Clementdef ACCC_Bind : Clause<"bind"> {
506bd0a445SValentin Clement  let flangClass = "AccBindClause";
510a90ffa7SValentin Clement}
520a90ffa7SValentin Clement
530a90ffa7SValentin Clement// 2.12
540a90ffa7SValentin Clementdef ACCC_Capture : Clause<"capture"> {
550a90ffa7SValentin Clement}
560a90ffa7SValentin Clement
570a90ffa7SValentin Clement// 2.9.1
580a90ffa7SValentin Clementdef ACCC_Collapse : Clause<"collapse"> {
59ae86fe85SValentin Clement  let flangClass = "AccCollapseArg";
600a90ffa7SValentin Clement}
610a90ffa7SValentin Clement
62d553243fSValentin Clement// 2.7.6
630a90ffa7SValentin Clementdef ACCC_Copy : Clause<"copy"> {
646bd0a445SValentin Clement  let flangClass = "AccObjectList";
65048aaab1SValentin Clement  let aliases = ["present_or_copy", "pcopy"];
660a90ffa7SValentin Clement}
670d6017cdSValentin Clement
68d553243fSValentin Clement// 2.7.7
690a90ffa7SValentin Clementdef ACCC_Copyin : Clause<"copyin"> {
706bd0a445SValentin Clement  let flangClass = "AccObjectListWithModifier";
71048aaab1SValentin Clement  let aliases = ["present_or_copyin", "pcopyin"];
720a90ffa7SValentin Clement}
730a90ffa7SValentin Clement
74d553243fSValentin Clement// 2.7.8
750a90ffa7SValentin Clementdef ACCC_Copyout : Clause<"copyout"> {
766bd0a445SValentin Clement  let flangClass = "AccObjectListWithModifier";
77048aaab1SValentin Clement  let aliases = ["present_or_copyout", "pcopyout"];
780a90ffa7SValentin Clement}
790a90ffa7SValentin Clement
80d553243fSValentin Clement// 2.7.9
810a90ffa7SValentin Clementdef ACCC_Create : Clause<"create"> {
826bd0a445SValentin Clement  let flangClass = "AccObjectListWithModifier";
83048aaab1SValentin Clement  let aliases = ["present_or_create", "pcreate"];
840a90ffa7SValentin Clement}
850a90ffa7SValentin Clement
860d6017cdSValentin Clement// 2.5.16
870bd9a136SValentin Clementdef ACC_Default_none : ClauseVal<"none", 1, 1> { let isDefault = 1; }
880bd9a136SValentin Clementdef ACC_Default_present : ClauseVal<"present", 0, 1> {}
898f933a4eSValentin Clement
900a90ffa7SValentin Clementdef ACCC_Default : Clause<"default"> {
916bd0a445SValentin Clement  let flangClass = "AccDefaultClause";
928f933a4eSValentin Clement  let enumClauseValue = "DefaultValue";
938f933a4eSValentin Clement  let allowedClauseValues = [
948f933a4eSValentin Clement    ACC_Default_present,
958f933a4eSValentin Clement    ACC_Default_none
968f933a4eSValentin Clement  ];
970a90ffa7SValentin Clement}
980a90ffa7SValentin Clement
99d553243fSValentin Clement// 2.14.3
1000a90ffa7SValentin Clementdef ACCC_DefaultAsync : Clause<"default_async"> {
1016bd0a445SValentin Clement  let flangClass = "ScalarIntExpr";
1020a90ffa7SValentin Clement}
1030a90ffa7SValentin Clement
104d553243fSValentin Clement// 2.7.11
1050a90ffa7SValentin Clementdef ACCC_Delete : Clause<"delete"> {
1066bd0a445SValentin Clement  let flangClass = "AccObjectList";
1070a90ffa7SValentin Clement}
1080a90ffa7SValentin Clement
109d553243fSValentin Clement// 2.7.13
1100a90ffa7SValentin Clementdef ACCC_Detach : Clause<"detach"> {
1116bd0a445SValentin Clement  let flangClass = "AccObjectList";
1120a90ffa7SValentin Clement}
1130a90ffa7SValentin Clement
1140a90ffa7SValentin Clement// 2.14.4
1150a90ffa7SValentin Clementdef ACCC_Device : Clause<"device"> {
1166bd0a445SValentin Clement  let flangClass = "AccObjectList";
1170a90ffa7SValentin Clement}
1180a90ffa7SValentin Clement
119d553243fSValentin Clement// 2.14.1 - 2.14.2
1209aa3dca8SValentin Clementdef ACCC_DeviceNum : Clause<"device_num">  {
1216bd0a445SValentin Clement  let flangClass = "ScalarIntExpr";
1220a90ffa7SValentin Clement}
1230a90ffa7SValentin Clement
124d553243fSValentin Clement// 2.7.4
1250a90ffa7SValentin Clementdef ACCC_DevicePtr : Clause<"deviceptr"> {
1266bd0a445SValentin Clement  let flangClass = "AccObjectList";
1270a90ffa7SValentin Clement}
1280a90ffa7SValentin Clement
129d553243fSValentin Clement// 2.13.1
1300a90ffa7SValentin Clementdef ACCC_DeviceResident : Clause<"device_resident"> {
1316bd0a445SValentin Clement  let flangClass = "AccObjectList";
1320a90ffa7SValentin Clement}
1330a90ffa7SValentin Clement
1340a90ffa7SValentin Clement// 2.4
1350a90ffa7SValentin Clementdef ACCC_DeviceType : Clause<"device_type"> {
136015834e4SValentin Clement  let flangClass = "AccDeviceTypeExprList";
1373060894bSValentin Clement  let defaultValue = "*";
138048aaab1SValentin Clement  let aliases = ["dtype"];
1390a90ffa7SValentin Clement}
1400a90ffa7SValentin Clement
1410a90ffa7SValentin Clement// 2.6.6
1420a90ffa7SValentin Clementdef ACCC_Finalize : Clause<"finalize"> {}
1430a90ffa7SValentin Clement
1440d6017cdSValentin Clement// 2.5.14
1450a90ffa7SValentin Clementdef ACCC_FirstPrivate : Clause<"firstprivate"> {
1466bd0a445SValentin Clement  let flangClass = "AccObjectList";
1470a90ffa7SValentin Clement}
1480a90ffa7SValentin Clement
1490a90ffa7SValentin Clement// 2.9.2
1500a90ffa7SValentin Clementdef ACCC_Gang : Clause<"gang"> {
1515923e46fSValentin Clement  let flangClass = "AccGangArgList";
152c044709bSPaul C. Anagnostopoulos  let isValueOptional = true;
1530a90ffa7SValentin Clement}
1540a90ffa7SValentin Clement
1550a90ffa7SValentin Clement// 2.14.4
1560a90ffa7SValentin Clementdef ACCC_Host : Clause<"host"> {
1576bd0a445SValentin Clement  let flangClass = "AccObjectList";
1580a90ffa7SValentin Clement}
1590a90ffa7SValentin Clement
1600d6017cdSValentin Clement// 2.5.6
1610a90ffa7SValentin Clementdef ACCC_If : Clause <"if"> {
162cf670d5eSValentin Clement (バレンタイン クレメン)  let flangClass = "ScalarExpr";
1630a90ffa7SValentin Clement}
1640a90ffa7SValentin Clement
1650a90ffa7SValentin Clement// 2.14.4
1660a90ffa7SValentin Clementdef ACCC_IfPresent : Clause<"if_present"> {}
1670a90ffa7SValentin Clement
168d553243fSValentin Clement// 2.9.6
1690a90ffa7SValentin Clementdef ACCC_Independent : Clause<"independent"> {}
1700a90ffa7SValentin Clement
171d553243fSValentin Clement// 2.13.3
1720a90ffa7SValentin Clementdef ACCC_Link : Clause<"link"> {
1736bd0a445SValentin Clement  let flangClass = "AccObjectList";
1740a90ffa7SValentin Clement}
1750a90ffa7SValentin Clement
176d553243fSValentin Clement// 2.7.10
1770a90ffa7SValentin Clementdef ACCC_NoCreate : Clause<"no_create"> {
1786bd0a445SValentin Clement  let flangClass = "AccObjectList";
1790a90ffa7SValentin Clement}
1800a90ffa7SValentin Clement
1810a90ffa7SValentin Clement// 2.15.1
1820a90ffa7SValentin Clementdef ACCC_NoHost : Clause<"nohost"> {}
1830a90ffa7SValentin Clement
1840d6017cdSValentin Clement// 2.5.10
1850a90ffa7SValentin Clementdef ACCC_NumGangs : Clause<"num_gangs"> {
1866bd0a445SValentin Clement  let flangClass = "ScalarIntExpr";
187c88f3e20SValentin Clement  let isValueList = 1;
1880a90ffa7SValentin Clement}
1890a90ffa7SValentin Clement
1900d6017cdSValentin Clement// 2.5.11
1910a90ffa7SValentin Clementdef ACCC_NumWorkers : Clause<"num_workers"> {
1926bd0a445SValentin Clement  let flangClass = "ScalarIntExpr";
1930a90ffa7SValentin Clement}
1940a90ffa7SValentin Clement
195d553243fSValentin Clement// 2.7.5
1960a90ffa7SValentin Clementdef ACCC_Present : Clause<"present"> {
1976bd0a445SValentin Clement  let flangClass = "AccObjectList";
1980a90ffa7SValentin Clement}
1990a90ffa7SValentin Clement
2000d6017cdSValentin Clement// 2.5.13
2010a90ffa7SValentin Clementdef ACCC_Private : Clause<"private"> {
2026bd0a445SValentin Clement  let flangClass = "AccObjectList";
2030a90ffa7SValentin Clement}
2040a90ffa7SValentin Clement
205d553243fSValentin Clement// 2.9.8
2060a90ffa7SValentin Clementdef ACCC_Tile : Clause <"tile"> {
2076bd0a445SValentin Clement  let flangClass = "AccTileExprList";
2080a90ffa7SValentin Clement}
2090a90ffa7SValentin Clement
2100a90ffa7SValentin Clement// 2.8.1
2110a90ffa7SValentin Clementdef ACCC_UseDevice : Clause <"use_device"> {
2126bd0a445SValentin Clement  let flangClass = "AccObjectList";
2130a90ffa7SValentin Clement}
2140a90ffa7SValentin Clement
2150a90ffa7SValentin Clement// 2.12
2160a90ffa7SValentin Clementdef ACCC_Read : Clause<"read"> {}
2170a90ffa7SValentin Clement
2180d6017cdSValentin Clement// 2.5.15
2190a90ffa7SValentin Clementdef ACCC_Reduction : Clause<"reduction"> {
2206bd0a445SValentin Clement  let flangClass = "AccObjectListWithReduction";
2210a90ffa7SValentin Clement}
2220a90ffa7SValentin Clement
2230d6017cdSValentin Clement// 2.5.7
2240a90ffa7SValentin Clementdef ACCC_Self : Clause<"self"> {
2256bd0a445SValentin Clement  let flangClass = "AccSelfClause";
22636e24da8SValentin Clement  let isValueOptional = true;
2270a90ffa7SValentin Clement}
2280a90ffa7SValentin Clement
2290a90ffa7SValentin Clement// 2.9.5
2300a90ffa7SValentin Clementdef ACCC_Seq : Clause<"seq"> {}
2310a90ffa7SValentin Clement
232*8ca6401fSjeanPerier// Non-standard extension
233*8ca6401fSjeanPerierdef ACCC_ShortLoop : Clause<"shortloop"> {}
234*8ca6401fSjeanPerier
2350a90ffa7SValentin Clement// 2.9.4
2360a90ffa7SValentin Clementdef ACCC_Vector : Clause<"vector"> {
2376bd0a445SValentin Clement  let flangClass = "ScalarIntExpr";
238c044709bSPaul C. Anagnostopoulos  let isValueOptional = true;
239048aaab1SValentin Clement  let prefix = "length";
2400a90ffa7SValentin Clement}
2410a90ffa7SValentin Clement
2420d6017cdSValentin Clement// 2.5.12
2430a90ffa7SValentin Clementdef ACCC_VectorLength : Clause<"vector_length"> {
2446bd0a445SValentin Clement  let flangClass = "ScalarIntExpr";
2450a90ffa7SValentin Clement}
2460a90ffa7SValentin Clement
2470a90ffa7SValentin Clement// 2.16.2
2480a90ffa7SValentin Clementdef ACCC_Wait : Clause<"wait"> {
2496bd0a445SValentin Clement  let flangClass = "AccWaitArgument";
250c044709bSPaul C. Anagnostopoulos  let isValueOptional = true;
2510a90ffa7SValentin Clement}
2520a90ffa7SValentin Clement
2530a90ffa7SValentin Clement// 2.9.3
2540a90ffa7SValentin Clementdef ACCC_Worker: Clause<"worker"> {
2556bd0a445SValentin Clement  let flangClass = "ScalarIntExpr";
256c044709bSPaul C. Anagnostopoulos  let isValueOptional = true;
257048aaab1SValentin Clement  let prefix = "num";
2580a90ffa7SValentin Clement}
2590a90ffa7SValentin Clement
2600a90ffa7SValentin Clement// 2.12
2610a90ffa7SValentin Clementdef ACCC_Write : Clause<"write"> {}
2620a90ffa7SValentin Clement
2630a90ffa7SValentin Clementdef ACCC_Unknown : Clause<"unknown"> {
264c044709bSPaul C. Anagnostopoulos  let isDefault = true;
2650a90ffa7SValentin Clement}
2660a90ffa7SValentin Clement
2670a90ffa7SValentin Clement//===----------------------------------------------------------------------===//
2680a90ffa7SValentin Clement// Definition of OpenACC directives
2690a90ffa7SValentin Clement//===----------------------------------------------------------------------===//
2700a90ffa7SValentin Clement
2710a90ffa7SValentin Clement// 2.12
27267c82d6fSKrzysztof Parzyszekdef ACC_Atomic : Directive<"atomic"> {
27367c82d6fSKrzysztof Parzyszek  let association = AS_Block;
274e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
27567c82d6fSKrzysztof Parzyszek}
2760a90ffa7SValentin Clement
2770a90ffa7SValentin Clement// 2.6.5
2780a90ffa7SValentin Clementdef ACC_Data : Directive<"data"> {
2790a90ffa7SValentin Clement  let allowedOnceClauses = [
280e4f932e5SValentin Clement    VersionedClause<ACCC_Async, 32>,
281a366188dSValentin Clement    VersionedClause<ACCC_If>,
282a366188dSValentin Clement    VersionedClause<ACCC_Default>
2830a90ffa7SValentin Clement  ];
284e4f932e5SValentin Clement  let allowedClauses = [
285e4f932e5SValentin Clement    VersionedClause<ACCC_DeviceType, 32>,
286e4f932e5SValentin Clement    VersionedClause<ACCC_Wait, 32>
287e4f932e5SValentin Clement  ];
2880a90ffa7SValentin Clement  let requiredClauses = [
2890a90ffa7SValentin Clement    VersionedClause<ACCC_Attach>,
2900a90ffa7SValentin Clement    VersionedClause<ACCC_Copy>,
2910a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>,
2920a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
2930a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
2940a90ffa7SValentin Clement    VersionedClause<ACCC_Default>,
2950a90ffa7SValentin Clement    VersionedClause<ACCC_DevicePtr>,
2960a90ffa7SValentin Clement    VersionedClause<ACCC_NoCreate>,
2970a90ffa7SValentin Clement    VersionedClause<ACCC_Present>
2980a90ffa7SValentin Clement  ];
29967c82d6fSKrzysztof Parzyszek  let association = AS_Block;
300e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
3010a90ffa7SValentin Clement}
3020a90ffa7SValentin Clement
3030a90ffa7SValentin Clement// 2.13
3040a90ffa7SValentin Clementdef ACC_Declare : Directive<"declare"> {
3050a90ffa7SValentin Clement  let allowedClauses = [
3060a90ffa7SValentin Clement    VersionedClause<ACCC_Copy>,
3070a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>,
3080a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
3090a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
3100a90ffa7SValentin Clement    VersionedClause<ACCC_Present>,
3110a90ffa7SValentin Clement    VersionedClause<ACCC_DevicePtr>,
3120a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceResident>,
3130a90ffa7SValentin Clement    VersionedClause<ACCC_Link>
3140a90ffa7SValentin Clement  ];
31567c82d6fSKrzysztof Parzyszek  let association = AS_None;
316e36c8dcaSKrzysztof Parzyszek  let category = CA_Declarative;
3170a90ffa7SValentin Clement}
3180a90ffa7SValentin Clement
319d553243fSValentin Clement// 2.5.3
3200a90ffa7SValentin Clementdef ACC_Kernels : Directive<"kernels"> {
3210a90ffa7SValentin Clement  let allowedClauses = [
3220a90ffa7SValentin Clement    VersionedClause<ACCC_Attach>,
3230a90ffa7SValentin Clement    VersionedClause<ACCC_Copy>,
3240a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>,
3250a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
3260a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
3270a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
3280a90ffa7SValentin Clement    VersionedClause<ACCC_NoCreate>,
3290a90ffa7SValentin Clement    VersionedClause<ACCC_Present>,
330875b4fd5SValentin Clement    VersionedClause<ACCC_DevicePtr>,
331875b4fd5SValentin Clement    VersionedClause<ACCC_Wait>
3320a90ffa7SValentin Clement  ];
3330a90ffa7SValentin Clement  let allowedOnceClauses = [
3340a90ffa7SValentin Clement    VersionedClause<ACCC_Async>,
3350a90ffa7SValentin Clement    VersionedClause<ACCC_Default>,
3360a90ffa7SValentin Clement    VersionedClause<ACCC_If>,
3370a90ffa7SValentin Clement    VersionedClause<ACCC_NumGangs>,
3380a90ffa7SValentin Clement    VersionedClause<ACCC_NumWorkers>,
3390a90ffa7SValentin Clement    VersionedClause<ACCC_Self>,
340875b4fd5SValentin Clement    VersionedClause<ACCC_VectorLength>
3410a90ffa7SValentin Clement  ];
34267c82d6fSKrzysztof Parzyszek  let association = AS_Block;
343e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
3440a90ffa7SValentin Clement}
3450a90ffa7SValentin Clement
3460a90ffa7SValentin Clement// 2.5.1
3470a90ffa7SValentin Clementdef ACC_Parallel : Directive<"parallel"> {
3480a90ffa7SValentin Clement  let allowedClauses = [
3490a90ffa7SValentin Clement    VersionedClause<ACCC_Attach>,
350a1db874dSValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Async>,
3510a90ffa7SValentin Clement    VersionedClause<ACCC_Copy>,
3520a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>,
3530a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
3540a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
3550a90ffa7SValentin Clement    VersionedClause<ACCC_DevicePtr>,
3560a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
3570a90ffa7SValentin Clement    VersionedClause<ACCC_NoCreate>,
358a1db874dSValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_NumGangs>,
359a1db874dSValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_NumWorkers>,
3600a90ffa7SValentin Clement    VersionedClause<ACCC_Present>,
3610a90ffa7SValentin Clement    VersionedClause<ACCC_Private>,
3620a90ffa7SValentin Clement    VersionedClause<ACCC_FirstPrivate>,
363ea63b395SRazvan Lupusoru    VersionedClause<ACCC_Reduction>,
364a1db874dSValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Wait>,
365a1db874dSValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_VectorLength>
3660a90ffa7SValentin Clement  ];
3670a90ffa7SValentin Clement  let allowedOnceClauses = [
3680a90ffa7SValentin Clement    VersionedClause<ACCC_Default>,
3690a90ffa7SValentin Clement    VersionedClause<ACCC_If>,
370a1db874dSValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Self>
3710a90ffa7SValentin Clement  ];
37267c82d6fSKrzysztof Parzyszek  let association = AS_Block;
373e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
3740a90ffa7SValentin Clement}
3750a90ffa7SValentin Clement
376d553243fSValentin Clement// 2.5.2
3770a90ffa7SValentin Clementdef ACC_Serial : Directive<"serial"> {
37836bf2de8SValentin Clement  // Spec line 950-951: clause is as for the parallel construct except that the
37936bf2de8SValentin Clement  // num_gangs, num_workers, and vector_length clauses are not permitted.
3800a90ffa7SValentin Clement  let allowedClauses = [
3810a90ffa7SValentin Clement    VersionedClause<ACCC_Attach>,
3820a90ffa7SValentin Clement    VersionedClause<ACCC_Copy>,
3830a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>,
3840a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
3850a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
3860a90ffa7SValentin Clement    VersionedClause<ACCC_DevicePtr>,
3870a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
3880a90ffa7SValentin Clement    VersionedClause<ACCC_NoCreate>,
3890a90ffa7SValentin Clement    VersionedClause<ACCC_Present>,
3900a90ffa7SValentin Clement    VersionedClause<ACCC_Private>,
39136bf2de8SValentin Clement    VersionedClause<ACCC_FirstPrivate>,
392ea63b395SRazvan Lupusoru    VersionedClause<ACCC_Reduction>,
3930a90ffa7SValentin Clement    VersionedClause<ACCC_Wait>
3940a90ffa7SValentin Clement  ];
3950a90ffa7SValentin Clement  let allowedOnceClauses = [
3960a90ffa7SValentin Clement    VersionedClause<ACCC_Async>,
3970a90ffa7SValentin Clement    VersionedClause<ACCC_Default>,
3980a90ffa7SValentin Clement    VersionedClause<ACCC_If>,
3990a90ffa7SValentin Clement    VersionedClause<ACCC_Self>
4000a90ffa7SValentin Clement  ];
40167c82d6fSKrzysztof Parzyszek  let association = AS_Block;
402e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
4030a90ffa7SValentin Clement}
4040a90ffa7SValentin Clement
4050a90ffa7SValentin Clement// 2.9
4060a90ffa7SValentin Clementdef ACC_Loop : Directive<"loop"> {
4070a90ffa7SValentin Clement  let allowedClauses = [
4080a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
409ea63b395SRazvan Lupusoru    VersionedClause<ACCC_Private>,
410ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Reduction>,
4110a90ffa7SValentin Clement    VersionedClause<ACCC_Collapse>,
4120a90ffa7SValentin Clement    VersionedClause<ACCC_Gang>,
413*8ca6401fSjeanPerier    VersionedClause<ACCC_ShortLoop>,
4140a90ffa7SValentin Clement    VersionedClause<ACCC_Tile>,
4150a90ffa7SValentin Clement    VersionedClause<ACCC_Vector>,
4160a90ffa7SValentin Clement    VersionedClause<ACCC_Worker>
4170a90ffa7SValentin Clement  ];
4180a90ffa7SValentin Clement  let allowedExclusiveClauses = [
4190a90ffa7SValentin Clement    VersionedClause<ACCC_Auto>,
4200a90ffa7SValentin Clement    VersionedClause<ACCC_Independent>,
4210a90ffa7SValentin Clement    VersionedClause<ACCC_Seq>
4220a90ffa7SValentin Clement  ];
42367c82d6fSKrzysztof Parzyszek  let association = AS_Loop;
424e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
4250a90ffa7SValentin Clement}
4260a90ffa7SValentin Clement
4270a90ffa7SValentin Clement// 2.10
42867c82d6fSKrzysztof Parzyszekdef ACC_Cache : Directive<"cache"> {
42967c82d6fSKrzysztof Parzyszek  let association = AS_None;
430e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
43167c82d6fSKrzysztof Parzyszek}
4320a90ffa7SValentin Clement
4330a90ffa7SValentin Clement// 2.14.1
4340a90ffa7SValentin Clementdef ACC_Init : Directive<"init"> {
4350a90ffa7SValentin Clement  let allowedOnceClauses = [
4360a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceNum>,
4370a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
4380a90ffa7SValentin Clement    VersionedClause<ACCC_If>
4390a90ffa7SValentin Clement  ];
44067c82d6fSKrzysztof Parzyszek  let association = AS_None;
441e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
4420a90ffa7SValentin Clement}
4430a90ffa7SValentin Clement
4440a90ffa7SValentin Clement// 2.15.1
4450a90ffa7SValentin Clementdef ACC_Routine : Directive<"routine"> {
446ed640420SValentin Clement (バレンタイン クレメン)  let allowedClauses = [
4470a90ffa7SValentin Clement    VersionedClause<ACCC_Bind>,
4480a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
4490a90ffa7SValentin Clement    VersionedClause<ACCC_Gang>,
4500a90ffa7SValentin Clement    VersionedClause<ACCC_Seq>,
4510a90ffa7SValentin Clement    VersionedClause<ACCC_Vector>,
4520a90ffa7SValentin Clement    VersionedClause<ACCC_Worker>
4530a90ffa7SValentin Clement  ];
454ed640420SValentin Clement (バレンタイン クレメン)  let allowedOnceClauses = [
455ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_NoHost>
456ed640420SValentin Clement (バレンタイン クレメン)  ];
45767c82d6fSKrzysztof Parzyszek  let association = AS_Declaration;
458e36c8dcaSKrzysztof Parzyszek  let category = CA_Declarative;
4590a90ffa7SValentin Clement}
4600a90ffa7SValentin Clement
4610a90ffa7SValentin Clement// 2.14.3
4620a90ffa7SValentin Clementdef ACC_Set : Directive<"set"> {
4630a90ffa7SValentin Clement  let allowedOnceClauses = [
4649914a873SValentin Clement    VersionedClause<ACCC_DefaultAsync>,
4659914a873SValentin Clement    VersionedClause<ACCC_DeviceNum>,
4669914a873SValentin Clement    VersionedClause<ACCC_DeviceType>,
4670a90ffa7SValentin Clement    VersionedClause<ACCC_If>
4680a90ffa7SValentin Clement  ];
4690a90ffa7SValentin Clement  let requiredClauses = [
4709914a873SValentin Clement    // The three following clauses are also in allowedOnceClauses list due to
4719914a873SValentin Clement    // restriction 2255 - Two instances of the same clause may not appear on the
4729914a873SValentin Clement    // same directive.
4730a90ffa7SValentin Clement    VersionedClause<ACCC_DefaultAsync>,
4740a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceNum>,
4750a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>
4760a90ffa7SValentin Clement  ];
47767c82d6fSKrzysztof Parzyszek  let association = AS_None;
478e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
4790a90ffa7SValentin Clement}
4800a90ffa7SValentin Clement
4810a90ffa7SValentin Clement// 2.14.2
4820a90ffa7SValentin Clementdef ACC_Shutdown : Directive<"shutdown"> {
4830a90ffa7SValentin Clement  let allowedOnceClauses = [
4840a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceNum>,
4850a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
4860a90ffa7SValentin Clement    VersionedClause<ACCC_If>
4870a90ffa7SValentin Clement  ];
48867c82d6fSKrzysztof Parzyszek  let association = AS_None;
489e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
4900a90ffa7SValentin Clement}
4910a90ffa7SValentin Clement
4920a90ffa7SValentin Clement// 2.14.4
4930a90ffa7SValentin Clementdef ACC_Update : Directive<"update"> {
4940a90ffa7SValentin Clement  let allowedClauses = [
4950a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
4960a90ffa7SValentin Clement    VersionedClause<ACCC_Wait>
4970a90ffa7SValentin Clement  ];
4980a90ffa7SValentin Clement  let allowedOnceClauses = [
4990a90ffa7SValentin Clement    VersionedClause<ACCC_Async>,
5000a90ffa7SValentin Clement    VersionedClause<ACCC_If>,
5010a90ffa7SValentin Clement    VersionedClause<ACCC_IfPresent>
5020a90ffa7SValentin Clement  ];
5030a90ffa7SValentin Clement  let requiredClauses = [
5040a90ffa7SValentin Clement    VersionedClause<ACCC_Device>,
5050a90ffa7SValentin Clement    VersionedClause<ACCC_Host>,
5060a90ffa7SValentin Clement    VersionedClause<ACCC_Self>
5070a90ffa7SValentin Clement  ];
50867c82d6fSKrzysztof Parzyszek  let association = AS_None;
509e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
5100a90ffa7SValentin Clement}
5110a90ffa7SValentin Clement
5120a90ffa7SValentin Clement// 2.16.3
5130a90ffa7SValentin Clementdef ACC_Wait : Directive<"wait"> {
5140a90ffa7SValentin Clement  let allowedOnceClauses = [
5150a90ffa7SValentin Clement    VersionedClause<ACCC_Async>,
5160a90ffa7SValentin Clement    VersionedClause<ACCC_If>
5170a90ffa7SValentin Clement  ];
51867c82d6fSKrzysztof Parzyszek  let association = AS_None;
519e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
5200a90ffa7SValentin Clement}
5210a90ffa7SValentin Clement
5220a90ffa7SValentin Clement// 2.14.6
5230a90ffa7SValentin Clementdef ACC_EnterData : Directive<"enter data"> {
524f30c5236SValentin Clement  let allowedClauses = [
525f30c5236SValentin Clement    VersionedClause<ACCC_Wait>
526f30c5236SValentin Clement  ];
5270a90ffa7SValentin Clement  let allowedOnceClauses = [
5280a90ffa7SValentin Clement    VersionedClause<ACCC_Async>,
529f30c5236SValentin Clement    VersionedClause<ACCC_If>
5300a90ffa7SValentin Clement  ];
5310a90ffa7SValentin Clement  let requiredClauses = [
5320a90ffa7SValentin Clement    VersionedClause<ACCC_Attach>,
5330a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
5340a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>
5350a90ffa7SValentin Clement  ];
53667c82d6fSKrzysztof Parzyszek  let association = AS_None;
537e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
5380a90ffa7SValentin Clement}
5390a90ffa7SValentin Clement
5400a90ffa7SValentin Clement// 2.14.7
5410a90ffa7SValentin Clementdef ACC_ExitData : Directive<"exit data"> {
5420a90ffa7SValentin Clement  let allowedClauses = [
543b65896efSValentin Clement    VersionedClause<ACCC_Wait>
544b65896efSValentin Clement  ];
545b65896efSValentin Clement  let allowedOnceClauses = [
5460a90ffa7SValentin Clement    VersionedClause<ACCC_Async>,
5470a90ffa7SValentin Clement    VersionedClause<ACCC_If>,
5480a90ffa7SValentin Clement    VersionedClause<ACCC_Finalize>
5490a90ffa7SValentin Clement  ];
5500a90ffa7SValentin Clement  let requiredClauses = [
5510a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
5520a90ffa7SValentin Clement    VersionedClause<ACCC_Delete>,
5530a90ffa7SValentin Clement    VersionedClause<ACCC_Detach>
5540a90ffa7SValentin Clement  ];
55567c82d6fSKrzysztof Parzyszek  let association = AS_None;
556e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
5570a90ffa7SValentin Clement}
558d553243fSValentin Clement
559d553243fSValentin Clement// 2.8
5600a90ffa7SValentin Clementdef ACC_HostData : Directive<"host_data"> {
5615e09a025SValentin Clement  let allowedOnceClauses = [
5620a90ffa7SValentin Clement    VersionedClause<ACCC_If>,
5630a90ffa7SValentin Clement    VersionedClause<ACCC_IfPresent>
5640a90ffa7SValentin Clement  ];
5650a90ffa7SValentin Clement  let requiredClauses = [
5660a90ffa7SValentin Clement    VersionedClause<ACCC_UseDevice>
5670a90ffa7SValentin Clement  ];
56867c82d6fSKrzysztof Parzyszek  let association = AS_Block;
569e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
5700a90ffa7SValentin Clement}
5710a90ffa7SValentin Clement
5720a90ffa7SValentin Clement// 2.11
5730a90ffa7SValentin Clementdef ACC_KernelsLoop : Directive<"kernels loop"> {
5740a90ffa7SValentin Clement  let allowedClauses = [
575ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Attach>,
576ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Collapse>,
5770a90ffa7SValentin Clement    VersionedClause<ACCC_Copy>,
5780a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>,
5790a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
5800a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
581ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_DevicePtr>,
5820a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
583ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Gang>,
5840a90ffa7SValentin Clement    VersionedClause<ACCC_NoCreate>,
585ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_NumGangs>,
586ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_NumWorkers>,
5870a90ffa7SValentin Clement    VersionedClause<ACCC_Present>,
5880a90ffa7SValentin Clement    VersionedClause<ACCC_Private>,
589ea63b395SRazvan Lupusoru    VersionedClause<ACCC_Reduction>,
590*8ca6401fSjeanPerier    VersionedClause<ACCC_ShortLoop>,
5910a90ffa7SValentin Clement    VersionedClause<ACCC_Tile>,
5920a90ffa7SValentin Clement    VersionedClause<ACCC_Vector>,
5930a90ffa7SValentin Clement    VersionedClause<ACCC_VectorLength>,
594ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Wait>,
5950a90ffa7SValentin Clement    VersionedClause<ACCC_Worker>
5960a90ffa7SValentin Clement  ];
597ed640420SValentin Clement (バレンタイン クレメン)  let allowedOnceClauses = [
598ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Async>,
599ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Default>,
600ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_If>,
601ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Self>
602ed640420SValentin Clement (バレンタイン クレメン)  ];
6030a90ffa7SValentin Clement  let allowedExclusiveClauses = [
6040a90ffa7SValentin Clement    VersionedClause<ACCC_Auto>,
6050a90ffa7SValentin Clement    VersionedClause<ACCC_Independent>,
6060a90ffa7SValentin Clement    VersionedClause<ACCC_Seq>
6070a90ffa7SValentin Clement  ];
60867c82d6fSKrzysztof Parzyszek  let leafConstructs = [ACC_Kernels, ACC_Loop];
609e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
6100a90ffa7SValentin Clement}
6110a90ffa7SValentin Clement
6120a90ffa7SValentin Clement// 2.11
6130a90ffa7SValentin Clementdef ACC_ParallelLoop : Directive<"parallel loop"> {
6140a90ffa7SValentin Clement  let allowedClauses = [
6150a90ffa7SValentin Clement    VersionedClause<ACCC_Attach>,
616ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Collapse>,
6170a90ffa7SValentin Clement    VersionedClause<ACCC_Copy>,
6180a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>,
6190a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
6200a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
6210a90ffa7SValentin Clement    VersionedClause<ACCC_DevicePtr>,
6220a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
6230a90ffa7SValentin Clement    VersionedClause<ACCC_FirstPrivate>,
624ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Gang>,
6250a90ffa7SValentin Clement    VersionedClause<ACCC_NoCreate>,
626ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_NumGangs>,
627ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_NumWorkers>,
6280a90ffa7SValentin Clement    VersionedClause<ACCC_Present>,
6290a90ffa7SValentin Clement    VersionedClause<ACCC_Private>,
630ea63b395SRazvan Lupusoru    VersionedClause<ACCC_Reduction>,
631*8ca6401fSjeanPerier    VersionedClause<ACCC_ShortLoop>,
6320a90ffa7SValentin Clement    VersionedClause<ACCC_Tile>,
633ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Vector>,
634ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_VectorLength>,
635ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Wait>,
636ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Worker>
6370a90ffa7SValentin Clement  ];
6380a90ffa7SValentin Clement  let allowedOnceClauses = [
6390a90ffa7SValentin Clement    VersionedClause<ACCC_Async>,
6400a90ffa7SValentin Clement    VersionedClause<ACCC_Default>,
6410a90ffa7SValentin Clement    VersionedClause<ACCC_If>,
642ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Self>
6430a90ffa7SValentin Clement  ];
6440a90ffa7SValentin Clement  let allowedExclusiveClauses = [
6450a90ffa7SValentin Clement    VersionedClause<ACCC_Auto>,
6460a90ffa7SValentin Clement    VersionedClause<ACCC_Independent>,
6470a90ffa7SValentin Clement    VersionedClause<ACCC_Seq>
6480a90ffa7SValentin Clement  ];
64967c82d6fSKrzysztof Parzyszek  let leafConstructs = [ACC_Parallel, ACC_Loop];
650e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
6510a90ffa7SValentin Clement}
6520a90ffa7SValentin Clement
6530a90ffa7SValentin Clement// 2.11
6540a90ffa7SValentin Clementdef ACC_SerialLoop : Directive<"serial loop"> {
6550a90ffa7SValentin Clement  let allowedClauses = [
6560a90ffa7SValentin Clement    VersionedClause<ACCC_Attach>,
657ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Collapse>,
6580a90ffa7SValentin Clement    VersionedClause<ACCC_Copy>,
6590a90ffa7SValentin Clement    VersionedClause<ACCC_Copyin>,
6600a90ffa7SValentin Clement    VersionedClause<ACCC_Copyout>,
6610a90ffa7SValentin Clement    VersionedClause<ACCC_Create>,
6620a90ffa7SValentin Clement    VersionedClause<ACCC_DevicePtr>,
6630a90ffa7SValentin Clement    VersionedClause<ACCC_DeviceType>,
6640a90ffa7SValentin Clement    VersionedClause<ACCC_FirstPrivate>,
665ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Gang>,
6660a90ffa7SValentin Clement    VersionedClause<ACCC_NoCreate>,
6670a90ffa7SValentin Clement    VersionedClause<ACCC_Present>,
6680a90ffa7SValentin Clement    VersionedClause<ACCC_Private>,
669ea63b395SRazvan Lupusoru    VersionedClause<ACCC_Reduction>,
670*8ca6401fSjeanPerier    VersionedClause<ACCC_ShortLoop>,
671ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Tile>,
672ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Vector>,
673ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Wait>,
674ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Worker>
6750a90ffa7SValentin Clement  ];
6760a90ffa7SValentin Clement  let allowedOnceClauses = [
6770a90ffa7SValentin Clement    VersionedClause<ACCC_Async>,
6780a90ffa7SValentin Clement    VersionedClause<ACCC_Default>,
6790a90ffa7SValentin Clement    VersionedClause<ACCC_If>,
680ed640420SValentin Clement (バレンタイン クレメン)    VersionedClause<ACCC_Self>
6810a90ffa7SValentin Clement  ];
6820a90ffa7SValentin Clement  let allowedExclusiveClauses = [
6830a90ffa7SValentin Clement    VersionedClause<ACCC_Auto>,
6840a90ffa7SValentin Clement    VersionedClause<ACCC_Independent>,
6850a90ffa7SValentin Clement    VersionedClause<ACCC_Seq>
6860a90ffa7SValentin Clement  ];
68767c82d6fSKrzysztof Parzyszek  let leafConstructs = [ACC_Serial, ACC_Loop];
688e36c8dcaSKrzysztof Parzyszek  let category = CA_Executable;
6890a90ffa7SValentin Clement}
6900a90ffa7SValentin Clement
6910a90ffa7SValentin Clementdef ACC_Unknown : Directive<"unknown"> {
692c044709bSPaul C. Anagnostopoulos  let isDefault = true;
69367c82d6fSKrzysztof Parzyszek  let association = AS_None;
694e36c8dcaSKrzysztof Parzyszek  let category = CA_Utility;
6950a90ffa7SValentin Clement}
696