OMP.td 66 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103
  1. //===-- OMP.td - OpenMP directive definition file ----------*- tablegen -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This is the definition file for OpenMP directives and clauses.
  10. //
  11. //===----------------------------------------------------------------------===//
  12. include "llvm/Frontend/Directive/DirectiveBase.td"
  13. //===----------------------------------------------------------------------===//
  14. // Definition of general OpenMP information
  15. //===----------------------------------------------------------------------===//
  16. def OpenMP : DirectiveLanguage {
  17. let name = "OpenMP";
  18. let cppNamespace = "omp"; // final namespace will be llvm::omp
  19. let directivePrefix = "OMPD_";
  20. let clausePrefix = "OMPC_";
  21. let makeEnumAvailableInNamespace = true;
  22. let enableBitmaskEnumInNamespace = true;
  23. let clauseEnumSetClass = "OmpClauseSet";
  24. let flangClauseBaseClass = "OmpClause";
  25. }
  26. //===----------------------------------------------------------------------===//
  27. // Definition of OpenMP clauses
  28. //===----------------------------------------------------------------------===//
  29. def OMPC_Allocator : Clause<"allocator"> {
  30. let clangClass = "OMPAllocatorClause";
  31. let flangClass = "ScalarIntExpr";
  32. }
  33. def OMPC_If : Clause<"if"> {
  34. let clangClass = "OMPIfClause";
  35. let flangClass = "OmpIfClause";
  36. }
  37. def OMPC_Final : Clause<"final"> {
  38. let clangClass = "OMPFinalClause";
  39. let flangClass = "ScalarLogicalExpr";
  40. }
  41. def OMPC_NumThreads : Clause<"num_threads"> {
  42. let clangClass = "OMPNumThreadsClause";
  43. let flangClass = "ScalarIntExpr";
  44. }
  45. def OMPC_SafeLen : Clause<"safelen"> {
  46. let clangClass = "OMPSafelenClause";
  47. let flangClass = "ScalarIntConstantExpr";
  48. }
  49. def OMPC_SimdLen : Clause<"simdlen"> {
  50. let clangClass = "OMPSimdlenClause";
  51. let flangClass = "ScalarIntConstantExpr";
  52. }
  53. def OMPC_Collapse : Clause<"collapse"> {
  54. let clangClass = "OMPCollapseClause";
  55. let flangClass = "ScalarIntConstantExpr";
  56. }
  57. def OMPC_Default : Clause<"default"> {
  58. let clangClass = "OMPDefaultClause";
  59. let flangClass = "OmpDefaultClause";
  60. }
  61. def OMPC_Private : Clause<"private"> {
  62. let clangClass = "OMPPrivateClause";
  63. let flangClass = "OmpObjectList";
  64. }
  65. def OMPC_Sizes: Clause<"sizes"> {
  66. let clangClass = "OMPSizesClause";
  67. let flangClass = "ScalarIntExpr";
  68. let isValueList = true;
  69. }
  70. def OMPC_Full: Clause<"full"> {
  71. let clangClass = "OMPFullClause";
  72. }
  73. def OMPC_Partial: Clause<"partial"> {
  74. let clangClass = "OMPPartialClause";
  75. let flangClass = "ScalarIntConstantExpr";
  76. let isValueOptional = true;
  77. }
  78. def OMPC_FirstPrivate : Clause<"firstprivate"> {
  79. let clangClass = "OMPFirstprivateClause";
  80. let flangClass = "OmpObjectList";
  81. }
  82. def OMPC_LastPrivate : Clause<"lastprivate"> {
  83. let clangClass = "OMPLastprivateClause";
  84. let flangClass = "OmpObjectList";
  85. }
  86. def OMPC_Shared : Clause<"shared"> {
  87. let clangClass = "OMPSharedClause";
  88. let flangClass = "OmpObjectList";
  89. }
  90. def OMPC_Reduction : Clause<"reduction"> {
  91. let clangClass = "OMPReductionClause";
  92. let flangClass = "OmpReductionClause";
  93. }
  94. def OMPC_Linear : Clause<"linear"> {
  95. let clangClass = "OMPLinearClause";
  96. let flangClass = "OmpLinearClause";
  97. }
  98. def OMPC_Aligned : Clause<"aligned"> {
  99. let clangClass = "OMPAlignedClause";
  100. let flangClass = "OmpAlignedClause";
  101. }
  102. def OMPC_Copyin : Clause<"copyin"> {
  103. let clangClass = "OMPCopyinClause";
  104. let flangClass = "OmpObjectList";
  105. }
  106. def OMPC_CopyPrivate : Clause<"copyprivate"> {
  107. let clangClass = "OMPCopyprivateClause";
  108. let flangClass = "OmpObjectList";
  109. }
  110. def OMP_PROC_BIND_master : ClauseVal<"master",2,1> {}
  111. def OMP_PROC_BIND_close : ClauseVal<"close",3,1> {}
  112. def OMP_PROC_BIND_spread : ClauseVal<"spread",4,1> {}
  113. def OMP_PROC_BIND_primary : ClauseVal<"primary",5,1> {}
  114. def OMP_PROC_BIND_default : ClauseVal<"default",6,0> {}
  115. def OMP_PROC_BIND_unknown : ClauseVal<"unknown",7,0> { let isDefault = true; }
  116. def OMPC_ProcBind : Clause<"proc_bind"> {
  117. let clangClass = "OMPProcBindClause";
  118. let flangClass = "OmpProcBindClause";
  119. let enumClauseValue = "ProcBindKind";
  120. let allowedClauseValues = [
  121. OMP_PROC_BIND_primary,
  122. OMP_PROC_BIND_master,
  123. OMP_PROC_BIND_close,
  124. OMP_PROC_BIND_spread,
  125. OMP_PROC_BIND_default,
  126. OMP_PROC_BIND_unknown
  127. ];
  128. }
  129. def OMP_SCHEDULE_Static : ClauseVal<"static", 2, 1> {}
  130. def OMP_SCHEDULE_Dynamic : ClauseVal<"dynamic", 3, 1> {}
  131. def OMP_SCHEDULE_Guided : ClauseVal<"guided", 4, 1> {}
  132. def OMP_SCHEDULE_Auto : ClauseVal<"auto", 5, 1> {}
  133. def OMP_SCHEDULE_Runtime : ClauseVal<"runtime", 6, 1> {}
  134. def OMP_SCHEDULE_Default : ClauseVal<"default", 7, 0> { let isDefault = 1; }
  135. def OMPC_Schedule : Clause<"schedule"> {
  136. let clangClass = "OMPScheduleClause";
  137. let flangClass = "OmpScheduleClause";
  138. let enumClauseValue = "ScheduleKind";
  139. let allowedClauseValues = [
  140. OMP_SCHEDULE_Static,
  141. OMP_SCHEDULE_Dynamic,
  142. OMP_SCHEDULE_Guided,
  143. OMP_SCHEDULE_Auto,
  144. OMP_SCHEDULE_Runtime,
  145. OMP_SCHEDULE_Default
  146. ];
  147. }
  148. def OMP_MEMORY_ORDER_SeqCst : ClauseVal<"seq_cst", 1, 1> {}
  149. def OMP_MEMORY_ORDER_AcqRel : ClauseVal<"acq_rel", 2, 1> {}
  150. def OMP_MEMORY_ORDER_Acquire : ClauseVal<"acquire", 3, 1> {}
  151. def OMP_MEMORY_ORDER_Release : ClauseVal<"release", 4, 1> {}
  152. def OMP_MEMORY_ORDER_Relaxed : ClauseVal<"relaxed", 5, 1> {}
  153. def OMP_MEMORY_ORDER_Default : ClauseVal<"default", 6, 0> {
  154. let isDefault = 1;
  155. }
  156. def OMPC_MemoryOrder : Clause<"memory_order"> {
  157. let enumClauseValue = "MemoryOrderKind";
  158. let allowedClauseValues = [
  159. OMP_MEMORY_ORDER_SeqCst,
  160. OMP_MEMORY_ORDER_AcqRel,
  161. OMP_MEMORY_ORDER_Acquire,
  162. OMP_MEMORY_ORDER_Release,
  163. OMP_MEMORY_ORDER_Relaxed,
  164. OMP_MEMORY_ORDER_Default
  165. ];
  166. }
  167. def OMP_CANCELLATION_CONSTRUCT_Parallel : ClauseVal<"parallel", 1, 1> {}
  168. def OMP_CANCELLATION_CONSTRUCT_Loop : ClauseVal<"loop", 2, 1> {}
  169. def OMP_CANCELLATION_CONSTRUCT_Sections : ClauseVal<"sections", 3, 1> {}
  170. def OMP_CANCELLATION_CONSTRUCT_Taskgroup : ClauseVal<"taskgroup", 4, 1> {}
  171. def OMP_CANCELLATION_CONSTRUCT_None : ClauseVal<"none", 5, 0> {
  172. let isDefault = 1;
  173. }
  174. def OMPC_CancellationConstructType : Clause<"cancellation_construct_type"> {
  175. let enumClauseValue = "CancellationConstructType";
  176. let allowedClauseValues = [
  177. OMP_CANCELLATION_CONSTRUCT_Parallel,
  178. OMP_CANCELLATION_CONSTRUCT_Loop,
  179. OMP_CANCELLATION_CONSTRUCT_Sections,
  180. OMP_CANCELLATION_CONSTRUCT_Taskgroup,
  181. OMP_CANCELLATION_CONSTRUCT_None
  182. ];
  183. }
  184. def OMPC_Ordered : Clause<"ordered"> {
  185. let clangClass = "OMPOrderedClause";
  186. let flangClass = "ScalarIntConstantExpr";
  187. let isValueOptional = true;
  188. }
  189. def OMPC_NoWait : Clause<"nowait"> {
  190. let clangClass = "OMPNowaitClause";
  191. }
  192. def OMPC_Untied : Clause<"untied"> { let clangClass = "OMPUntiedClause"; }
  193. def OMPC_Mergeable : Clause<"mergeable"> {
  194. let clangClass = "OMPMergeableClause";
  195. }
  196. def OMPC_Read : Clause<"read"> { let clangClass = "OMPReadClause"; }
  197. def OMPC_Write : Clause<"write"> { let clangClass = "OMPWriteClause"; }
  198. def OMPC_Update : Clause<"update"> { let clangClass = "OMPUpdateClause"; }
  199. def OMPC_Capture : Clause<"capture"> { let clangClass = "OMPCaptureClause"; }
  200. def OMPC_Compare : Clause<"compare"> { let clangClass = "OMPCompareClause"; }
  201. def OMPC_SeqCst : Clause<"seq_cst"> { let clangClass = "OMPSeqCstClause"; }
  202. def OMPC_AcqRel : Clause<"acq_rel"> { let clangClass = "OMPAcqRelClause"; }
  203. def OMPC_Acquire : Clause<"acquire"> { let clangClass = "OMPAcquireClause"; }
  204. def OMPC_Release : Clause<"release"> { let clangClass = "OMPReleaseClause"; }
  205. def OMPC_Relaxed : Clause<"relaxed"> { let clangClass = "OMPRelaxedClause"; }
  206. def OMPC_Depend : Clause<"depend"> {
  207. let clangClass = "OMPDependClause";
  208. let flangClass = "OmpDependClause";
  209. }
  210. def OMPC_Device : Clause<"device"> {
  211. let clangClass = "OMPDeviceClause";
  212. let flangClass = "OmpDeviceClause";
  213. }
  214. def OMPC_Threads : Clause<"threads"> { let clangClass = "OMPThreadsClause"; }
  215. def OMPC_Simd : Clause<"simd"> { let clangClass = "OMPSIMDClause"; }
  216. def OMPC_Map : Clause<"map"> {
  217. let clangClass = "OMPMapClause";
  218. let flangClass = "OmpMapClause";
  219. }
  220. def OMPC_NumTeams : Clause<"num_teams"> {
  221. let clangClass = "OMPNumTeamsClause";
  222. let flangClass = "ScalarIntExpr";
  223. }
  224. def OMPC_ThreadLimit : Clause<"thread_limit"> {
  225. let clangClass = "OMPThreadLimitClause";
  226. let flangClass = "ScalarIntExpr";
  227. }
  228. def OMPC_Priority : Clause<"priority"> {
  229. let clangClass = "OMPPriorityClause";
  230. let flangClass = "ScalarIntExpr";
  231. }
  232. def OMP_GRAINSIZE_Strict : ClauseVal<"strict", 1, 1> {}
  233. def OMP_GRAINSIZE_Unknown : ClauseVal<"unkonwn", 2, 0> { let isDefault = 1; }
  234. def OMPC_GrainSize : Clause<"grainsize"> {
  235. let clangClass = "OMPGrainsizeClause";
  236. let flangClass = "ScalarIntExpr";
  237. let enumClauseValue = "GrainsizeType";
  238. let allowedClauseValues = [
  239. OMP_GRAINSIZE_Strict,
  240. OMP_GRAINSIZE_Unknown
  241. ];
  242. }
  243. def OMPC_NoGroup : Clause<"nogroup"> {
  244. let clangClass = "OMPNogroupClause";
  245. }
  246. def OMP_NUMTASKS_Strict : ClauseVal<"strict", 1, 1> {}
  247. def OMP_NUMTASKS_Unknown : ClauseVal<"unkonwn", 2, 0> { let isDefault = 1; }
  248. def OMPC_NumTasks : Clause<"num_tasks"> {
  249. let clangClass = "OMPNumTasksClause";
  250. let flangClass = "ScalarIntExpr";
  251. let enumClauseValue = "NumTasksType";
  252. let allowedClauseValues = [
  253. OMP_NUMTASKS_Strict,
  254. OMP_NUMTASKS_Unknown
  255. ];
  256. }
  257. def OMPC_Hint : Clause<"hint"> {
  258. let clangClass = "OMPHintClause";
  259. let flangClass = "ConstantExpr";
  260. }
  261. def OMPC_DistSchedule : Clause<"dist_schedule"> {
  262. let clangClass = "OMPDistScheduleClause";
  263. let flangClass = "ScalarIntExpr";
  264. let isValueOptional = true;
  265. }
  266. def OMPC_DefaultMap : Clause<"defaultmap"> {
  267. let clangClass = "OMPDefaultmapClause";
  268. let flangClass = "OmpDefaultmapClause";
  269. }
  270. def OMPC_To : Clause<"to"> {
  271. let clangClass = "OMPToClause";
  272. let flangClass = "OmpObjectList";
  273. }
  274. def OMPC_From : Clause<"from"> {
  275. let clangClass = "OMPFromClause";
  276. let flangClass = "OmpObjectList";
  277. }
  278. def OMPC_UseDevicePtr : Clause<"use_device_ptr"> {
  279. let clangClass = "OMPUseDevicePtrClause";
  280. let flangClass = "Name";
  281. let isValueList = true;
  282. }
  283. def OMPC_IsDevicePtr : Clause<"is_device_ptr"> {
  284. let clangClass = "OMPIsDevicePtrClause";
  285. let flangClass = "Name";
  286. let isValueList = true;
  287. }
  288. def OMPC_HasDeviceAddr : Clause<"has_device_addr"> {
  289. let clangClass = "OMPHasDeviceAddrClause";
  290. let flangClass = "Name";
  291. let isValueList = true;
  292. }
  293. def OMPC_TaskReduction : Clause<"task_reduction"> {
  294. let clangClass = "OMPTaskReductionClause";
  295. let flangClass = "OmpReductionClause";
  296. }
  297. def OMPC_InReduction : Clause<"in_reduction"> {
  298. let clangClass = "OMPInReductionClause";
  299. let flangClass = "OmpInReductionClause";
  300. }
  301. def OMPC_UnifiedAddress : Clause<"unified_address"> {
  302. let clangClass = "OMPUnifiedAddressClause";
  303. }
  304. def OMPC_UnifiedSharedMemory : Clause<"unified_shared_memory"> {
  305. let clangClass = "OMPUnifiedSharedMemoryClause";
  306. }
  307. def OMPC_ReverseOffload : Clause<"reverse_offload"> {
  308. let clangClass = "OMPReverseOffloadClause";
  309. }
  310. def OMPC_DynamicAllocators : Clause<"dynamic_allocators"> {
  311. let clangClass = "OMPDynamicAllocatorsClause";
  312. }
  313. def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> {
  314. let clangClass = "OMPAtomicDefaultMemOrderClause";
  315. let flangClass = "OmpAtomicDefaultMemOrderClause";
  316. }
  317. def OMPC_At : Clause<"at"> {
  318. let clangClass = "OMPAtClause";
  319. }
  320. def OMPC_Severity : Clause<"severity"> {
  321. let clangClass = "OMPSeverityClause";
  322. }
  323. def OMPC_Message : Clause<"message"> {
  324. let clangClass = "OMPMessageClause";
  325. }
  326. def OMPC_Allocate : Clause<"allocate"> {
  327. let clangClass = "OMPAllocateClause";
  328. let flangClass = "OmpAllocateClause";
  329. }
  330. def OMPC_NonTemporal : Clause<"nontemporal"> {
  331. let clangClass = "OMPNontemporalClause";
  332. let flangClass = "Name";
  333. let isValueList = true;
  334. }
  335. def OMP_ORDER_concurrent : ClauseVal<"concurrent",1,1> {}
  336. def OMP_ORDER_unknown : ClauseVal<"unknown",2,0> { let isDefault = 1; }
  337. def OMPC_Order : Clause<"order"> {
  338. let clangClass = "OMPOrderClause";
  339. let enumClauseValue = "OrderKind";
  340. let allowedClauseValues = [
  341. OMP_ORDER_unknown,
  342. OMP_ORDER_concurrent
  343. ];
  344. }
  345. def OMPC_Init : Clause<"init"> {
  346. let clangClass = "OMPInitClause";
  347. }
  348. def OMPC_Use : Clause<"use"> {
  349. let clangClass = "OMPUseClause";
  350. }
  351. def OMPC_Destroy : Clause<"destroy"> {
  352. let clangClass = "OMPDestroyClause";
  353. }
  354. def OMPC_Novariants : Clause<"novariants"> {
  355. let clangClass = "OMPNovariantsClause";
  356. let flangClass = "ScalarLogicalExpr";
  357. }
  358. def OMPC_Nocontext : Clause<"nocontext"> {
  359. let clangClass = "OMPNocontextClause";
  360. let flangClass = "ScalarLogicalExpr";
  361. }
  362. def OMPC_Detach : Clause<"detach"> {
  363. let clangClass = "OMPDetachClause";
  364. }
  365. def OMPC_Inclusive : Clause<"inclusive"> {
  366. let clangClass = "OMPInclusiveClause";
  367. }
  368. def OMPC_Exclusive : Clause<"exclusive"> {
  369. let clangClass = "OMPExclusiveClause";
  370. }
  371. def OMPC_UsesAllocators : Clause<"uses_allocators"> {
  372. let clangClass = "OMPUsesAllocatorsClause";
  373. }
  374. def OMPC_Affinity : Clause<"affinity"> {
  375. let clangClass = "OMPAffinityClause";
  376. }
  377. def OMPC_UseDeviceAddr : Clause<"use_device_addr"> {
  378. let clangClass = "OMPUseDeviceAddrClause";
  379. }
  380. def OMPC_Uniform : Clause<"uniform"> {
  381. let flangClass = "Name";
  382. let isValueList = true;
  383. }
  384. def OMPC_DeviceType : Clause<"device_type"> {}
  385. def OMPC_Match : Clause<"match"> {}
  386. def OMPC_AdjustArgs : Clause<"adjust_args"> { }
  387. def OMPC_AppendArgs : Clause<"append_args"> { }
  388. def OMPC_Depobj : Clause<"depobj"> {
  389. let clangClass = "OMPDepobjClause";
  390. let isImplicit = true;
  391. }
  392. def OMPC_Flush : Clause<"flush"> {
  393. let clangClass = "OMPFlushClause";
  394. let isImplicit = true;
  395. }
  396. def OMPC_ThreadPrivate : Clause<"threadprivate"> {
  397. let alternativeName = "threadprivate or thread local";
  398. let isImplicit = true;
  399. }
  400. def OMPC_Unknown : Clause<"unknown"> {
  401. let isImplicit = true;
  402. let isDefault = true;
  403. }
  404. def OMPC_Link : Clause<"link"> {
  405. let flangClass = "OmpObjectList";
  406. }
  407. def OMPC_Indirect : Clause<"indirect"> {}
  408. def OMPC_Inbranch : Clause<"inbranch"> {}
  409. def OMPC_Notinbranch : Clause<"notinbranch"> {}
  410. def OMPC_Filter : Clause<"filter"> {
  411. let clangClass = "OMPFilterClause";
  412. let flangClass = "ScalarIntExpr";
  413. }
  414. def OMPC_Align : Clause<"align"> {
  415. let clangClass = "OMPAlignClause";
  416. }
  417. def OMPC_When: Clause<"when"> {}
  418. def OMPC_Bind : Clause<"bind"> {
  419. let clangClass = "OMPBindClause";
  420. }
  421. def OMPC_OMPX_DynCGroupMem : Clause<"ompx_dyn_cgroup_mem"> {
  422. let clangClass = "OMPXDynCGroupMemClause";
  423. let flangClass = "ScalarIntExpr";
  424. }
  425. //===----------------------------------------------------------------------===//
  426. // Definition of OpenMP directives
  427. //===----------------------------------------------------------------------===//
  428. def OMP_ThreadPrivate : Directive<"threadprivate"> {}
  429. def OMP_Parallel : Directive<"parallel"> {
  430. let allowedClauses = [
  431. VersionedClause<OMPC_Private>,
  432. VersionedClause<OMPC_FirstPrivate>,
  433. VersionedClause<OMPC_Shared>,
  434. VersionedClause<OMPC_Reduction>,
  435. VersionedClause<OMPC_Copyin>,
  436. VersionedClause<OMPC_Allocate>
  437. ];
  438. let allowedOnceClauses = [
  439. VersionedClause<OMPC_Default>,
  440. VersionedClause<OMPC_If>,
  441. VersionedClause<OMPC_NumThreads>,
  442. VersionedClause<OMPC_ProcBind>,
  443. ];
  444. }
  445. def OMP_Task : Directive<"task"> {
  446. let allowedClauses = [
  447. VersionedClause<OMPC_Private>,
  448. VersionedClause<OMPC_FirstPrivate>,
  449. VersionedClause<OMPC_Shared>,
  450. VersionedClause<OMPC_Untied>,
  451. VersionedClause<OMPC_Mergeable>,
  452. VersionedClause<OMPC_Depend>,
  453. VersionedClause<OMPC_InReduction>,
  454. VersionedClause<OMPC_Allocate>,
  455. VersionedClause<OMPC_Detach, 50>,
  456. VersionedClause<OMPC_Affinity, 50>
  457. ];
  458. let allowedOnceClauses = [
  459. VersionedClause<OMPC_Default>,
  460. VersionedClause<OMPC_If>,
  461. VersionedClause<OMPC_Final>,
  462. VersionedClause<OMPC_Priority>
  463. ];
  464. }
  465. def OMP_Simd : Directive<"simd"> {
  466. let allowedClauses = [
  467. VersionedClause<OMPC_Private>,
  468. VersionedClause<OMPC_LastPrivate>,
  469. VersionedClause<OMPC_Linear>,
  470. VersionedClause<OMPC_Aligned>,
  471. VersionedClause<OMPC_Reduction>,
  472. VersionedClause<OMPC_Allocate>,
  473. VersionedClause<OMPC_NonTemporal, 50>,
  474. VersionedClause<OMPC_Order, 50>
  475. ];
  476. let allowedOnceClauses = [
  477. VersionedClause<OMPC_Collapse>,
  478. VersionedClause<OMPC_SafeLen>,
  479. VersionedClause<OMPC_SimdLen>,
  480. VersionedClause<OMPC_If, 50>,
  481. ];
  482. }
  483. def OMP_Tile : Directive<"tile"> {
  484. let allowedOnceClauses = [
  485. VersionedClause<OMPC_Sizes, 51>,
  486. ];
  487. }
  488. def OMP_Unroll : Directive<"unroll"> {
  489. let allowedOnceClauses = [
  490. VersionedClause<OMPC_Full, 51>,
  491. VersionedClause<OMPC_Partial, 51>,
  492. ];
  493. }
  494. def OMP_For : Directive<"for"> {
  495. let allowedClauses = [
  496. VersionedClause<OMPC_Private>,
  497. VersionedClause<OMPC_LastPrivate>,
  498. VersionedClause<OMPC_FirstPrivate>,
  499. VersionedClause<OMPC_Reduction>,
  500. VersionedClause<OMPC_Collapse>,
  501. VersionedClause<OMPC_Schedule>,
  502. VersionedClause<OMPC_Ordered>,
  503. VersionedClause<OMPC_NoWait>,
  504. VersionedClause<OMPC_Linear>,
  505. VersionedClause<OMPC_Allocate>,
  506. VersionedClause<OMPC_Order, 50>
  507. ];
  508. }
  509. def OMP_Do : Directive<"do"> {
  510. let allowedClauses = [
  511. VersionedClause<OMPC_Private>,
  512. VersionedClause<OMPC_FirstPrivate>,
  513. VersionedClause<OMPC_LastPrivate>,
  514. VersionedClause<OMPC_Linear>,
  515. VersionedClause<OMPC_Reduction>
  516. ];
  517. let allowedOnceClauses = [
  518. VersionedClause<OMPC_Schedule>,
  519. VersionedClause<OMPC_Collapse>,
  520. VersionedClause<OMPC_Ordered>,
  521. VersionedClause<OMPC_NoWait>
  522. ];
  523. }
  524. def OMP_Sections : Directive<"sections"> {
  525. let allowedClauses = [
  526. VersionedClause<OMPC_Private>,
  527. VersionedClause<OMPC_LastPrivate>,
  528. VersionedClause<OMPC_FirstPrivate>,
  529. VersionedClause<OMPC_Reduction>,
  530. VersionedClause<OMPC_NoWait>,
  531. VersionedClause<OMPC_Allocate>
  532. ];
  533. }
  534. def OMP_Section : Directive<"section"> {}
  535. def OMP_Single : Directive<"single"> {
  536. let allowedClauses = [
  537. VersionedClause<OMPC_Private>,
  538. VersionedClause<OMPC_FirstPrivate>,
  539. VersionedClause<OMPC_CopyPrivate>,
  540. VersionedClause<OMPC_NoWait>,
  541. VersionedClause<OMPC_Allocate>
  542. ];
  543. }
  544. def OMP_Master : Directive<"master"> {}
  545. def OMP_Critical : Directive<"critical"> {
  546. let allowedClauses = [
  547. VersionedClause<OMPC_Hint>
  548. ];
  549. }
  550. def OMP_TaskYield : Directive<"taskyield"> {}
  551. def OMP_Barrier : Directive<"barrier"> {}
  552. def OMP_Error : Directive<"error"> {
  553. let allowedClauses = [
  554. VersionedClause<OMPC_At, 51>,
  555. VersionedClause<OMPC_Severity, 51>,
  556. VersionedClause<OMPC_Message, 51>
  557. ];
  558. }
  559. def OMP_TaskWait : Directive<"taskwait"> {
  560. let allowedClauses = [
  561. VersionedClause<OMPC_Depend, 50>,
  562. VersionedClause<OMPC_NoWait, 51>
  563. ];
  564. }
  565. def OMP_TaskGroup : Directive<"taskgroup"> {
  566. let allowedClauses = [
  567. VersionedClause<OMPC_TaskReduction, 50>,
  568. VersionedClause<OMPC_Allocate, 50>
  569. ];
  570. }
  571. def OMP_Flush : Directive<"flush"> {
  572. let allowedOnceClauses = [
  573. VersionedClause<OMPC_AcqRel, 50>,
  574. VersionedClause<OMPC_Acquire, 50>,
  575. VersionedClause<OMPC_Release, 50>,
  576. // TODO This should ne `none` instead. Comment carried over from
  577. // OMPKinds.def.
  578. VersionedClause<OMPC_Flush>
  579. ];
  580. }
  581. def OMP_Ordered : Directive<"ordered"> {
  582. let allowedClauses = [
  583. VersionedClause<OMPC_Depend>
  584. ];
  585. let allowedOnceClauses = [
  586. VersionedClause<OMPC_Threads>,
  587. VersionedClause<OMPC_Simd>
  588. ];
  589. }
  590. def OMP_Atomic : Directive<"atomic"> {
  591. let allowedClauses = [
  592. VersionedClause<OMPC_Read>,
  593. VersionedClause<OMPC_Write>,
  594. VersionedClause<OMPC_Update>,
  595. VersionedClause<OMPC_Capture>,
  596. VersionedClause<OMPC_Compare, 51>
  597. ];
  598. let allowedOnceClauses = [
  599. VersionedClause<OMPC_SeqCst>,
  600. VersionedClause<OMPC_AcqRel, 50>,
  601. VersionedClause<OMPC_Acquire, 50>,
  602. VersionedClause<OMPC_Release, 50>,
  603. VersionedClause<OMPC_Relaxed, 50>,
  604. VersionedClause<OMPC_Hint, 50>
  605. ];
  606. }
  607. def OMP_Target : Directive<"target"> {
  608. let allowedClauses = [
  609. VersionedClause<OMPC_If>,
  610. VersionedClause<OMPC_Map>,
  611. VersionedClause<OMPC_Private>,
  612. VersionedClause<OMPC_Depend>,
  613. VersionedClause<OMPC_FirstPrivate>,
  614. VersionedClause<OMPC_IsDevicePtr>,
  615. VersionedClause<OMPC_HasDeviceAddr, 51>,
  616. VersionedClause<OMPC_Reduction>,
  617. VersionedClause<OMPC_InReduction, 50>,
  618. VersionedClause<OMPC_Allocate>,
  619. VersionedClause<OMPC_UsesAllocators, 50>
  620. ];
  621. let allowedOnceClauses = [
  622. VersionedClause<OMPC_Device>,
  623. VersionedClause<OMPC_ThreadLimit, 51>,
  624. VersionedClause<OMPC_DefaultMap>,
  625. VersionedClause<OMPC_NoWait>,
  626. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  627. ];
  628. }
  629. def OMP_Teams : Directive<"teams"> {
  630. let allowedClauses = [
  631. VersionedClause<OMPC_Private>,
  632. VersionedClause<OMPC_FirstPrivate>,
  633. VersionedClause<OMPC_Shared>,
  634. VersionedClause<OMPC_Reduction>,
  635. VersionedClause<OMPC_Allocate>
  636. ];
  637. let allowedOnceClauses = [
  638. VersionedClause<OMPC_Default>,
  639. VersionedClause<OMPC_NumTeams>,
  640. VersionedClause<OMPC_ThreadLimit>
  641. ];
  642. }
  643. def OMP_Cancel : Directive<"cancel"> {
  644. let allowedClauses = [
  645. VersionedClause<OMPC_If>
  646. ];
  647. }
  648. def OMP_Requires : Directive<"requires"> {
  649. let allowedOnceClauses = [
  650. VersionedClause<OMPC_UnifiedAddress>,
  651. VersionedClause<OMPC_UnifiedSharedMemory>,
  652. // OpenMP 5.2 Spec: If an implementation is not supporting a requirement
  653. // (reverse offload in this case) then it should give compile-time error
  654. // termination.
  655. // Seeting supported version for reverse_offload to a distant future version
  656. // 9.9 so that its partial support can be tested in the meantime.
  657. //
  658. // TODO: Correct this supprted version number whenever complete
  659. // implementation of reverse_offload is available.
  660. VersionedClause<OMPC_ReverseOffload, 99>,
  661. VersionedClause<OMPC_DynamicAllocators>,
  662. VersionedClause<OMPC_AtomicDefaultMemOrder>
  663. ];
  664. }
  665. def OMP_Nothing : Directive<"nothing"> {}
  666. def OMP_TargetData : Directive<"target data"> {
  667. let allowedClauses = [
  668. VersionedClause<OMPC_UseDevicePtr>,
  669. VersionedClause<OMPC_UseDeviceAddr, 50>
  670. ];
  671. let allowedOnceClauses = [
  672. VersionedClause<OMPC_Device>,
  673. VersionedClause<OMPC_If>
  674. ];
  675. let requiredClauses = [
  676. VersionedClause<OMPC_Map>
  677. ];
  678. }
  679. def OMP_TargetEnterData : Directive<"target enter data"> {
  680. let allowedClauses = [
  681. VersionedClause<OMPC_Depend>
  682. ];
  683. let allowedOnceClauses = [
  684. VersionedClause<OMPC_If>,
  685. VersionedClause<OMPC_Device>,
  686. VersionedClause<OMPC_NoWait>
  687. ];
  688. let requiredClauses = [
  689. VersionedClause<OMPC_Map>
  690. ];
  691. }
  692. def OMP_TargetExitData : Directive<"target exit data"> {
  693. let allowedClauses = [
  694. VersionedClause<OMPC_Depend>
  695. ];
  696. let allowedOnceClauses = [
  697. VersionedClause<OMPC_Device>,
  698. VersionedClause<OMPC_If>,
  699. VersionedClause<OMPC_NoWait>
  700. ];
  701. let requiredClauses = [
  702. VersionedClause<OMPC_Map>
  703. ];
  704. }
  705. def OMP_TargetParallel : Directive<"target parallel"> {
  706. let allowedClauses = [
  707. VersionedClause<OMPC_Map>,
  708. VersionedClause<OMPC_NoWait>,
  709. VersionedClause<OMPC_Depend>,
  710. VersionedClause<OMPC_Private>,
  711. VersionedClause<OMPC_FirstPrivate>,
  712. VersionedClause<OMPC_Default>,
  713. VersionedClause<OMPC_Shared>,
  714. VersionedClause<OMPC_Reduction>,
  715. VersionedClause<OMPC_IsDevicePtr>,
  716. VersionedClause<OMPC_HasDeviceAddr, 51>,
  717. VersionedClause<OMPC_Allocate>,
  718. VersionedClause<OMPC_UsesAllocators, 50>
  719. ];
  720. let allowedOnceClauses = [
  721. VersionedClause<OMPC_DefaultMap>,
  722. VersionedClause<OMPC_Device>,
  723. VersionedClause<OMPC_If>,
  724. VersionedClause<OMPC_NumThreads>,
  725. VersionedClause<OMPC_ProcBind>,
  726. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  727. ];
  728. }
  729. def OMP_TargetParallelFor : Directive<"target parallel for"> {
  730. let allowedClauses = [
  731. VersionedClause<OMPC_If>,
  732. VersionedClause<OMPC_Device>,
  733. VersionedClause<OMPC_Map>,
  734. VersionedClause<OMPC_Private>,
  735. VersionedClause<OMPC_FirstPrivate>,
  736. VersionedClause<OMPC_LastPrivate>,
  737. VersionedClause<OMPC_NoWait>,
  738. VersionedClause<OMPC_Depend>,
  739. VersionedClause<OMPC_DefaultMap>,
  740. VersionedClause<OMPC_NumThreads>,
  741. VersionedClause<OMPC_Default>,
  742. VersionedClause<OMPC_ProcBind>,
  743. VersionedClause<OMPC_Shared>,
  744. VersionedClause<OMPC_Reduction>,
  745. VersionedClause<OMPC_Collapse>,
  746. VersionedClause<OMPC_Schedule>,
  747. VersionedClause<OMPC_Ordered>,
  748. VersionedClause<OMPC_Linear>,
  749. VersionedClause<OMPC_IsDevicePtr>,
  750. VersionedClause<OMPC_HasDeviceAddr, 51>,
  751. VersionedClause<OMPC_Allocate>,
  752. VersionedClause<OMPC_Order, 50>,
  753. VersionedClause<OMPC_UsesAllocators, 50>
  754. ];
  755. let allowedOnceClauses = [
  756. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  757. ];
  758. }
  759. def OMP_TargetParallelDo : Directive<"target parallel do"> {
  760. let allowedClauses = [
  761. VersionedClause<OMPC_Map>,
  762. VersionedClause<OMPC_Private>,
  763. VersionedClause<OMPC_FirstPrivate>,
  764. VersionedClause<OMPC_LastPrivate>,
  765. VersionedClause<OMPC_Depend>,
  766. VersionedClause<OMPC_Shared>,
  767. VersionedClause<OMPC_Reduction>,
  768. VersionedClause<OMPC_Linear>,
  769. VersionedClause<OMPC_IsDevicePtr>,
  770. VersionedClause<OMPC_HasDeviceAddr, 51>,
  771. VersionedClause<OMPC_Allocator>,
  772. VersionedClause<OMPC_Order>,
  773. VersionedClause<OMPC_UsesAllocators>,
  774. VersionedClause<OMPC_Default>,
  775. VersionedClause<OMPC_Copyin>
  776. ];
  777. let allowedOnceClauses = [
  778. VersionedClause<OMPC_If>,
  779. VersionedClause<OMPC_NumThreads>,
  780. VersionedClause<OMPC_ProcBind>,
  781. VersionedClause<OMPC_Device>,
  782. VersionedClause<OMPC_DefaultMap>,
  783. VersionedClause<OMPC_Schedule>,
  784. VersionedClause<OMPC_Collapse>,
  785. VersionedClause<OMPC_Ordered>,
  786. VersionedClause<OMPC_NoWait>
  787. ];
  788. }
  789. def OMP_TargetUpdate : Directive<"target update"> {
  790. let allowedClauses = [
  791. VersionedClause<OMPC_To>,
  792. VersionedClause<OMPC_From>,
  793. VersionedClause<OMPC_Depend>
  794. ];
  795. let allowedOnceClauses = [
  796. VersionedClause<OMPC_Device>,
  797. VersionedClause<OMPC_If>,
  798. VersionedClause<OMPC_NoWait>
  799. ];
  800. }
  801. def OMP_ParallelFor : Directive<"parallel for"> {
  802. let allowedClauses = [
  803. VersionedClause<OMPC_If>,
  804. VersionedClause<OMPC_NumThreads>,
  805. VersionedClause<OMPC_Default>,
  806. VersionedClause<OMPC_ProcBind>,
  807. VersionedClause<OMPC_Private>,
  808. VersionedClause<OMPC_FirstPrivate>,
  809. VersionedClause<OMPC_Shared>,
  810. VersionedClause<OMPC_Reduction>,
  811. VersionedClause<OMPC_Copyin>,
  812. VersionedClause<OMPC_LastPrivate>,
  813. VersionedClause<OMPC_Collapse>,
  814. VersionedClause<OMPC_Schedule>,
  815. VersionedClause<OMPC_Ordered>,
  816. VersionedClause<OMPC_Linear>,
  817. VersionedClause<OMPC_Allocate>,
  818. VersionedClause<OMPC_Order, 50>
  819. ];
  820. }
  821. def OMP_ParallelDo : Directive<"parallel do"> {
  822. let allowedClauses = [
  823. VersionedClause<OMPC_Default>,
  824. VersionedClause<OMPC_Private>,
  825. VersionedClause<OMPC_FirstPrivate>,
  826. VersionedClause<OMPC_Shared>,
  827. VersionedClause<OMPC_Reduction>,
  828. VersionedClause<OMPC_Copyin>,
  829. VersionedClause<OMPC_LastPrivate>,
  830. VersionedClause<OMPC_Linear>
  831. ];
  832. let allowedOnceClauses = [
  833. VersionedClause<OMPC_If>,
  834. VersionedClause<OMPC_NumThreads>,
  835. VersionedClause<OMPC_ProcBind>,
  836. VersionedClause<OMPC_Schedule>,
  837. VersionedClause<OMPC_Ordered>,
  838. VersionedClause<OMPC_Collapse>
  839. ];
  840. }
  841. def OMP_ParallelForSimd : Directive<"parallel for simd"> {
  842. let allowedClauses = [
  843. VersionedClause<OMPC_If>,
  844. VersionedClause<OMPC_NumThreads>,
  845. VersionedClause<OMPC_Default>,
  846. VersionedClause<OMPC_ProcBind>,
  847. VersionedClause<OMPC_Private>,
  848. VersionedClause<OMPC_FirstPrivate>,
  849. VersionedClause<OMPC_Shared>,
  850. VersionedClause<OMPC_Reduction>,
  851. VersionedClause<OMPC_Copyin>,
  852. VersionedClause<OMPC_LastPrivate>,
  853. VersionedClause<OMPC_Collapse>,
  854. VersionedClause<OMPC_Schedule>,
  855. VersionedClause<OMPC_SafeLen>,
  856. VersionedClause<OMPC_SimdLen>,
  857. VersionedClause<OMPC_Linear>,
  858. VersionedClause<OMPC_Aligned>,
  859. VersionedClause<OMPC_Ordered>,
  860. VersionedClause<OMPC_Allocate>,
  861. VersionedClause<OMPC_NonTemporal, 50>,
  862. VersionedClause<OMPC_Order, 50>
  863. ];
  864. }
  865. def OMP_ParallelDoSimd : Directive<"parallel do simd"> {
  866. let allowedClauses = [
  867. VersionedClause<OMPC_Default>,
  868. VersionedClause<OMPC_Private>,
  869. VersionedClause<OMPC_FirstPrivate>,
  870. VersionedClause<OMPC_Shared>,
  871. VersionedClause<OMPC_Reduction>,
  872. VersionedClause<OMPC_Copyin>,
  873. VersionedClause<OMPC_LastPrivate>,
  874. VersionedClause<OMPC_Linear>,
  875. VersionedClause<OMPC_Aligned>,
  876. VersionedClause<OMPC_Allocate>,
  877. VersionedClause<OMPC_NonTemporal>,
  878. VersionedClause<OMPC_Order>
  879. ];
  880. let allowedOnceClauses = [
  881. VersionedClause<OMPC_If>,
  882. VersionedClause<OMPC_NumThreads>,
  883. VersionedClause<OMPC_ProcBind>,
  884. VersionedClause<OMPC_Schedule>,
  885. VersionedClause<OMPC_Ordered>,
  886. VersionedClause<OMPC_Collapse>,
  887. VersionedClause<OMPC_SafeLen>,
  888. VersionedClause<OMPC_SimdLen>
  889. ];
  890. }
  891. def OMP_ParallelMaster : Directive<"parallel master"> {
  892. let allowedClauses = [
  893. VersionedClause<OMPC_If>,
  894. VersionedClause<OMPC_NumThreads>,
  895. VersionedClause<OMPC_Default>,
  896. VersionedClause<OMPC_Private>,
  897. VersionedClause<OMPC_FirstPrivate>,
  898. VersionedClause<OMPC_Shared>,
  899. VersionedClause<OMPC_Copyin>,
  900. VersionedClause<OMPC_Reduction>,
  901. VersionedClause<OMPC_ProcBind>,
  902. VersionedClause<OMPC_Allocate>
  903. ];
  904. }
  905. def OMP_ParallelMasked : Directive<"parallel masked"> {
  906. let allowedClauses = [
  907. VersionedClause<OMPC_If>,
  908. VersionedClause<OMPC_NumThreads>,
  909. VersionedClause<OMPC_Default>,
  910. VersionedClause<OMPC_Private>,
  911. VersionedClause<OMPC_FirstPrivate>,
  912. VersionedClause<OMPC_Shared>,
  913. VersionedClause<OMPC_Copyin>,
  914. VersionedClause<OMPC_Reduction>,
  915. VersionedClause<OMPC_ProcBind>,
  916. VersionedClause<OMPC_Allocate>,
  917. VersionedClause<OMPC_Filter>
  918. ];
  919. }
  920. def OMP_ParallelSections : Directive<"parallel sections"> {
  921. let allowedClauses = [
  922. VersionedClause<OMPC_If>,
  923. VersionedClause<OMPC_Default>,
  924. VersionedClause<OMPC_ProcBind>,
  925. VersionedClause<OMPC_Private>,
  926. VersionedClause<OMPC_FirstPrivate>,
  927. VersionedClause<OMPC_Shared>,
  928. VersionedClause<OMPC_Reduction>,
  929. VersionedClause<OMPC_Copyin>,
  930. VersionedClause<OMPC_LastPrivate>,
  931. VersionedClause<OMPC_Allocate>
  932. ];
  933. let allowedOnceClauses = [
  934. VersionedClause<OMPC_NumThreads>
  935. ];
  936. }
  937. def OMP_ForSimd : Directive<"for simd"> {
  938. let allowedClauses = [
  939. VersionedClause<OMPC_Private>,
  940. VersionedClause<OMPC_FirstPrivate>,
  941. VersionedClause<OMPC_LastPrivate>,
  942. VersionedClause<OMPC_Reduction>,
  943. VersionedClause<OMPC_Schedule>,
  944. VersionedClause<OMPC_Collapse>,
  945. VersionedClause<OMPC_NoWait>,
  946. VersionedClause<OMPC_SafeLen>,
  947. VersionedClause<OMPC_SimdLen>,
  948. VersionedClause<OMPC_Linear>,
  949. VersionedClause<OMPC_Aligned>,
  950. VersionedClause<OMPC_Ordered>,
  951. VersionedClause<OMPC_Allocate>,
  952. VersionedClause<OMPC_If, 50>,
  953. VersionedClause<OMPC_NonTemporal, 50>,
  954. VersionedClause<OMPC_Order, 50>,
  955. ];
  956. }
  957. def OMP_DoSimd : Directive<"do simd"> {
  958. let allowedClauses = [
  959. VersionedClause<OMPC_Aligned>,
  960. VersionedClause<OMPC_Private>,
  961. VersionedClause<OMPC_FirstPrivate>,
  962. VersionedClause<OMPC_LastPrivate>,
  963. VersionedClause<OMPC_Linear>,
  964. VersionedClause<OMPC_Reduction>
  965. ];
  966. let allowedOnceClauses = [
  967. VersionedClause<OMPC_Schedule>,
  968. VersionedClause<OMPC_Collapse>,
  969. VersionedClause<OMPC_Ordered>,
  970. VersionedClause<OMPC_SafeLen>,
  971. VersionedClause<OMPC_SimdLen>,
  972. VersionedClause<OMPC_NoWait>
  973. ];
  974. }
  975. def OMP_CancellationPoint : Directive<"cancellation point"> {}
  976. def OMP_DeclareReduction : Directive<"declare reduction"> {}
  977. def OMP_DeclareMapper : Directive<"declare mapper"> {
  978. let allowedClauses = [
  979. VersionedClause<OMPC_Map>
  980. ];
  981. }
  982. def OMP_DeclareSimd : Directive<"declare simd"> {
  983. let allowedClauses = [
  984. VersionedClause<OMPC_Linear>,
  985. VersionedClause<OMPC_Aligned>,
  986. VersionedClause<OMPC_Uniform>
  987. ];
  988. let allowedOnceClauses = [
  989. VersionedClause<OMPC_SimdLen>
  990. ];
  991. let allowedExclusiveClauses = [
  992. VersionedClause<OMPC_Inbranch>,
  993. VersionedClause<OMPC_Notinbranch>
  994. ];
  995. }
  996. def OMP_TaskLoop : Directive<"taskloop"> {
  997. let allowedClauses = [
  998. VersionedClause<OMPC_Shared>,
  999. VersionedClause<OMPC_Private>,
  1000. VersionedClause<OMPC_FirstPrivate>,
  1001. VersionedClause<OMPC_LastPrivate>,
  1002. VersionedClause<OMPC_Untied>,
  1003. VersionedClause<OMPC_Mergeable>,
  1004. VersionedClause<OMPC_NoGroup>,
  1005. VersionedClause<OMPC_Reduction>,
  1006. VersionedClause<OMPC_InReduction>,
  1007. VersionedClause<OMPC_Allocate>
  1008. ];
  1009. let allowedOnceClauses = [
  1010. VersionedClause<OMPC_Default>,
  1011. VersionedClause<OMPC_If>,
  1012. VersionedClause<OMPC_Collapse>,
  1013. VersionedClause<OMPC_Final>,
  1014. VersionedClause<OMPC_Priority>,
  1015. ];
  1016. let allowedExclusiveClauses = [
  1017. VersionedClause<OMPC_GrainSize>,
  1018. VersionedClause<OMPC_NumTasks>
  1019. ];
  1020. }
  1021. def OMP_TaskLoopSimd : Directive<"taskloop simd"> {
  1022. let allowedClauses = [
  1023. VersionedClause<OMPC_Aligned>,
  1024. VersionedClause<OMPC_Allocate>,
  1025. VersionedClause<OMPC_Default>,
  1026. VersionedClause<OMPC_FirstPrivate>,
  1027. VersionedClause<OMPC_InReduction>,
  1028. VersionedClause<OMPC_LastPrivate>,
  1029. VersionedClause<OMPC_Linear>,
  1030. VersionedClause<OMPC_Mergeable>,
  1031. VersionedClause<OMPC_NoGroup>,
  1032. VersionedClause<OMPC_NonTemporal, 50>,
  1033. VersionedClause<OMPC_Order, 50>,
  1034. VersionedClause<OMPC_Private>,
  1035. VersionedClause<OMPC_Reduction>,
  1036. VersionedClause<OMPC_Shared>,
  1037. VersionedClause<OMPC_Untied>
  1038. ];
  1039. let allowedOnceClauses = [
  1040. VersionedClause<OMPC_If>,
  1041. VersionedClause<OMPC_Collapse>,
  1042. VersionedClause<OMPC_SafeLen>,
  1043. VersionedClause<OMPC_SimdLen>,
  1044. VersionedClause<OMPC_Final>,
  1045. VersionedClause<OMPC_Priority>
  1046. ];
  1047. let allowedExclusiveClauses = [
  1048. VersionedClause<OMPC_GrainSize>,
  1049. VersionedClause<OMPC_NumTasks>
  1050. ];
  1051. }
  1052. def OMP_Distribute : Directive<"distribute"> {
  1053. let allowedClauses = [
  1054. VersionedClause<OMPC_Private>,
  1055. VersionedClause<OMPC_FirstPrivate>,
  1056. VersionedClause<OMPC_LastPrivate>,
  1057. VersionedClause<OMPC_Allocate>
  1058. ];
  1059. let allowedOnceClauses = [
  1060. VersionedClause<OMPC_Collapse>,
  1061. VersionedClause<OMPC_DistSchedule>
  1062. ];
  1063. }
  1064. def OMP_BeginDeclareTarget : Directive<"begin declare target"> {
  1065. let allowedClauses = [
  1066. VersionedClause<OMPC_To>,
  1067. VersionedClause<OMPC_Link>,
  1068. VersionedClause<OMPC_DeviceType>,
  1069. VersionedClause<OMPC_Indirect>
  1070. ];
  1071. }
  1072. def OMP_DeclareTarget : Directive<"declare target"> {
  1073. let allowedClauses = [
  1074. VersionedClause<OMPC_To>,
  1075. VersionedClause<OMPC_Link>,
  1076. VersionedClause<OMPC_Indirect>
  1077. ];
  1078. }
  1079. def OMP_EndDeclareTarget : Directive<"end declare target"> {}
  1080. def OMP_DistributeParallelFor : Directive<"distribute parallel for"> {
  1081. let allowedClauses = [
  1082. VersionedClause<OMPC_FirstPrivate>,
  1083. VersionedClause<OMPC_LastPrivate>,
  1084. VersionedClause<OMPC_Collapse>,
  1085. VersionedClause<OMPC_DistSchedule>,
  1086. VersionedClause<OMPC_If>,
  1087. VersionedClause<OMPC_NumThreads>,
  1088. VersionedClause<OMPC_Default>,
  1089. VersionedClause<OMPC_ProcBind>,
  1090. VersionedClause<OMPC_Private>,
  1091. VersionedClause<OMPC_Shared>,
  1092. VersionedClause<OMPC_Reduction>,
  1093. VersionedClause<OMPC_Copyin>,
  1094. VersionedClause<OMPC_Schedule>,
  1095. VersionedClause<OMPC_Allocate>,
  1096. VersionedClause<OMPC_Order, 50>
  1097. ];
  1098. }
  1099. def OMP_DistributeParallelDo : Directive<"distribute parallel do"> {
  1100. let allowedClauses = [
  1101. VersionedClause<OMPC_Private>,
  1102. VersionedClause<OMPC_FirstPrivate>,
  1103. VersionedClause<OMPC_LastPrivate>,
  1104. VersionedClause<OMPC_Allocate>,
  1105. VersionedClause<OMPC_Order>,
  1106. VersionedClause<OMPC_Default>,
  1107. VersionedClause<OMPC_Shared>,
  1108. VersionedClause<OMPC_Reduction>,
  1109. VersionedClause<OMPC_Copyin>,
  1110. VersionedClause<OMPC_Linear>
  1111. ];
  1112. let allowedOnceClauses = [
  1113. VersionedClause<OMPC_Collapse>,
  1114. VersionedClause<OMPC_DistSchedule>,
  1115. VersionedClause<OMPC_If>,
  1116. VersionedClause<OMPC_NumThreads>,
  1117. VersionedClause<OMPC_ProcBind>,
  1118. VersionedClause<OMPC_Schedule>,
  1119. VersionedClause<OMPC_Ordered>
  1120. ];
  1121. }
  1122. def OMP_DistributeParallelForSimd : Directive<"distribute parallel for simd"> {
  1123. let allowedClauses = [
  1124. VersionedClause<OMPC_FirstPrivate>,
  1125. VersionedClause<OMPC_LastPrivate>,
  1126. VersionedClause<OMPC_Collapse>,
  1127. VersionedClause<OMPC_DistSchedule>,
  1128. VersionedClause<OMPC_If>,
  1129. VersionedClause<OMPC_NumThreads>,
  1130. VersionedClause<OMPC_Default>,
  1131. VersionedClause<OMPC_ProcBind>,
  1132. VersionedClause<OMPC_Private>,
  1133. VersionedClause<OMPC_Shared>,
  1134. VersionedClause<OMPC_Reduction>,
  1135. VersionedClause<OMPC_Copyin>,
  1136. VersionedClause<OMPC_Schedule>,
  1137. VersionedClause<OMPC_Linear>,
  1138. VersionedClause<OMPC_Aligned>,
  1139. VersionedClause<OMPC_SafeLen>,
  1140. VersionedClause<OMPC_SimdLen>,
  1141. VersionedClause<OMPC_Allocate>,
  1142. VersionedClause<OMPC_NonTemporal, 50>,
  1143. VersionedClause<OMPC_Order, 50>
  1144. ];
  1145. }
  1146. def OMP_DistributeParallelDoSimd : Directive<"distribute parallel do simd"> {
  1147. let allowedClauses = [
  1148. VersionedClause<OMPC_FirstPrivate>,
  1149. VersionedClause<OMPC_LastPrivate>,
  1150. VersionedClause<OMPC_Collapse>,
  1151. VersionedClause<OMPC_DistSchedule>,
  1152. VersionedClause<OMPC_If>,
  1153. VersionedClause<OMPC_NumThreads>,
  1154. VersionedClause<OMPC_Default>,
  1155. VersionedClause<OMPC_ProcBind>,
  1156. VersionedClause<OMPC_Private>,
  1157. VersionedClause<OMPC_Shared>,
  1158. VersionedClause<OMPC_Reduction>,
  1159. VersionedClause<OMPC_Copyin>,
  1160. VersionedClause<OMPC_Schedule>,
  1161. VersionedClause<OMPC_Linear>,
  1162. VersionedClause<OMPC_Aligned>,
  1163. VersionedClause<OMPC_SafeLen>,
  1164. VersionedClause<OMPC_SimdLen>,
  1165. VersionedClause<OMPC_Allocate>,
  1166. VersionedClause<OMPC_NonTemporal>,
  1167. VersionedClause<OMPC_Order>
  1168. ];
  1169. }
  1170. def OMP_DistributeSimd : Directive<"distribute simd"> {
  1171. let allowedClauses = [
  1172. VersionedClause<OMPC_Aligned>,
  1173. VersionedClause<OMPC_Allocate>,
  1174. VersionedClause<OMPC_Copyin>,
  1175. VersionedClause<OMPC_Default>,
  1176. VersionedClause<OMPC_Linear>,
  1177. VersionedClause<OMPC_FirstPrivate>,
  1178. VersionedClause<OMPC_LastPrivate>,
  1179. VersionedClause<OMPC_NonTemporal, 50>,
  1180. VersionedClause<OMPC_Order, 50>,
  1181. VersionedClause<OMPC_Private>,
  1182. VersionedClause<OMPC_Reduction>
  1183. ];
  1184. let allowedOnceClauses = [
  1185. VersionedClause<OMPC_Collapse>,
  1186. VersionedClause<OMPC_DistSchedule>,
  1187. VersionedClause<OMPC_If, 50>,
  1188. VersionedClause<OMPC_NumThreads>,
  1189. VersionedClause<OMPC_Ordered>,
  1190. VersionedClause<OMPC_ProcBind>,
  1191. VersionedClause<OMPC_Schedule>,
  1192. VersionedClause<OMPC_SafeLen>,
  1193. VersionedClause<OMPC_SimdLen>
  1194. ];
  1195. }
  1196. def OMP_TargetParallelForSimd : Directive<"target parallel for simd"> {
  1197. let allowedClauses = [
  1198. VersionedClause<OMPC_If>,
  1199. VersionedClause<OMPC_Device>,
  1200. VersionedClause<OMPC_Map>,
  1201. VersionedClause<OMPC_Private>,
  1202. VersionedClause<OMPC_FirstPrivate>,
  1203. VersionedClause<OMPC_LastPrivate>,
  1204. VersionedClause<OMPC_NoWait>,
  1205. VersionedClause<OMPC_Depend>,
  1206. VersionedClause<OMPC_DefaultMap>,
  1207. VersionedClause<OMPC_NumThreads>,
  1208. VersionedClause<OMPC_Default>,
  1209. VersionedClause<OMPC_ProcBind>,
  1210. VersionedClause<OMPC_Shared>,
  1211. VersionedClause<OMPC_Reduction>,
  1212. VersionedClause<OMPC_Collapse>,
  1213. VersionedClause<OMPC_Schedule>,
  1214. VersionedClause<OMPC_Ordered>,
  1215. VersionedClause<OMPC_Linear>,
  1216. VersionedClause<OMPC_SafeLen>,
  1217. VersionedClause<OMPC_SimdLen>,
  1218. VersionedClause<OMPC_Aligned>,
  1219. VersionedClause<OMPC_IsDevicePtr>,
  1220. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1221. VersionedClause<OMPC_Allocate>,
  1222. VersionedClause<OMPC_NonTemporal, 50>,
  1223. VersionedClause<OMPC_Order, 50>,
  1224. VersionedClause<OMPC_UsesAllocators, 50>
  1225. ];
  1226. let allowedOnceClauses = [
  1227. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  1228. ];
  1229. }
  1230. def OMP_TargetParallelDoSimd : Directive<"target parallel do simd"> {
  1231. let allowedClauses = [
  1232. VersionedClause<OMPC_If>,
  1233. VersionedClause<OMPC_Device>,
  1234. VersionedClause<OMPC_Map>,
  1235. VersionedClause<OMPC_Private>,
  1236. VersionedClause<OMPC_FirstPrivate>,
  1237. VersionedClause<OMPC_LastPrivate>,
  1238. VersionedClause<OMPC_NoWait>,
  1239. VersionedClause<OMPC_Depend>,
  1240. VersionedClause<OMPC_DefaultMap>,
  1241. VersionedClause<OMPC_NumThreads>,
  1242. VersionedClause<OMPC_Default>,
  1243. VersionedClause<OMPC_ProcBind>,
  1244. VersionedClause<OMPC_Shared>,
  1245. VersionedClause<OMPC_Reduction>,
  1246. VersionedClause<OMPC_Collapse>,
  1247. VersionedClause<OMPC_Schedule>,
  1248. VersionedClause<OMPC_Ordered>,
  1249. VersionedClause<OMPC_Linear>,
  1250. VersionedClause<OMPC_SafeLen>,
  1251. VersionedClause<OMPC_SimdLen>,
  1252. VersionedClause<OMPC_Aligned>,
  1253. VersionedClause<OMPC_IsDevicePtr>,
  1254. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1255. VersionedClause<OMPC_Allocate>,
  1256. VersionedClause<OMPC_NonTemporal>,
  1257. VersionedClause<OMPC_Order>,
  1258. VersionedClause<OMPC_UsesAllocators>
  1259. ];
  1260. }
  1261. def OMP_TargetSimd : Directive<"target simd"> {
  1262. let allowedClauses = [
  1263. VersionedClause<OMPC_Aligned>,
  1264. VersionedClause<OMPC_Allocate>,
  1265. VersionedClause<OMPC_Depend>,
  1266. VersionedClause<OMPC_FirstPrivate>,
  1267. VersionedClause<OMPC_IsDevicePtr>,
  1268. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1269. VersionedClause<OMPC_LastPrivate>,
  1270. VersionedClause<OMPC_Linear>,
  1271. VersionedClause<OMPC_Map>,
  1272. VersionedClause<OMPC_NonTemporal, 50>,
  1273. VersionedClause<OMPC_NoWait>,
  1274. VersionedClause<OMPC_Order, 50>,
  1275. VersionedClause<OMPC_Private>,
  1276. VersionedClause<OMPC_Reduction>,
  1277. VersionedClause<OMPC_Shared>,
  1278. VersionedClause<OMPC_UsesAllocators, 50>
  1279. ];
  1280. let allowedOnceClauses = [
  1281. VersionedClause<OMPC_Collapse>,
  1282. VersionedClause<OMPC_SafeLen>,
  1283. VersionedClause<OMPC_SimdLen>,
  1284. VersionedClause<OMPC_If>,
  1285. VersionedClause<OMPC_NumThreads>,
  1286. VersionedClause<OMPC_ProcBind>,
  1287. VersionedClause<OMPC_Device>,
  1288. VersionedClause<OMPC_DefaultMap>,
  1289. VersionedClause<OMPC_Schedule>,
  1290. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  1291. ];
  1292. }
  1293. def OMP_TeamsDistribute : Directive<"teams distribute"> {
  1294. let allowedClauses = [
  1295. VersionedClause<OMPC_Default>,
  1296. VersionedClause<OMPC_Private>,
  1297. VersionedClause<OMPC_FirstPrivate>,
  1298. VersionedClause<OMPC_Shared>,
  1299. VersionedClause<OMPC_Reduction>,
  1300. VersionedClause<OMPC_NumTeams>,
  1301. VersionedClause<OMPC_ThreadLimit>,
  1302. VersionedClause<OMPC_LastPrivate>,
  1303. VersionedClause<OMPC_Collapse>,
  1304. VersionedClause<OMPC_DistSchedule>,
  1305. VersionedClause<OMPC_Allocate>
  1306. ];
  1307. }
  1308. def OMP_TeamsDistributeSimd : Directive<"teams distribute simd"> {
  1309. let allowedClauses = [
  1310. VersionedClause<OMPC_Aligned>,
  1311. VersionedClause<OMPC_Allocate>,
  1312. VersionedClause<OMPC_FirstPrivate>,
  1313. VersionedClause<OMPC_LastPrivate>,
  1314. VersionedClause<OMPC_Linear>,
  1315. VersionedClause<OMPC_NonTemporal, 50>,
  1316. VersionedClause<OMPC_Order, 50>,
  1317. VersionedClause<OMPC_Private>,
  1318. VersionedClause<OMPC_Reduction>,
  1319. VersionedClause<OMPC_Shared>
  1320. ];
  1321. let allowedOnceClauses = [
  1322. VersionedClause<OMPC_Collapse>,
  1323. VersionedClause<OMPC_Default>,
  1324. VersionedClause<OMPC_DistSchedule>,
  1325. VersionedClause<OMPC_If, 50>,
  1326. VersionedClause<OMPC_NumTeams>,
  1327. VersionedClause<OMPC_SafeLen>,
  1328. VersionedClause<OMPC_SimdLen>,
  1329. VersionedClause<OMPC_ThreadLimit>
  1330. ];
  1331. }
  1332. def OMP_TeamsDistributeParallelForSimd :
  1333. Directive<"teams distribute parallel for simd"> {
  1334. let allowedClauses = [
  1335. VersionedClause<OMPC_FirstPrivate>,
  1336. VersionedClause<OMPC_LastPrivate>,
  1337. VersionedClause<OMPC_Collapse>,
  1338. VersionedClause<OMPC_DistSchedule>,
  1339. VersionedClause<OMPC_If>,
  1340. VersionedClause<OMPC_NumThreads>,
  1341. VersionedClause<OMPC_Default>,
  1342. VersionedClause<OMPC_ProcBind>,
  1343. VersionedClause<OMPC_Private>,
  1344. VersionedClause<OMPC_Shared>,
  1345. VersionedClause<OMPC_Reduction>,
  1346. VersionedClause<OMPC_Schedule>,
  1347. VersionedClause<OMPC_Linear>,
  1348. VersionedClause<OMPC_Aligned>,
  1349. VersionedClause<OMPC_SafeLen>,
  1350. VersionedClause<OMPC_SimdLen>,
  1351. VersionedClause<OMPC_NumTeams>,
  1352. VersionedClause<OMPC_ThreadLimit>,
  1353. VersionedClause<OMPC_Allocate>,
  1354. VersionedClause<OMPC_NonTemporal, 50>,
  1355. VersionedClause<OMPC_Order, 50>
  1356. ];
  1357. }
  1358. def OMP_TeamsDistributeParallelDoSimd :
  1359. Directive<"teams distribute parallel do simd"> {
  1360. let allowedClauses = [
  1361. VersionedClause<OMPC_Private>,
  1362. VersionedClause<OMPC_FirstPrivate>,
  1363. VersionedClause<OMPC_LastPrivate>,
  1364. VersionedClause<OMPC_Allocate>,
  1365. VersionedClause<OMPC_Shared>,
  1366. VersionedClause<OMPC_Reduction>,
  1367. VersionedClause<OMPC_Linear>,
  1368. VersionedClause<OMPC_Order>,
  1369. VersionedClause<OMPC_Aligned>,
  1370. VersionedClause<OMPC_NonTemporal>
  1371. ];
  1372. let allowedOnceClauses = [
  1373. VersionedClause<OMPC_Default>,
  1374. VersionedClause<OMPC_NumTeams>,
  1375. VersionedClause<OMPC_ThreadLimit>,
  1376. VersionedClause<OMPC_Collapse>,
  1377. VersionedClause<OMPC_DistSchedule>,
  1378. VersionedClause<OMPC_NumThreads>,
  1379. VersionedClause<OMPC_ProcBind>,
  1380. VersionedClause<OMPC_Schedule>,
  1381. VersionedClause<OMPC_SafeLen>,
  1382. VersionedClause<OMPC_SimdLen>,
  1383. VersionedClause<OMPC_If>,
  1384. ];
  1385. }
  1386. def OMP_TeamsDistributeParallelFor :
  1387. Directive<"teams distribute parallel for"> {
  1388. let allowedClauses = [
  1389. VersionedClause<OMPC_FirstPrivate>,
  1390. VersionedClause<OMPC_LastPrivate>,
  1391. VersionedClause<OMPC_Collapse>,
  1392. VersionedClause<OMPC_DistSchedule>,
  1393. VersionedClause<OMPC_If>,
  1394. VersionedClause<OMPC_NumThreads>,
  1395. VersionedClause<OMPC_Default>,
  1396. VersionedClause<OMPC_ProcBind>,
  1397. VersionedClause<OMPC_Private>,
  1398. VersionedClause<OMPC_Shared>,
  1399. VersionedClause<OMPC_Reduction>,
  1400. VersionedClause<OMPC_Schedule>,
  1401. VersionedClause<OMPC_NumTeams>,
  1402. VersionedClause<OMPC_ThreadLimit>,
  1403. VersionedClause<OMPC_Copyin>,
  1404. VersionedClause<OMPC_Allocate>,
  1405. VersionedClause<OMPC_Order, 50>
  1406. ];
  1407. }
  1408. def OMP_TeamsDistributeParallelDo :
  1409. Directive<"teams distribute parallel do"> {
  1410. let allowedClauses = [
  1411. VersionedClause<OMPC_Private>,
  1412. VersionedClause<OMPC_FirstPrivate>,
  1413. VersionedClause<OMPC_LastPrivate>,
  1414. VersionedClause<OMPC_Shared>,
  1415. VersionedClause<OMPC_Reduction>,
  1416. VersionedClause<OMPC_Allocate>,
  1417. VersionedClause<OMPC_Copyin>,
  1418. VersionedClause<OMPC_Linear>
  1419. ];
  1420. let allowedOnceClauses = [
  1421. VersionedClause<OMPC_NumTeams>,
  1422. VersionedClause<OMPC_ThreadLimit>,
  1423. VersionedClause<OMPC_Default>,
  1424. VersionedClause<OMPC_Collapse>,
  1425. VersionedClause<OMPC_DistSchedule>,
  1426. VersionedClause<OMPC_Ordered>,
  1427. VersionedClause<OMPC_Order>,
  1428. VersionedClause<OMPC_If>,
  1429. VersionedClause<OMPC_NumThreads>,
  1430. VersionedClause<OMPC_ProcBind>,
  1431. VersionedClause<OMPC_Schedule>
  1432. ];
  1433. }
  1434. def OMP_TargetTeams : Directive<"target teams"> {
  1435. let allowedClauses = [
  1436. VersionedClause<OMPC_If>,
  1437. VersionedClause<OMPC_Map>,
  1438. VersionedClause<OMPC_Private>,
  1439. VersionedClause<OMPC_Depend>,
  1440. VersionedClause<OMPC_FirstPrivate>,
  1441. VersionedClause<OMPC_IsDevicePtr>,
  1442. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1443. VersionedClause<OMPC_Reduction>,
  1444. VersionedClause<OMPC_Allocate>,
  1445. VersionedClause<OMPC_UsesAllocators, 50>,
  1446. VersionedClause<OMPC_Shared>
  1447. ];
  1448. let allowedOnceClauses = [
  1449. VersionedClause<OMPC_Device>,
  1450. VersionedClause<OMPC_NoWait>,
  1451. VersionedClause<OMPC_DefaultMap>,
  1452. VersionedClause<OMPC_Default>,
  1453. VersionedClause<OMPC_NumTeams>,
  1454. VersionedClause<OMPC_ThreadLimit>,
  1455. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  1456. ];
  1457. }
  1458. def OMP_TargetTeamsDistribute : Directive<"target teams distribute"> {
  1459. let allowedClauses = [
  1460. VersionedClause<OMPC_If>,
  1461. VersionedClause<OMPC_Map>,
  1462. VersionedClause<OMPC_Private>,
  1463. VersionedClause<OMPC_Depend>,
  1464. VersionedClause<OMPC_FirstPrivate>,
  1465. VersionedClause<OMPC_IsDevicePtr>,
  1466. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1467. VersionedClause<OMPC_Reduction>,
  1468. VersionedClause<OMPC_Allocate>,
  1469. VersionedClause<OMPC_UsesAllocators, 50>,
  1470. VersionedClause<OMPC_Shared>,
  1471. VersionedClause<OMPC_LastPrivate>
  1472. ];
  1473. let allowedOnceClauses = [
  1474. VersionedClause<OMPC_Device>,
  1475. VersionedClause<OMPC_NoWait>,
  1476. VersionedClause<OMPC_DefaultMap>,
  1477. VersionedClause<OMPC_Default>,
  1478. VersionedClause<OMPC_NumTeams>,
  1479. VersionedClause<OMPC_ThreadLimit>,
  1480. VersionedClause<OMPC_Collapse>,
  1481. VersionedClause<OMPC_DistSchedule>,
  1482. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  1483. ];
  1484. }
  1485. def OMP_TargetTeamsDistributeParallelFor :
  1486. Directive<"target teams distribute parallel for"> {
  1487. let allowedClauses = [
  1488. VersionedClause<OMPC_If>,
  1489. VersionedClause<OMPC_Device>,
  1490. VersionedClause<OMPC_Map>,
  1491. VersionedClause<OMPC_Private>,
  1492. VersionedClause<OMPC_NoWait>,
  1493. VersionedClause<OMPC_Depend>,
  1494. VersionedClause<OMPC_DefaultMap>,
  1495. VersionedClause<OMPC_FirstPrivate>,
  1496. VersionedClause<OMPC_IsDevicePtr>,
  1497. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1498. VersionedClause<OMPC_Default>,
  1499. VersionedClause<OMPC_Shared>,
  1500. VersionedClause<OMPC_Reduction>,
  1501. VersionedClause<OMPC_NumTeams>,
  1502. VersionedClause<OMPC_ThreadLimit>,
  1503. VersionedClause<OMPC_LastPrivate>,
  1504. VersionedClause<OMPC_Collapse>,
  1505. VersionedClause<OMPC_DistSchedule>,
  1506. VersionedClause<OMPC_NumThreads>,
  1507. VersionedClause<OMPC_ProcBind>,
  1508. VersionedClause<OMPC_Schedule>,
  1509. VersionedClause<OMPC_Allocate>,
  1510. VersionedClause<OMPC_Order, 50>,
  1511. VersionedClause<OMPC_UsesAllocators, 50>
  1512. ];
  1513. let allowedOnceClauses = [
  1514. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  1515. ];
  1516. }
  1517. def OMP_TargetTeamsDistributeParallelDo :
  1518. Directive<"target teams distribute parallel do"> {
  1519. let allowedClauses = [
  1520. VersionedClause<OMPC_If>,
  1521. VersionedClause<OMPC_Map>,
  1522. VersionedClause<OMPC_Private>,
  1523. VersionedClause<OMPC_Depend>,
  1524. VersionedClause<OMPC_FirstPrivate>,
  1525. VersionedClause<OMPC_IsDevicePtr>,
  1526. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1527. VersionedClause<OMPC_Reduction>,
  1528. VersionedClause<OMPC_Allocate>,
  1529. VersionedClause<OMPC_UsesAllocators>,
  1530. VersionedClause<OMPC_Shared>,
  1531. VersionedClause<OMPC_LastPrivate>,
  1532. VersionedClause<OMPC_Copyin>,
  1533. VersionedClause<OMPC_Linear>,
  1534. VersionedClause<OMPC_Ordered>,
  1535. VersionedClause<OMPC_Order>
  1536. ];
  1537. let allowedOnceClauses = [
  1538. VersionedClause<OMPC_Device>,
  1539. VersionedClause<OMPC_DefaultMap>,
  1540. VersionedClause<OMPC_NoWait>,
  1541. VersionedClause<OMPC_Default>,
  1542. VersionedClause<OMPC_NumTeams>,
  1543. VersionedClause<OMPC_ThreadLimit>,
  1544. VersionedClause<OMPC_Collapse>,
  1545. VersionedClause<OMPC_DistSchedule>,
  1546. VersionedClause<OMPC_NumThreads>,
  1547. VersionedClause<OMPC_ProcBind>,
  1548. VersionedClause<OMPC_Schedule>,
  1549. ];
  1550. }
  1551. def OMP_TargetTeamsDistributeParallelForSimd :
  1552. Directive<"target teams distribute parallel for simd"> {
  1553. let allowedClauses = [
  1554. VersionedClause<OMPC_If>,
  1555. VersionedClause<OMPC_Device>,
  1556. VersionedClause<OMPC_Map>,
  1557. VersionedClause<OMPC_Private>,
  1558. VersionedClause<OMPC_NoWait>,
  1559. VersionedClause<OMPC_Depend>,
  1560. VersionedClause<OMPC_DefaultMap>,
  1561. VersionedClause<OMPC_FirstPrivate>,
  1562. VersionedClause<OMPC_IsDevicePtr>,
  1563. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1564. VersionedClause<OMPC_Default>,
  1565. VersionedClause<OMPC_Shared>,
  1566. VersionedClause<OMPC_Reduction>,
  1567. VersionedClause<OMPC_NumTeams>,
  1568. VersionedClause<OMPC_ThreadLimit>,
  1569. VersionedClause<OMPC_LastPrivate>,
  1570. VersionedClause<OMPC_Collapse>,
  1571. VersionedClause<OMPC_DistSchedule>,
  1572. VersionedClause<OMPC_NumThreads>,
  1573. VersionedClause<OMPC_ProcBind>,
  1574. VersionedClause<OMPC_Schedule>,
  1575. VersionedClause<OMPC_Linear>,
  1576. VersionedClause<OMPC_Aligned>,
  1577. VersionedClause<OMPC_SafeLen>,
  1578. VersionedClause<OMPC_SimdLen>,
  1579. VersionedClause<OMPC_Allocate>,
  1580. VersionedClause<OMPC_NonTemporal, 50>,
  1581. VersionedClause<OMPC_Order, 50>,
  1582. VersionedClause<OMPC_UsesAllocators, 50>
  1583. ];
  1584. let allowedOnceClauses = [
  1585. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  1586. ];
  1587. }
  1588. def OMP_TargetTeamsDistributeParallelDoSimd :
  1589. Directive<"target teams distribute parallel do simd"> {
  1590. let allowedClauses = [
  1591. VersionedClause<OMPC_Map>,
  1592. VersionedClause<OMPC_Private>,
  1593. VersionedClause<OMPC_Depend>,
  1594. VersionedClause<OMPC_FirstPrivate>,
  1595. VersionedClause<OMPC_IsDevicePtr>,
  1596. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1597. VersionedClause<OMPC_Reduction>,
  1598. VersionedClause<OMPC_Allocate>,
  1599. VersionedClause<OMPC_UsesAllocators>,
  1600. VersionedClause<OMPC_Shared>,
  1601. VersionedClause<OMPC_LastPrivate>,
  1602. VersionedClause<OMPC_Copyin>,
  1603. VersionedClause<OMPC_Linear>,
  1604. VersionedClause<OMPC_Ordered>,
  1605. VersionedClause<OMPC_Order>,
  1606. VersionedClause<OMPC_Aligned>,
  1607. VersionedClause<OMPC_NonTemporal>
  1608. ];
  1609. let allowedOnceClauses = [
  1610. VersionedClause<OMPC_If>,
  1611. VersionedClause<OMPC_Device>,
  1612. VersionedClause<OMPC_NoWait>,
  1613. VersionedClause<OMPC_DefaultMap>,
  1614. VersionedClause<OMPC_Default>,
  1615. VersionedClause<OMPC_NumTeams>,
  1616. VersionedClause<OMPC_ThreadLimit>,
  1617. VersionedClause<OMPC_Collapse>,
  1618. VersionedClause<OMPC_DistSchedule>,
  1619. VersionedClause<OMPC_NumThreads>,
  1620. VersionedClause<OMPC_ProcBind>,
  1621. VersionedClause<OMPC_Schedule>,
  1622. VersionedClause<OMPC_SafeLen>,
  1623. VersionedClause<OMPC_SimdLen>
  1624. ];
  1625. }
  1626. def OMP_TargetTeamsDistributeSimd :
  1627. Directive<"target teams distribute simd"> {
  1628. let allowedClauses = [
  1629. VersionedClause<OMPC_Aligned>,
  1630. VersionedClause<OMPC_Allocate>,
  1631. VersionedClause<OMPC_Depend>,
  1632. VersionedClause<OMPC_FirstPrivate>,
  1633. VersionedClause<OMPC_If>,
  1634. VersionedClause<OMPC_IsDevicePtr>,
  1635. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1636. VersionedClause<OMPC_LastPrivate>,
  1637. VersionedClause<OMPC_Linear>,
  1638. VersionedClause<OMPC_Map>,
  1639. VersionedClause<OMPC_NonTemporal, 50>,
  1640. VersionedClause<OMPC_Order, 50>,
  1641. VersionedClause<OMPC_Private>,
  1642. VersionedClause<OMPC_Reduction>,
  1643. VersionedClause<OMPC_Shared>,
  1644. VersionedClause<OMPC_UsesAllocators, 50>
  1645. ];
  1646. let allowedOnceClauses = [
  1647. VersionedClause<OMPC_Device>,
  1648. VersionedClause<OMPC_DefaultMap>,
  1649. VersionedClause<OMPC_NoWait>,
  1650. VersionedClause<OMPC_NumTeams>,
  1651. VersionedClause<OMPC_ThreadLimit>,
  1652. VersionedClause<OMPC_Collapse>,
  1653. VersionedClause<OMPC_DistSchedule>,
  1654. VersionedClause<OMPC_SafeLen>,
  1655. VersionedClause<OMPC_SimdLen>,
  1656. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  1657. ];
  1658. }
  1659. def OMP_Allocate : Directive<"allocate"> {
  1660. let allowedOnceClauses = [
  1661. VersionedClause<OMPC_Allocator>,
  1662. VersionedClause<OMPC_Align, 51>
  1663. ];
  1664. }
  1665. def OMP_DeclareVariant : Directive<"declare variant"> {
  1666. let allowedClauses = [
  1667. VersionedClause<OMPC_Match>
  1668. ];
  1669. let allowedExclusiveClauses = [
  1670. VersionedClause<OMPC_AdjustArgs, 51>,
  1671. VersionedClause<OMPC_AppendArgs, 51>
  1672. ];
  1673. }
  1674. def OMP_MasterTaskloop : Directive<"master taskloop"> {
  1675. let allowedClauses = [
  1676. VersionedClause<OMPC_If>,
  1677. VersionedClause<OMPC_Shared>,
  1678. VersionedClause<OMPC_Private>,
  1679. VersionedClause<OMPC_FirstPrivate>,
  1680. VersionedClause<OMPC_LastPrivate>,
  1681. VersionedClause<OMPC_Default>,
  1682. VersionedClause<OMPC_Collapse>,
  1683. VersionedClause<OMPC_Final>,
  1684. VersionedClause<OMPC_Untied>,
  1685. VersionedClause<OMPC_Mergeable>,
  1686. VersionedClause<OMPC_Priority>,
  1687. VersionedClause<OMPC_GrainSize>,
  1688. VersionedClause<OMPC_NoGroup>,
  1689. VersionedClause<OMPC_NumTasks>,
  1690. VersionedClause<OMPC_Reduction>,
  1691. VersionedClause<OMPC_InReduction>,
  1692. VersionedClause<OMPC_Allocate>
  1693. ];
  1694. }
  1695. def OMP_MaskedTaskloop : Directive<"masked taskloop"> {
  1696. let allowedClauses = [
  1697. VersionedClause<OMPC_If>,
  1698. VersionedClause<OMPC_Shared>,
  1699. VersionedClause<OMPC_Private>,
  1700. VersionedClause<OMPC_FirstPrivate>,
  1701. VersionedClause<OMPC_LastPrivate>,
  1702. VersionedClause<OMPC_Default>,
  1703. VersionedClause<OMPC_Collapse>,
  1704. VersionedClause<OMPC_Final>,
  1705. VersionedClause<OMPC_Untied>,
  1706. VersionedClause<OMPC_Mergeable>,
  1707. VersionedClause<OMPC_Priority>,
  1708. VersionedClause<OMPC_GrainSize>,
  1709. VersionedClause<OMPC_NoGroup>,
  1710. VersionedClause<OMPC_NumTasks>,
  1711. VersionedClause<OMPC_Reduction>,
  1712. VersionedClause<OMPC_InReduction>,
  1713. VersionedClause<OMPC_Allocate>,
  1714. VersionedClause<OMPC_Filter>
  1715. ];
  1716. }
  1717. def OMP_ParallelMasterTaskloop :
  1718. Directive<"parallel master taskloop"> {
  1719. let allowedClauses = [
  1720. VersionedClause<OMPC_If>,
  1721. VersionedClause<OMPC_Shared>,
  1722. VersionedClause<OMPC_Private>,
  1723. VersionedClause<OMPC_FirstPrivate>,
  1724. VersionedClause<OMPC_LastPrivate>,
  1725. VersionedClause<OMPC_Default>,
  1726. VersionedClause<OMPC_Collapse>,
  1727. VersionedClause<OMPC_Final>,
  1728. VersionedClause<OMPC_Untied>,
  1729. VersionedClause<OMPC_Mergeable>,
  1730. VersionedClause<OMPC_Priority>,
  1731. VersionedClause<OMPC_GrainSize>,
  1732. VersionedClause<OMPC_NoGroup>,
  1733. VersionedClause<OMPC_NumTasks>,
  1734. VersionedClause<OMPC_Reduction>,
  1735. VersionedClause<OMPC_Allocate>,
  1736. VersionedClause<OMPC_NumThreads>,
  1737. VersionedClause<OMPC_ProcBind>,
  1738. VersionedClause<OMPC_Copyin>
  1739. ];
  1740. }
  1741. def OMP_ParallelMaskedTaskloop :
  1742. Directive<"parallel masked taskloop"> {
  1743. let allowedClauses = [
  1744. VersionedClause<OMPC_If>,
  1745. VersionedClause<OMPC_Shared>,
  1746. VersionedClause<OMPC_Private>,
  1747. VersionedClause<OMPC_FirstPrivate>,
  1748. VersionedClause<OMPC_LastPrivate>,
  1749. VersionedClause<OMPC_Default>,
  1750. VersionedClause<OMPC_Collapse>,
  1751. VersionedClause<OMPC_Final>,
  1752. VersionedClause<OMPC_Untied>,
  1753. VersionedClause<OMPC_Mergeable>,
  1754. VersionedClause<OMPC_Priority>,
  1755. VersionedClause<OMPC_GrainSize>,
  1756. VersionedClause<OMPC_NoGroup>,
  1757. VersionedClause<OMPC_NumTasks>,
  1758. VersionedClause<OMPC_Reduction>,
  1759. VersionedClause<OMPC_Allocate>,
  1760. VersionedClause<OMPC_NumThreads>,
  1761. VersionedClause<OMPC_ProcBind>,
  1762. VersionedClause<OMPC_Copyin>,
  1763. VersionedClause<OMPC_Filter>
  1764. ];
  1765. }
  1766. def OMP_MasterTaskloopSimd : Directive<"master taskloop simd"> {
  1767. let allowedClauses = [
  1768. VersionedClause<OMPC_If>,
  1769. VersionedClause<OMPC_Shared>,
  1770. VersionedClause<OMPC_Private>,
  1771. VersionedClause<OMPC_FirstPrivate>,
  1772. VersionedClause<OMPC_LastPrivate>,
  1773. VersionedClause<OMPC_Default>,
  1774. VersionedClause<OMPC_Collapse>,
  1775. VersionedClause<OMPC_Final>,
  1776. VersionedClause<OMPC_Untied>,
  1777. VersionedClause<OMPC_Mergeable>,
  1778. VersionedClause<OMPC_Priority>,
  1779. VersionedClause<OMPC_Linear>,
  1780. VersionedClause<OMPC_Aligned>,
  1781. VersionedClause<OMPC_SafeLen>,
  1782. VersionedClause<OMPC_SimdLen>,
  1783. VersionedClause<OMPC_GrainSize>,
  1784. VersionedClause<OMPC_NoGroup>,
  1785. VersionedClause<OMPC_NumTasks>,
  1786. VersionedClause<OMPC_Reduction>,
  1787. VersionedClause<OMPC_InReduction>,
  1788. VersionedClause<OMPC_Allocate>,
  1789. VersionedClause<OMPC_NonTemporal, 50>,
  1790. VersionedClause<OMPC_Order, 50>
  1791. ];
  1792. }
  1793. def OMP_MaskedTaskloopSimd : Directive<"masked taskloop simd"> {
  1794. let allowedClauses = [
  1795. VersionedClause<OMPC_If>,
  1796. VersionedClause<OMPC_Shared>,
  1797. VersionedClause<OMPC_Private>,
  1798. VersionedClause<OMPC_FirstPrivate>,
  1799. VersionedClause<OMPC_LastPrivate>,
  1800. VersionedClause<OMPC_Default>,
  1801. VersionedClause<OMPC_Collapse>,
  1802. VersionedClause<OMPC_Final>,
  1803. VersionedClause<OMPC_Untied>,
  1804. VersionedClause<OMPC_Mergeable>,
  1805. VersionedClause<OMPC_Priority>,
  1806. VersionedClause<OMPC_Linear>,
  1807. VersionedClause<OMPC_Aligned>,
  1808. VersionedClause<OMPC_SafeLen>,
  1809. VersionedClause<OMPC_SimdLen>,
  1810. VersionedClause<OMPC_GrainSize>,
  1811. VersionedClause<OMPC_NoGroup>,
  1812. VersionedClause<OMPC_NumTasks>,
  1813. VersionedClause<OMPC_Reduction>,
  1814. VersionedClause<OMPC_InReduction>,
  1815. VersionedClause<OMPC_Allocate>,
  1816. VersionedClause<OMPC_NonTemporal, 50>,
  1817. VersionedClause<OMPC_Order, 50>,
  1818. VersionedClause<OMPC_Filter>
  1819. ];
  1820. }
  1821. def OMP_ParallelMasterTaskloopSimd :
  1822. Directive<"parallel master taskloop simd"> {
  1823. let allowedClauses = [
  1824. VersionedClause<OMPC_If>,
  1825. VersionedClause<OMPC_Shared>,
  1826. VersionedClause<OMPC_Private>,
  1827. VersionedClause<OMPC_FirstPrivate>,
  1828. VersionedClause<OMPC_LastPrivate>,
  1829. VersionedClause<OMPC_Default>,
  1830. VersionedClause<OMPC_Collapse>,
  1831. VersionedClause<OMPC_Final>,
  1832. VersionedClause<OMPC_Untied>,
  1833. VersionedClause<OMPC_Mergeable>,
  1834. VersionedClause<OMPC_Priority>,
  1835. VersionedClause<OMPC_GrainSize>,
  1836. VersionedClause<OMPC_NoGroup>,
  1837. VersionedClause<OMPC_NumTasks>,
  1838. VersionedClause<OMPC_Reduction>,
  1839. VersionedClause<OMPC_Allocate>,
  1840. VersionedClause<OMPC_NumThreads>,
  1841. VersionedClause<OMPC_ProcBind>,
  1842. VersionedClause<OMPC_Copyin>,
  1843. VersionedClause<OMPC_Linear>,
  1844. VersionedClause<OMPC_Aligned>,
  1845. VersionedClause<OMPC_SafeLen>,
  1846. VersionedClause<OMPC_SimdLen>,
  1847. VersionedClause<OMPC_NonTemporal, 50>,
  1848. VersionedClause<OMPC_Order, 50>
  1849. ];
  1850. }
  1851. def OMP_ParallelMaskedTaskloopSimd :
  1852. Directive<"parallel masked taskloop simd"> {
  1853. let allowedClauses = [
  1854. VersionedClause<OMPC_If>,
  1855. VersionedClause<OMPC_Shared>,
  1856. VersionedClause<OMPC_Private>,
  1857. VersionedClause<OMPC_FirstPrivate>,
  1858. VersionedClause<OMPC_LastPrivate>,
  1859. VersionedClause<OMPC_Default>,
  1860. VersionedClause<OMPC_Collapse>,
  1861. VersionedClause<OMPC_Final>,
  1862. VersionedClause<OMPC_Untied>,
  1863. VersionedClause<OMPC_Mergeable>,
  1864. VersionedClause<OMPC_Priority>,
  1865. VersionedClause<OMPC_GrainSize>,
  1866. VersionedClause<OMPC_NoGroup>,
  1867. VersionedClause<OMPC_NumTasks>,
  1868. VersionedClause<OMPC_Reduction>,
  1869. VersionedClause<OMPC_Allocate>,
  1870. VersionedClause<OMPC_NumThreads>,
  1871. VersionedClause<OMPC_ProcBind>,
  1872. VersionedClause<OMPC_Copyin>,
  1873. VersionedClause<OMPC_Linear>,
  1874. VersionedClause<OMPC_Aligned>,
  1875. VersionedClause<OMPC_SafeLen>,
  1876. VersionedClause<OMPC_SimdLen>,
  1877. VersionedClause<OMPC_NonTemporal, 50>,
  1878. VersionedClause<OMPC_Order, 50>,
  1879. VersionedClause<OMPC_Filter>
  1880. ];
  1881. }
  1882. def OMP_Depobj : Directive<"depobj"> {
  1883. let allowedClauses = [
  1884. VersionedClause<OMPC_Depend, 50>,
  1885. VersionedClause<OMPC_Destroy, 50>,
  1886. VersionedClause<OMPC_Update, 50>,
  1887. // TODO This should ne `none` instead. Comment carried over from
  1888. // OMPKinds.def.
  1889. VersionedClause<OMPC_Depobj, 50>
  1890. ];
  1891. }
  1892. def OMP_Scan : Directive<"scan"> {
  1893. let allowedClauses = [
  1894. VersionedClause<OMPC_Inclusive, 50>,
  1895. VersionedClause<OMPC_Exclusive, 50>
  1896. ];
  1897. }
  1898. def OMP_Assumes : Directive<"assumes"> {}
  1899. def OMP_BeginAssumes : Directive<"begin assumes"> {}
  1900. def OMP_EndAssumes : Directive<"end assumes"> {}
  1901. def OMP_BeginDeclareVariant : Directive<"begin declare variant"> {}
  1902. def OMP_EndDeclareVariant : Directive<"end declare variant"> {}
  1903. def OMP_ParallelWorkshare : Directive<"parallel workshare"> {
  1904. let allowedClauses = [
  1905. VersionedClause<OMPC_Allocate>,
  1906. VersionedClause<OMPC_Copyin>,
  1907. VersionedClause<OMPC_Default>,
  1908. VersionedClause<OMPC_FirstPrivate>,
  1909. VersionedClause<OMPC_Private>,
  1910. VersionedClause<OMPC_Reduction>,
  1911. VersionedClause<OMPC_Shared>
  1912. ];
  1913. let allowedOnceClauses = [
  1914. VersionedClause<OMPC_If>,
  1915. VersionedClause<OMPC_NumThreads>,
  1916. VersionedClause<OMPC_ProcBind>
  1917. ];
  1918. }
  1919. def OMP_Workshare : Directive<"workshare"> {}
  1920. def OMP_EndDo : Directive<"end do"> {}
  1921. def OMP_EndDoSimd : Directive<"end do simd"> {}
  1922. def OMP_EndSections : Directive<"end sections"> {
  1923. let allowedOnceClauses = [
  1924. VersionedClause<OMPC_NoWait>
  1925. ];
  1926. }
  1927. def OMP_EndSingle : Directive<"end single"> {
  1928. let allowedClauses = [
  1929. VersionedClause<OMPC_CopyPrivate>
  1930. ];
  1931. let allowedOnceClauses = [
  1932. VersionedClause<OMPC_NoWait>
  1933. ];
  1934. }
  1935. def OMP_EndWorkshare : Directive<"end workshare"> {
  1936. let allowedClauses = [
  1937. VersionedClause<OMPC_NoWait>
  1938. ];
  1939. }
  1940. def OMP_interop : Directive<"interop"> {
  1941. let allowedClauses = [
  1942. VersionedClause<OMPC_Device>,
  1943. VersionedClause<OMPC_Depend>,
  1944. VersionedClause<OMPC_Destroy>,
  1945. VersionedClause<OMPC_Init>,
  1946. VersionedClause<OMPC_NoWait>,
  1947. VersionedClause<OMPC_Use>,
  1948. ];
  1949. }
  1950. def OMP_dispatch : Directive<"dispatch"> {
  1951. let allowedClauses = [
  1952. VersionedClause<OMPC_Device>,
  1953. VersionedClause<OMPC_IsDevicePtr>,
  1954. VersionedClause<OMPC_HasDeviceAddr, 51>,
  1955. VersionedClause<OMPC_NoWait>,
  1956. VersionedClause<OMPC_Depend>,
  1957. VersionedClause<OMPC_Novariants>,
  1958. VersionedClause<OMPC_Nocontext>
  1959. ];
  1960. }
  1961. def OMP_masked : Directive<"masked"> {
  1962. let allowedOnceClauses = [
  1963. VersionedClause<OMPC_Filter>
  1964. ];
  1965. }
  1966. def OMP_loop : Directive<"loop"> {
  1967. let allowedClauses = [
  1968. VersionedClause<OMPC_LastPrivate>,
  1969. VersionedClause<OMPC_Private>,
  1970. VersionedClause<OMPC_Reduction>,
  1971. ];
  1972. let allowedOnceClauses = [
  1973. VersionedClause<OMPC_Bind, 50>,
  1974. VersionedClause<OMPC_Collapse>,
  1975. VersionedClause<OMPC_Order>,
  1976. ];
  1977. }
  1978. def OMP_teams_loop : Directive<"teams loop"> {
  1979. let allowedClauses = [
  1980. VersionedClause<OMPC_Allocate>,
  1981. VersionedClause<OMPC_FirstPrivate>,
  1982. VersionedClause<OMPC_LastPrivate>,
  1983. VersionedClause<OMPC_Private>,
  1984. VersionedClause<OMPC_Reduction>,
  1985. VersionedClause<OMPC_Shared>,
  1986. ];
  1987. let allowedOnceClauses = [
  1988. VersionedClause<OMPC_Bind, 50>,
  1989. VersionedClause<OMPC_Collapse>,
  1990. VersionedClause<OMPC_Default>,
  1991. VersionedClause<OMPC_NumTeams>,
  1992. VersionedClause<OMPC_Order>,
  1993. VersionedClause<OMPC_ThreadLimit>,
  1994. ];
  1995. }
  1996. def OMP_target_teams_loop : Directive<"target teams loop"> {
  1997. let allowedClauses = [
  1998. VersionedClause<OMPC_Allocate>,
  1999. VersionedClause<OMPC_Depend>,
  2000. VersionedClause<OMPC_DefaultMap>,
  2001. VersionedClause<OMPC_Device>,
  2002. VersionedClause<OMPC_FirstPrivate>,
  2003. VersionedClause<OMPC_IsDevicePtr>,
  2004. VersionedClause<OMPC_HasDeviceAddr, 51>,
  2005. VersionedClause<OMPC_LastPrivate>,
  2006. VersionedClause<OMPC_Map>,
  2007. VersionedClause<OMPC_Private>,
  2008. VersionedClause<OMPC_Reduction>,
  2009. VersionedClause<OMPC_Shared>,
  2010. VersionedClause<OMPC_UsesAllocators, 50>
  2011. ];
  2012. let allowedOnceClauses = [
  2013. VersionedClause<OMPC_Bind, 50>,
  2014. VersionedClause<OMPC_Collapse>,
  2015. VersionedClause<OMPC_Default>,
  2016. VersionedClause<OMPC_If>,
  2017. VersionedClause<OMPC_NoWait>,
  2018. VersionedClause<OMPC_NumTeams>,
  2019. VersionedClause<OMPC_Order>,
  2020. VersionedClause<OMPC_ThreadLimit>,
  2021. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  2022. ];
  2023. }
  2024. def OMP_parallel_loop : Directive<"parallel loop"> {
  2025. let allowedClauses = [
  2026. VersionedClause<OMPC_Allocate>,
  2027. VersionedClause<OMPC_Copyin>,
  2028. VersionedClause<OMPC_FirstPrivate>,
  2029. VersionedClause<OMPC_LastPrivate>,
  2030. VersionedClause<OMPC_Private>,
  2031. VersionedClause<OMPC_Reduction>,
  2032. VersionedClause<OMPC_Shared>,
  2033. ];
  2034. let allowedOnceClauses = [
  2035. VersionedClause<OMPC_Bind, 50>,
  2036. VersionedClause<OMPC_Collapse>,
  2037. VersionedClause<OMPC_Default>,
  2038. VersionedClause<OMPC_If>,
  2039. VersionedClause<OMPC_NumThreads>,
  2040. VersionedClause<OMPC_Order>,
  2041. VersionedClause<OMPC_ProcBind>,
  2042. ];
  2043. }
  2044. def OMP_target_parallel_loop : Directive<"target parallel loop"> {
  2045. let allowedClauses = [
  2046. VersionedClause<OMPC_Allocate>,
  2047. VersionedClause<OMPC_Copyin>,
  2048. VersionedClause<OMPC_Depend>,
  2049. VersionedClause<OMPC_Device>,
  2050. VersionedClause<OMPC_FirstPrivate>,
  2051. VersionedClause<OMPC_IsDevicePtr>,
  2052. VersionedClause<OMPC_HasDeviceAddr, 51>,
  2053. VersionedClause<OMPC_LastPrivate>,
  2054. VersionedClause<OMPC_Map>,
  2055. VersionedClause<OMPC_Private>,
  2056. VersionedClause<OMPC_Reduction>,
  2057. VersionedClause<OMPC_Shared>,
  2058. VersionedClause<OMPC_UsesAllocators, 50>,
  2059. ];
  2060. let allowedOnceClauses = [
  2061. VersionedClause<OMPC_Bind, 50>,
  2062. VersionedClause<OMPC_Collapse>,
  2063. VersionedClause<OMPC_Default>,
  2064. VersionedClause<OMPC_DefaultMap>,
  2065. VersionedClause<OMPC_If>,
  2066. VersionedClause<OMPC_NoWait>,
  2067. VersionedClause<OMPC_NumThreads>,
  2068. VersionedClause<OMPC_Order>,
  2069. VersionedClause<OMPC_ProcBind>,
  2070. VersionedClause<OMPC_OMPX_DynCGroupMem>,
  2071. ];
  2072. }
  2073. def OMP_Metadirective : Directive<"metadirective"> {
  2074. let allowedClauses = [VersionedClause<OMPC_When>];
  2075. let allowedOnceClauses = [VersionedClause<OMPC_Default>];
  2076. }
  2077. def OMP_Unknown : Directive<"unknown"> {
  2078. let isDefault = true;
  2079. }