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