OMP.td 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639
  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 includeHeader = "llvm/Frontend/OpenMP/OMP.h.inc";
  24. let clauseEnumSetClass = "OmpClauseSet";
  25. let flangClauseBaseClass = "OmpClause";
  26. }
  27. //===----------------------------------------------------------------------===//
  28. // Definition of OpenMP clauses
  29. //===----------------------------------------------------------------------===//
  30. def OMPC_Allocator : Clause<"allocator"> {
  31. let clangClass = "OMPAllocatorClause";
  32. let flangClass = "ScalarIntExpr";
  33. }
  34. def OMPC_If : Clause<"if"> {
  35. let clangClass = "OMPIfClause";
  36. let flangClass = "OmpIfClause";
  37. }
  38. def OMPC_Final : Clause<"final"> {
  39. let clangClass = "OMPFinalClause";
  40. let flangClass = "ScalarLogicalExpr";
  41. }
  42. def OMPC_NumThreads : Clause<"num_threads"> {
  43. let clangClass = "OMPNumThreadsClause";
  44. let flangClass = "ScalarIntExpr";
  45. }
  46. def OMPC_SafeLen : Clause<"safelen"> {
  47. let clangClass = "OMPSafelenClause";
  48. let flangClass = "ScalarIntConstantExpr";
  49. }
  50. def OMPC_SimdLen : Clause<"simdlen"> {
  51. let clangClass = "OMPSimdlenClause";
  52. let flangClass = "ScalarIntConstantExpr";
  53. }
  54. def OMPC_Collapse : Clause<"collapse"> {
  55. let clangClass = "OMPCollapseClause";
  56. let flangClass = "ScalarIntConstantExpr";
  57. }
  58. def OMPC_Default : Clause<"default"> {
  59. let clangClass = "OMPDefaultClause";
  60. let flangClass = "OmpDefaultClause";
  61. }
  62. def OMPC_Private : Clause<"private"> {
  63. let clangClass = "OMPPrivateClause";
  64. let flangClass = "OmpObjectList";
  65. }
  66. def OMPC_FirstPrivate : Clause<"firstprivate"> {
  67. let clangClass = "OMPFirstprivateClause";
  68. let flangClass = "OmpObjectList";
  69. }
  70. def OMPC_LastPrivate : Clause<"lastprivate"> {
  71. let clangClass = "OMPLastprivateClause";
  72. let flangClass = "OmpObjectList";
  73. }
  74. def OMPC_Shared : Clause<"shared"> {
  75. let clangClass = "OMPSharedClause";
  76. let flangClass = "OmpObjectList";
  77. }
  78. def OMPC_Reduction : Clause<"reduction"> {
  79. let clangClass = "OMPReductionClause";
  80. let flangClass = "OmpReductionClause";
  81. }
  82. def OMPC_Linear : Clause<"linear"> {
  83. let clangClass = "OMPLinearClause";
  84. let flangClass = "OmpLinearClause";
  85. }
  86. def OMPC_Aligned : Clause<"aligned"> {
  87. let clangClass = "OMPAlignedClause";
  88. let flangClass = "OmpAlignedClause";
  89. }
  90. def OMPC_Copyin : Clause<"copyin"> {
  91. let clangClass = "OMPCopyinClause";
  92. let flangClass = "OmpObjectList";
  93. }
  94. def OMPC_CopyPrivate : Clause<"copyprivate"> {
  95. let clangClass = "OMPCopyprivateClause";
  96. let flangClass = "OmpObjectList";
  97. }
  98. def OMP_PROC_BIND_master : ClauseVal<"master",2,1> {}
  99. def OMP_PROC_BIND_close : ClauseVal<"close",3,1> {}
  100. def OMP_PROC_BIND_spread : ClauseVal<"spread",4,1> {}
  101. def OMP_PROC_BIND_default : ClauseVal<"default",5,0> {}
  102. def OMP_PROC_BIND_unknown : ClauseVal<"unknown",6,0> { let isDefault = true; }
  103. def OMPC_ProcBind : Clause<"proc_bind"> {
  104. let clangClass = "OMPProcBindClause";
  105. let flangClass = "OmpProcBindClause";
  106. let enumClauseValue = "ProcBindKind";
  107. let allowedClauseValues = [
  108. OMP_PROC_BIND_master,
  109. OMP_PROC_BIND_close,
  110. OMP_PROC_BIND_spread,
  111. OMP_PROC_BIND_default,
  112. OMP_PROC_BIND_unknown
  113. ];
  114. }
  115. // static and auto are C++ keywords so need a capital to disambiguate.
  116. def OMP_SCHEDULE_Static : ClauseVal<"Static", 2, 1> {}
  117. def OMP_SCHEDULE_Dynamic : ClauseVal<"Dynamic", 3, 1> {}
  118. def OMP_SCHEDULE_Guided : ClauseVal<"Guided", 4, 1> {}
  119. def OMP_SCHEDULE_Auto : ClauseVal<"Auto", 5, 1> {}
  120. def OMP_SCHEDULE_Runtime : ClauseVal<"Runtime", 6, 1> {}
  121. def OMP_SCHEDULE_Default : ClauseVal<"Default", 7, 0> { let isDefault = 1; }
  122. def OMPC_Schedule : Clause<"schedule"> {
  123. let clangClass = "OMPScheduleClause";
  124. let flangClass = "OmpScheduleClause";
  125. let enumClauseValue = "ScheduleKind";
  126. let allowedClauseValues = [
  127. OMP_SCHEDULE_Static,
  128. OMP_SCHEDULE_Dynamic,
  129. OMP_SCHEDULE_Guided,
  130. OMP_SCHEDULE_Auto,
  131. OMP_SCHEDULE_Runtime,
  132. OMP_SCHEDULE_Default
  133. ];
  134. }
  135. def OMPC_Ordered : Clause<"ordered"> {
  136. let clangClass = "OMPOrderedClause";
  137. let flangClass = "ScalarIntConstantExpr";
  138. let isValueOptional = true;
  139. }
  140. def OMPC_NoWait : Clause<"nowait"> {
  141. let clangClass = "OMPNowaitClause";
  142. }
  143. def OMPC_Untied : Clause<"untied"> { let clangClass = "OMPUntiedClause"; }
  144. def OMPC_Mergeable : Clause<"mergeable"> {
  145. let clangClass = "OMPMergeableClause";
  146. }
  147. def OMPC_Read : Clause<"read"> { let clangClass = "OMPReadClause"; }
  148. def OMPC_Write : Clause<"write"> { let clangClass = "OMPWriteClause"; }
  149. def OMPC_Update : Clause<"update"> { let clangClass = "OMPUpdateClause"; }
  150. def OMPC_Capture : Clause<"capture"> { let clangClass = "OMPCaptureClause"; }
  151. def OMPC_SeqCst : Clause<"seq_cst"> { let clangClass = "OMPSeqCstClause"; }
  152. def OMPC_AcqRel : Clause<"acq_rel"> { let clangClass = "OMPAcqRelClause"; }
  153. def OMPC_Acquire : Clause<"acquire"> { let clangClass = "OMPAcquireClause"; }
  154. def OMPC_Release : Clause<"release"> { let clangClass = "OMPReleaseClause"; }
  155. def OMPC_Relaxed : Clause<"relaxed"> { let clangClass = "OMPRelaxedClause"; }
  156. def OMPC_Depend : Clause<"depend"> {
  157. let clangClass = "OMPDependClause";
  158. let flangClass = "OmpDependClause";
  159. }
  160. def OMPC_Device : Clause<"device"> {
  161. let clangClass = "OMPDeviceClause";
  162. let flangClass = "ScalarIntExpr";
  163. }
  164. def OMPC_Threads : Clause<"threads"> { let clangClass = "OMPThreadsClause"; }
  165. def OMPC_Simd : Clause<"simd"> { let clangClass = "OMPSIMDClause"; }
  166. def OMPC_Map : Clause<"map"> {
  167. let clangClass = "OMPMapClause";
  168. let flangClass = "OmpMapClause";
  169. }
  170. def OMPC_NumTeams : Clause<"num_teams"> {
  171. let clangClass = "OMPNumTeamsClause";
  172. let flangClass = "ScalarIntExpr";
  173. }
  174. def OMPC_ThreadLimit : Clause<"thread_limit"> {
  175. let clangClass = "OMPThreadLimitClause";
  176. let flangClass = "ScalarIntExpr";
  177. }
  178. def OMPC_Priority : Clause<"priority"> {
  179. let clangClass = "OMPPriorityClause";
  180. let flangClass = "ScalarIntExpr";
  181. }
  182. def OMPC_GrainSize : Clause<"grainsize"> {
  183. let clangClass = "OMPGrainsizeClause";
  184. let flangClass = "ScalarIntExpr";
  185. }
  186. def OMPC_NoGroup : Clause<"nogroup"> {
  187. let clangClass = "OMPNogroupClause";
  188. }
  189. def OMPC_NumTasks : Clause<"num_tasks"> {
  190. let clangClass = "OMPNumTasksClause";
  191. let flangClass = "ScalarIntExpr";
  192. }
  193. def OMPC_Hint : Clause<"hint"> {
  194. let clangClass = "OMPHintClause";
  195. let flangClass = "ConstantExpr";
  196. }
  197. def OMPC_DistSchedule : Clause<"dist_schedule"> {
  198. let clangClass = "OMPDistScheduleClause";
  199. let flangClass = "ScalarIntExpr";
  200. let isValueOptional = true;
  201. }
  202. def OMPC_DefaultMap : Clause<"defaultmap"> {
  203. let clangClass = "OMPDefaultmapClause";
  204. let flangClass = "OmpDefaultmapClause";
  205. }
  206. def OMPC_To : Clause<"to"> {
  207. let clangClass = "OMPToClause";
  208. let flangClass = "OmpObjectList";
  209. }
  210. def OMPC_From : Clause<"from"> {
  211. let clangClass = "OMPFromClause";
  212. let flangClass = "OmpObjectList";
  213. }
  214. def OMPC_UseDevicePtr : Clause<"use_device_ptr"> {
  215. let clangClass = "OMPUseDevicePtrClause";
  216. let flangClass = "Name";
  217. let isValueList = true;
  218. }
  219. def OMPC_IsDevicePtr : Clause<"is_device_ptr"> {
  220. let clangClass = "OMPIsDevicePtrClause";
  221. let flangClass = "Name";
  222. let isValueList = true;
  223. }
  224. def OMPC_TaskReduction : Clause<"task_reduction"> {
  225. let clangClass = "OMPTaskReductionClause";
  226. let flangClass = "OmpReductionClause";
  227. }
  228. def OMPC_InReduction : Clause<"in_reduction"> {
  229. let clangClass = "OMPInReductionClause";
  230. }
  231. def OMPC_UnifiedAddress : Clause<"unified_address"> {
  232. let clangClass = "OMPUnifiedAddressClause";
  233. }
  234. def OMPC_UnifiedSharedMemory : Clause<"unified_shared_memory"> {
  235. let clangClass = "OMPUnifiedSharedMemoryClause";
  236. }
  237. def OMPC_ReverseOffload : Clause<"reverse_offload"> {
  238. let clangClass = "OMPReverseOffloadClause";
  239. }
  240. def OMPC_DynamicAllocators : Clause<"dynamic_allocators"> {
  241. let clangClass = "OMPDynamicAllocatorsClause";
  242. }
  243. def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> {
  244. let clangClass = "OMPAtomicDefaultMemOrderClause";
  245. }
  246. def OMPC_Allocate : Clause<"allocate"> {
  247. let clangClass = "OMPAllocateClause";
  248. let flangClass = "OmpAllocateClause";
  249. }
  250. def OMPC_NonTemporal : Clause<"nontemporal"> {
  251. let clangClass = "OMPNontemporalClause";
  252. }
  253. def OMP_ORDER_concurrent : ClauseVal<"default",2,0> { let isDefault = 1; }
  254. def OMPC_Order : Clause<"order"> {
  255. let clangClass = "OMPOrderClause";
  256. let enumClauseValue = "OrderKind";
  257. let allowedClauseValues = [
  258. OMP_ORDER_concurrent
  259. ];
  260. }
  261. def OMPC_Destroy : Clause<"destroy"> {
  262. let clangClass = "OMPDestroyClause";
  263. }
  264. def OMPC_Detach : Clause<"detach"> {
  265. let clangClass = "OMPDetachClause";
  266. }
  267. def OMPC_Inclusive : Clause<"inclusive"> {
  268. let clangClass = "OMPInclusiveClause";
  269. }
  270. def OMPC_Exclusive : Clause<"exclusive"> {
  271. let clangClass = "OMPExclusiveClause";
  272. }
  273. def OMPC_UsesAllocators : Clause<"uses_allocators"> {
  274. let clangClass = "OMPUsesAllocatorsClause";
  275. }
  276. def OMPC_Affinity : Clause<"affinity"> {
  277. let clangClass = "OMPAffinityClause";
  278. }
  279. def OMPC_UseDeviceAddr : Clause<"use_device_addr"> {
  280. let clangClass = "OMPUseDeviceAddrClause";
  281. }
  282. def OMPC_Uniform : Clause<"uniform"> {
  283. let flangClass = "Name";
  284. let isValueList = true;
  285. }
  286. def OMPC_DeviceType : Clause<"device_type"> {}
  287. def OMPC_Match : Clause<"match"> {}
  288. def OMPC_Depobj : Clause<"depobj"> {
  289. let clangClass = "OMPDepobjClause";
  290. let isImplicit = true;
  291. }
  292. def OMPC_Flush : Clause<"flush"> {
  293. let clangClass = "OMPFlushClause";
  294. let isImplicit = true;
  295. }
  296. def OMPC_ThreadPrivate : Clause<"threadprivate"> {
  297. let alternativeName = "threadprivate or thread local";
  298. let isImplicit = true;
  299. }
  300. def OMPC_Unknown : Clause<"unknown"> {
  301. let isImplicit = true;
  302. let isDefault = true;
  303. }
  304. def OMPC_Link : Clause<"link"> {
  305. let flangClass = "OmpObjectList";
  306. }
  307. def OMPC_Inbranch : Clause<"inbranch"> {}
  308. def OMPC_Notinbranch : Clause<"notinbranch"> {}
  309. //===----------------------------------------------------------------------===//
  310. // Definition of OpenMP directives
  311. //===----------------------------------------------------------------------===//
  312. def OMP_ThreadPrivate : Directive<"threadprivate"> {}
  313. def OMP_Parallel : Directive<"parallel"> {
  314. let allowedClauses = [
  315. VersionedClause<OMPC_Private>,
  316. VersionedClause<OMPC_FirstPrivate>,
  317. VersionedClause<OMPC_Shared>,
  318. VersionedClause<OMPC_Reduction>,
  319. VersionedClause<OMPC_Copyin>,
  320. VersionedClause<OMPC_Allocate>
  321. ];
  322. let allowedOnceClauses = [
  323. VersionedClause<OMPC_Default>,
  324. VersionedClause<OMPC_If>,
  325. VersionedClause<OMPC_NumThreads>,
  326. VersionedClause<OMPC_ProcBind>,
  327. ];
  328. }
  329. def OMP_Task : Directive<"task"> {
  330. let allowedClauses = [
  331. VersionedClause<OMPC_Private>,
  332. VersionedClause<OMPC_FirstPrivate>,
  333. VersionedClause<OMPC_Shared>,
  334. VersionedClause<OMPC_Untied>,
  335. VersionedClause<OMPC_Mergeable>,
  336. VersionedClause<OMPC_Depend>,
  337. VersionedClause<OMPC_InReduction>,
  338. VersionedClause<OMPC_Allocate>,
  339. VersionedClause<OMPC_Detach, 50>,
  340. VersionedClause<OMPC_Affinity, 50>
  341. ];
  342. let allowedOnceClauses = [
  343. VersionedClause<OMPC_Default>,
  344. VersionedClause<OMPC_If>,
  345. VersionedClause<OMPC_Final>,
  346. VersionedClause<OMPC_Priority>
  347. ];
  348. }
  349. def OMP_Simd : Directive<"simd"> {
  350. let allowedClauses = [
  351. VersionedClause<OMPC_Private>,
  352. VersionedClause<OMPC_LastPrivate>,
  353. VersionedClause<OMPC_Linear>,
  354. VersionedClause<OMPC_Aligned>,
  355. VersionedClause<OMPC_Reduction>,
  356. VersionedClause<OMPC_Allocate>,
  357. VersionedClause<OMPC_NonTemporal, 50>,
  358. VersionedClause<OMPC_Order, 50>
  359. ];
  360. let allowedOnceClauses = [
  361. VersionedClause<OMPC_Collapse>,
  362. VersionedClause<OMPC_SafeLen>,
  363. VersionedClause<OMPC_SimdLen>,
  364. VersionedClause<OMPC_If, 50>,
  365. ];
  366. }
  367. def OMP_For : Directive<"for"> {
  368. let allowedClauses = [
  369. VersionedClause<OMPC_Private>,
  370. VersionedClause<OMPC_LastPrivate>,
  371. VersionedClause<OMPC_FirstPrivate>,
  372. VersionedClause<OMPC_Reduction>,
  373. VersionedClause<OMPC_Collapse>,
  374. VersionedClause<OMPC_Schedule>,
  375. VersionedClause<OMPC_Ordered>,
  376. VersionedClause<OMPC_NoWait>,
  377. VersionedClause<OMPC_Linear>,
  378. VersionedClause<OMPC_Allocate>,
  379. VersionedClause<OMPC_Order, 50>
  380. ];
  381. }
  382. def OMP_Do : Directive<"do"> {
  383. let allowedClauses = [
  384. VersionedClause<OMPC_Private>,
  385. VersionedClause<OMPC_FirstPrivate>,
  386. VersionedClause<OMPC_LastPrivate>,
  387. VersionedClause<OMPC_Linear>,
  388. VersionedClause<OMPC_Reduction>
  389. ];
  390. let allowedOnceClauses = [
  391. VersionedClause<OMPC_Schedule>,
  392. VersionedClause<OMPC_Collapse>,
  393. VersionedClause<OMPC_Ordered>,
  394. VersionedClause<OMPC_NoWait>
  395. ];
  396. }
  397. def OMP_Sections : Directive<"sections"> {
  398. let allowedClauses = [
  399. VersionedClause<OMPC_Private>,
  400. VersionedClause<OMPC_LastPrivate>,
  401. VersionedClause<OMPC_FirstPrivate>,
  402. VersionedClause<OMPC_Reduction>,
  403. VersionedClause<OMPC_NoWait>,
  404. VersionedClause<OMPC_Allocate>
  405. ];
  406. }
  407. def OMP_Section : Directive<"section"> {}
  408. def OMP_Single : Directive<"single"> {
  409. let allowedClauses = [
  410. VersionedClause<OMPC_Private>,
  411. VersionedClause<OMPC_FirstPrivate>,
  412. VersionedClause<OMPC_CopyPrivate>,
  413. VersionedClause<OMPC_NoWait>,
  414. VersionedClause<OMPC_Allocate>
  415. ];
  416. }
  417. def OMP_Master : Directive<"master"> {}
  418. def OMP_Critical : Directive<"critical"> {
  419. let allowedClauses = [
  420. VersionedClause<OMPC_Hint>
  421. ];
  422. }
  423. def OMP_TaskYield : Directive<"taskyield"> {}
  424. def OMP_Barrier : Directive<"barrier"> {}
  425. def OMP_TaskWait : Directive<"taskwait"> {
  426. let allowedClauses = [
  427. VersionedClause<OMPC_Depend, 50>
  428. ];
  429. }
  430. def OMP_TaskGroup : Directive<"taskgroup"> {
  431. let allowedClauses = [
  432. VersionedClause<OMPC_TaskReduction>,
  433. VersionedClause<OMPC_Allocate>
  434. ];
  435. }
  436. def OMP_Flush : Directive<"flush"> {
  437. let allowedOnceClauses = [
  438. VersionedClause<OMPC_AcqRel, 50>,
  439. VersionedClause<OMPC_Acquire, 50>,
  440. VersionedClause<OMPC_Release, 50>,
  441. // TODO This should ne `none` instead. Comment carried over from
  442. // OMPKinds.def.
  443. VersionedClause<OMPC_Flush>
  444. ];
  445. }
  446. def OMP_Ordered : Directive<"ordered"> {
  447. let allowedClauses = [
  448. VersionedClause<OMPC_Threads>,
  449. VersionedClause<OMPC_Simd>,
  450. VersionedClause<OMPC_Depend>
  451. ];
  452. }
  453. def OMP_Atomic : Directive<"atomic"> {
  454. let allowedClauses = [
  455. VersionedClause<OMPC_Read>,
  456. VersionedClause<OMPC_Write>,
  457. VersionedClause<OMPC_Update>,
  458. VersionedClause<OMPC_Capture>,
  459. ];
  460. let allowedOnceClauses = [
  461. VersionedClause<OMPC_SeqCst>,
  462. VersionedClause<OMPC_AcqRel, 50>,
  463. VersionedClause<OMPC_Acquire, 50>,
  464. VersionedClause<OMPC_Release, 50>,
  465. VersionedClause<OMPC_Relaxed, 50>,
  466. VersionedClause<OMPC_Hint, 50>
  467. ];
  468. }
  469. def OMP_Target : Directive<"target"> {
  470. let allowedClauses = [
  471. VersionedClause<OMPC_If>,
  472. VersionedClause<OMPC_Map>,
  473. VersionedClause<OMPC_Private>,
  474. VersionedClause<OMPC_Depend>,
  475. VersionedClause<OMPC_FirstPrivate>,
  476. VersionedClause<OMPC_IsDevicePtr>,
  477. VersionedClause<OMPC_Reduction>,
  478. VersionedClause<OMPC_Allocate>,
  479. VersionedClause<OMPC_UsesAllocators, 50>
  480. ];
  481. let allowedOnceClauses = [
  482. VersionedClause<OMPC_Device>,
  483. VersionedClause<OMPC_DefaultMap>,
  484. VersionedClause<OMPC_NoWait>
  485. ];
  486. }
  487. def OMP_Teams : Directive<"teams"> {
  488. let allowedClauses = [
  489. VersionedClause<OMPC_Private>,
  490. VersionedClause<OMPC_FirstPrivate>,
  491. VersionedClause<OMPC_Shared>,
  492. VersionedClause<OMPC_Reduction>,
  493. VersionedClause<OMPC_Allocate>
  494. ];
  495. let allowedOnceClauses = [
  496. VersionedClause<OMPC_Default>,
  497. VersionedClause<OMPC_NumTeams>,
  498. VersionedClause<OMPC_ThreadLimit>
  499. ];
  500. }
  501. def OMP_Cancel : Directive<"cancel"> {
  502. let allowedClauses = [
  503. VersionedClause<OMPC_If>
  504. ];
  505. }
  506. def OMP_Requires : Directive<"requires"> {
  507. let allowedClauses = [
  508. VersionedClause<OMPC_UnifiedAddress>,
  509. VersionedClause<OMPC_UnifiedSharedMemory>,
  510. VersionedClause<OMPC_ReverseOffload>,
  511. VersionedClause<OMPC_DynamicAllocators>,
  512. VersionedClause<OMPC_AtomicDefaultMemOrder>
  513. ];
  514. }
  515. def OMP_TargetData : Directive<"target data"> {
  516. let allowedClauses = [
  517. VersionedClause<OMPC_UseDevicePtr>,
  518. VersionedClause<OMPC_UseDeviceAddr, 50>
  519. ];
  520. let allowedOnceClauses = [
  521. VersionedClause<OMPC_Device>,
  522. VersionedClause<OMPC_If>
  523. ];
  524. let requiredClauses = [
  525. VersionedClause<OMPC_Map>
  526. ];
  527. }
  528. def OMP_TargetEnterData : Directive<"target enter data"> {
  529. let allowedClauses = [
  530. VersionedClause<OMPC_Depend>
  531. ];
  532. let allowedOnceClauses = [
  533. VersionedClause<OMPC_If>,
  534. VersionedClause<OMPC_Device>,
  535. VersionedClause<OMPC_NoWait>
  536. ];
  537. let requiredClauses = [
  538. VersionedClause<OMPC_Map>
  539. ];
  540. }
  541. def OMP_TargetExitData : Directive<"target exit data"> {
  542. let allowedClauses = [
  543. VersionedClause<OMPC_Depend>
  544. ];
  545. let allowedOnceClauses = [
  546. VersionedClause<OMPC_Device>,
  547. VersionedClause<OMPC_If>,
  548. VersionedClause<OMPC_NoWait>
  549. ];
  550. let requiredClauses = [
  551. VersionedClause<OMPC_Map>
  552. ];
  553. }
  554. def OMP_TargetParallel : Directive<"target parallel"> {
  555. let allowedClauses = [
  556. VersionedClause<OMPC_Map>,
  557. VersionedClause<OMPC_NoWait>,
  558. VersionedClause<OMPC_Depend>,
  559. VersionedClause<OMPC_Private>,
  560. VersionedClause<OMPC_FirstPrivate>,
  561. VersionedClause<OMPC_Default>,
  562. VersionedClause<OMPC_Shared>,
  563. VersionedClause<OMPC_Reduction>,
  564. VersionedClause<OMPC_IsDevicePtr>,
  565. VersionedClause<OMPC_Allocate>,
  566. VersionedClause<OMPC_UsesAllocators, 50>
  567. ];
  568. let allowedOnceClauses = [
  569. VersionedClause<OMPC_DefaultMap>,
  570. VersionedClause<OMPC_Device>,
  571. VersionedClause<OMPC_If>,
  572. VersionedClause<OMPC_NumThreads>,
  573. VersionedClause<OMPC_ProcBind>
  574. ];
  575. }
  576. def OMP_TargetParallelFor : Directive<"target parallel for"> {
  577. let allowedClauses = [
  578. VersionedClause<OMPC_If>,
  579. VersionedClause<OMPC_Device>,
  580. VersionedClause<OMPC_Map>,
  581. VersionedClause<OMPC_Private>,
  582. VersionedClause<OMPC_FirstPrivate>,
  583. VersionedClause<OMPC_LastPrivate>,
  584. VersionedClause<OMPC_NoWait>,
  585. VersionedClause<OMPC_Depend>,
  586. VersionedClause<OMPC_DefaultMap>,
  587. VersionedClause<OMPC_NumThreads>,
  588. VersionedClause<OMPC_Default>,
  589. VersionedClause<OMPC_ProcBind>,
  590. VersionedClause<OMPC_Shared>,
  591. VersionedClause<OMPC_Reduction>,
  592. VersionedClause<OMPC_Collapse>,
  593. VersionedClause<OMPC_Schedule>,
  594. VersionedClause<OMPC_Ordered>,
  595. VersionedClause<OMPC_Linear>,
  596. VersionedClause<OMPC_IsDevicePtr>,
  597. VersionedClause<OMPC_Allocate>,
  598. VersionedClause<OMPC_Order, 50>,
  599. VersionedClause<OMPC_UsesAllocators, 50>
  600. ];
  601. }
  602. def OMP_TargetParallelDo : Directive<"target parallel do"> {
  603. let allowedClauses = [
  604. VersionedClause<OMPC_Map>,
  605. VersionedClause<OMPC_Private>,
  606. VersionedClause<OMPC_FirstPrivate>,
  607. VersionedClause<OMPC_LastPrivate>,
  608. VersionedClause<OMPC_Depend>,
  609. VersionedClause<OMPC_Shared>,
  610. VersionedClause<OMPC_Reduction>,
  611. VersionedClause<OMPC_Linear>,
  612. VersionedClause<OMPC_IsDevicePtr>,
  613. VersionedClause<OMPC_Allocator>,
  614. VersionedClause<OMPC_Order>,
  615. VersionedClause<OMPC_UsesAllocators>,
  616. VersionedClause<OMPC_Default>,
  617. VersionedClause<OMPC_Copyin>
  618. ];
  619. let allowedOnceClauses = [
  620. VersionedClause<OMPC_If>,
  621. VersionedClause<OMPC_NumThreads>,
  622. VersionedClause<OMPC_ProcBind>,
  623. VersionedClause<OMPC_Device>,
  624. VersionedClause<OMPC_DefaultMap>,
  625. VersionedClause<OMPC_Schedule>,
  626. VersionedClause<OMPC_Collapse>,
  627. VersionedClause<OMPC_Ordered>,
  628. VersionedClause<OMPC_NoWait>
  629. ];
  630. }
  631. def OMP_TargetUpdate : Directive<"target update"> {
  632. let allowedClauses = [
  633. VersionedClause<OMPC_If>,
  634. VersionedClause<OMPC_Device>,
  635. VersionedClause<OMPC_To>,
  636. VersionedClause<OMPC_From>,
  637. VersionedClause<OMPC_NoWait>,
  638. VersionedClause<OMPC_Depend>
  639. ];
  640. }
  641. def OMP_ParallelFor : Directive<"parallel for"> {
  642. let allowedClauses = [
  643. VersionedClause<OMPC_If>,
  644. VersionedClause<OMPC_NumThreads>,
  645. VersionedClause<OMPC_Default>,
  646. VersionedClause<OMPC_ProcBind>,
  647. VersionedClause<OMPC_Private>,
  648. VersionedClause<OMPC_FirstPrivate>,
  649. VersionedClause<OMPC_Shared>,
  650. VersionedClause<OMPC_Reduction>,
  651. VersionedClause<OMPC_Copyin>,
  652. VersionedClause<OMPC_LastPrivate>,
  653. VersionedClause<OMPC_Collapse>,
  654. VersionedClause<OMPC_Schedule>,
  655. VersionedClause<OMPC_Ordered>,
  656. VersionedClause<OMPC_Linear>,
  657. VersionedClause<OMPC_Allocate>,
  658. VersionedClause<OMPC_Order, 50>
  659. ];
  660. }
  661. def OMP_ParallelDo : Directive<"parallel do"> {
  662. let allowedClauses = [
  663. VersionedClause<OMPC_Default>,
  664. VersionedClause<OMPC_Private>,
  665. VersionedClause<OMPC_FirstPrivate>,
  666. VersionedClause<OMPC_Shared>,
  667. VersionedClause<OMPC_Reduction>,
  668. VersionedClause<OMPC_Copyin>,
  669. VersionedClause<OMPC_LastPrivate>,
  670. VersionedClause<OMPC_Linear>
  671. ];
  672. let allowedOnceClauses = [
  673. VersionedClause<OMPC_If>,
  674. VersionedClause<OMPC_NumThreads>,
  675. VersionedClause<OMPC_ProcBind>,
  676. VersionedClause<OMPC_Schedule>,
  677. VersionedClause<OMPC_Ordered>,
  678. VersionedClause<OMPC_Collapse>
  679. ];
  680. }
  681. def OMP_ParallelForSimd : Directive<"parallel for simd"> {
  682. let allowedClauses = [
  683. VersionedClause<OMPC_If>,
  684. VersionedClause<OMPC_NumThreads>,
  685. VersionedClause<OMPC_Default>,
  686. VersionedClause<OMPC_ProcBind>,
  687. VersionedClause<OMPC_Private>,
  688. VersionedClause<OMPC_FirstPrivate>,
  689. VersionedClause<OMPC_Shared>,
  690. VersionedClause<OMPC_Reduction>,
  691. VersionedClause<OMPC_Copyin>,
  692. VersionedClause<OMPC_LastPrivate>,
  693. VersionedClause<OMPC_Collapse>,
  694. VersionedClause<OMPC_Schedule>,
  695. VersionedClause<OMPC_SafeLen>,
  696. VersionedClause<OMPC_SimdLen>,
  697. VersionedClause<OMPC_Linear>,
  698. VersionedClause<OMPC_Aligned>,
  699. VersionedClause<OMPC_Ordered>,
  700. VersionedClause<OMPC_Allocate>,
  701. VersionedClause<OMPC_NonTemporal, 50>,
  702. VersionedClause<OMPC_Order, 50>
  703. ];
  704. }
  705. def OMP_ParallelDoSimd : Directive<"parallel do simd"> {
  706. let allowedClauses = [
  707. VersionedClause<OMPC_Default>,
  708. VersionedClause<OMPC_Private>,
  709. VersionedClause<OMPC_FirstPrivate>,
  710. VersionedClause<OMPC_Shared>,
  711. VersionedClause<OMPC_Reduction>,
  712. VersionedClause<OMPC_Copyin>,
  713. VersionedClause<OMPC_LastPrivate>,
  714. VersionedClause<OMPC_Linear>,
  715. VersionedClause<OMPC_Aligned>,
  716. VersionedClause<OMPC_Allocate>,
  717. VersionedClause<OMPC_NonTemporal>,
  718. VersionedClause<OMPC_Order>
  719. ];
  720. let allowedOnceClauses = [
  721. VersionedClause<OMPC_If>,
  722. VersionedClause<OMPC_NumThreads>,
  723. VersionedClause<OMPC_ProcBind>,
  724. VersionedClause<OMPC_Schedule>,
  725. VersionedClause<OMPC_Ordered>,
  726. VersionedClause<OMPC_Collapse>,
  727. VersionedClause<OMPC_SafeLen>,
  728. VersionedClause<OMPC_SimdLen>
  729. ];
  730. }
  731. def OMP_ParallelMaster : Directive<"parallel master"> {
  732. let allowedClauses = [
  733. VersionedClause<OMPC_If>,
  734. VersionedClause<OMPC_NumThreads>,
  735. VersionedClause<OMPC_Default>,
  736. VersionedClause<OMPC_Private>,
  737. VersionedClause<OMPC_FirstPrivate>,
  738. VersionedClause<OMPC_Shared>,
  739. VersionedClause<OMPC_Copyin>,
  740. VersionedClause<OMPC_Reduction>,
  741. VersionedClause<OMPC_ProcBind>,
  742. VersionedClause<OMPC_Allocate>
  743. ];
  744. }
  745. def OMP_ParallelSections : Directive<"parallel sections"> {
  746. let allowedClauses = [
  747. VersionedClause<OMPC_If>,
  748. VersionedClause<OMPC_Default>,
  749. VersionedClause<OMPC_ProcBind>,
  750. VersionedClause<OMPC_Private>,
  751. VersionedClause<OMPC_FirstPrivate>,
  752. VersionedClause<OMPC_Shared>,
  753. VersionedClause<OMPC_Reduction>,
  754. VersionedClause<OMPC_Copyin>,
  755. VersionedClause<OMPC_LastPrivate>,
  756. VersionedClause<OMPC_Allocate>
  757. ];
  758. let allowedOnceClauses = [
  759. VersionedClause<OMPC_NumThreads>
  760. ];
  761. }
  762. def OMP_ForSimd : Directive<"for simd"> {
  763. let allowedClauses = [
  764. VersionedClause<OMPC_Private>,
  765. VersionedClause<OMPC_FirstPrivate>,
  766. VersionedClause<OMPC_LastPrivate>,
  767. VersionedClause<OMPC_Reduction>,
  768. VersionedClause<OMPC_Schedule>,
  769. VersionedClause<OMPC_Collapse>,
  770. VersionedClause<OMPC_NoWait>,
  771. VersionedClause<OMPC_SafeLen>,
  772. VersionedClause<OMPC_SimdLen>,
  773. VersionedClause<OMPC_Linear>,
  774. VersionedClause<OMPC_Aligned>,
  775. VersionedClause<OMPC_Ordered>,
  776. VersionedClause<OMPC_Allocate>,
  777. VersionedClause<OMPC_If, 50>,
  778. VersionedClause<OMPC_NonTemporal, 50>,
  779. VersionedClause<OMPC_Order, 50>,
  780. ];
  781. }
  782. def OMP_DoSimd : Directive<"do simd"> {
  783. let allowedClauses = [
  784. VersionedClause<OMPC_Aligned>,
  785. VersionedClause<OMPC_Private>,
  786. VersionedClause<OMPC_FirstPrivate>,
  787. VersionedClause<OMPC_LastPrivate>,
  788. VersionedClause<OMPC_Linear>,
  789. VersionedClause<OMPC_Reduction>
  790. ];
  791. let allowedOnceClauses = [
  792. VersionedClause<OMPC_Schedule>,
  793. VersionedClause<OMPC_Collapse>,
  794. VersionedClause<OMPC_Ordered>,
  795. VersionedClause<OMPC_SafeLen>,
  796. VersionedClause<OMPC_SimdLen>,
  797. VersionedClause<OMPC_NoWait>
  798. ];
  799. }
  800. def OMP_CancellationPoint : Directive<"cancellation point"> {}
  801. def OMP_DeclareReduction : Directive<"declare reduction"> {}
  802. def OMP_DeclareMapper : Directive<"declare mapper"> {
  803. let allowedClauses = [
  804. VersionedClause<OMPC_Map>
  805. ];
  806. }
  807. def OMP_DeclareSimd : Directive<"declare simd"> {
  808. let allowedClauses = [
  809. VersionedClause<OMPC_Linear>,
  810. VersionedClause<OMPC_Aligned>,
  811. VersionedClause<OMPC_Uniform>
  812. ];
  813. let allowedOnceClauses = [
  814. VersionedClause<OMPC_SimdLen>
  815. ];
  816. let allowedExclusiveClauses = [
  817. VersionedClause<OMPC_Inbranch>,
  818. VersionedClause<OMPC_Notinbranch>
  819. ];
  820. }
  821. def OMP_TaskLoop : Directive<"taskloop"> {
  822. let allowedClauses = [
  823. VersionedClause<OMPC_Shared>,
  824. VersionedClause<OMPC_Private>,
  825. VersionedClause<OMPC_FirstPrivate>,
  826. VersionedClause<OMPC_LastPrivate>,
  827. VersionedClause<OMPC_Untied>,
  828. VersionedClause<OMPC_Mergeable>,
  829. VersionedClause<OMPC_NoGroup>,
  830. VersionedClause<OMPC_Reduction>,
  831. VersionedClause<OMPC_InReduction>,
  832. VersionedClause<OMPC_Allocate>
  833. ];
  834. let allowedOnceClauses = [
  835. VersionedClause<OMPC_Default>,
  836. VersionedClause<OMPC_If>,
  837. VersionedClause<OMPC_Collapse>,
  838. VersionedClause<OMPC_Final>,
  839. VersionedClause<OMPC_Priority>,
  840. ];
  841. let allowedExclusiveClauses = [
  842. VersionedClause<OMPC_GrainSize>,
  843. VersionedClause<OMPC_NumTasks>
  844. ];
  845. }
  846. def OMP_TaskLoopSimd : Directive<"taskloop simd"> {
  847. let allowedClauses = [
  848. VersionedClause<OMPC_Aligned>,
  849. VersionedClause<OMPC_Allocate>,
  850. VersionedClause<OMPC_Default>,
  851. VersionedClause<OMPC_FirstPrivate>,
  852. VersionedClause<OMPC_InReduction>,
  853. VersionedClause<OMPC_LastPrivate>,
  854. VersionedClause<OMPC_Linear>,
  855. VersionedClause<OMPC_Mergeable>,
  856. VersionedClause<OMPC_NoGroup>,
  857. VersionedClause<OMPC_NonTemporal, 50>,
  858. VersionedClause<OMPC_Order, 50>,
  859. VersionedClause<OMPC_Private>,
  860. VersionedClause<OMPC_Reduction>,
  861. VersionedClause<OMPC_Shared>,
  862. VersionedClause<OMPC_Untied>
  863. ];
  864. let allowedOnceClauses = [
  865. VersionedClause<OMPC_If>,
  866. VersionedClause<OMPC_Collapse>,
  867. VersionedClause<OMPC_SafeLen>,
  868. VersionedClause<OMPC_SimdLen>,
  869. VersionedClause<OMPC_Final>,
  870. VersionedClause<OMPC_Priority>
  871. ];
  872. let allowedExclusiveClauses = [
  873. VersionedClause<OMPC_GrainSize>,
  874. VersionedClause<OMPC_NumTasks>
  875. ];
  876. }
  877. def OMP_Distribute : Directive<"distribute"> {
  878. let allowedClauses = [
  879. VersionedClause<OMPC_Private>,
  880. VersionedClause<OMPC_FirstPrivate>,
  881. VersionedClause<OMPC_LastPrivate>,
  882. VersionedClause<OMPC_Allocate>
  883. ];
  884. let allowedOnceClauses = [
  885. VersionedClause<OMPC_Collapse>,
  886. VersionedClause<OMPC_DistSchedule>
  887. ];
  888. }
  889. def OMP_DeclareTarget : Directive<"declare target"> {
  890. let allowedClauses = [
  891. VersionedClause<OMPC_To>,
  892. VersionedClause<OMPC_Link>
  893. ];
  894. }
  895. def OMP_EndDeclareTarget : Directive<"end declare target"> {}
  896. def OMP_DistributeParallelFor : Directive<"distribute parallel for"> {
  897. let allowedClauses = [
  898. VersionedClause<OMPC_FirstPrivate>,
  899. VersionedClause<OMPC_LastPrivate>,
  900. VersionedClause<OMPC_Collapse>,
  901. VersionedClause<OMPC_DistSchedule>,
  902. VersionedClause<OMPC_If>,
  903. VersionedClause<OMPC_NumThreads>,
  904. VersionedClause<OMPC_Default>,
  905. VersionedClause<OMPC_ProcBind>,
  906. VersionedClause<OMPC_Private>,
  907. VersionedClause<OMPC_Shared>,
  908. VersionedClause<OMPC_Reduction>,
  909. VersionedClause<OMPC_Copyin>,
  910. VersionedClause<OMPC_Schedule>,
  911. VersionedClause<OMPC_Allocate>,
  912. VersionedClause<OMPC_Order, 50>
  913. ];
  914. }
  915. def OMP_DistributeParallelDo : Directive<"distribute parallel do"> {
  916. let allowedClauses = [
  917. VersionedClause<OMPC_Private>,
  918. VersionedClause<OMPC_FirstPrivate>,
  919. VersionedClause<OMPC_LastPrivate>,
  920. VersionedClause<OMPC_Allocate>,
  921. VersionedClause<OMPC_Order>,
  922. VersionedClause<OMPC_Default>,
  923. VersionedClause<OMPC_Shared>,
  924. VersionedClause<OMPC_Reduction>,
  925. VersionedClause<OMPC_Copyin>,
  926. VersionedClause<OMPC_Linear>
  927. ];
  928. let allowedOnceClauses = [
  929. VersionedClause<OMPC_Collapse>,
  930. VersionedClause<OMPC_DistSchedule>,
  931. VersionedClause<OMPC_If>,
  932. VersionedClause<OMPC_NumThreads>,
  933. VersionedClause<OMPC_ProcBind>,
  934. VersionedClause<OMPC_Schedule>,
  935. VersionedClause<OMPC_Ordered>
  936. ];
  937. }
  938. def OMP_DistributeParallelForSimd : Directive<"distribute parallel for simd"> {
  939. let allowedClauses = [
  940. VersionedClause<OMPC_FirstPrivate>,
  941. VersionedClause<OMPC_LastPrivate>,
  942. VersionedClause<OMPC_Collapse>,
  943. VersionedClause<OMPC_DistSchedule>,
  944. VersionedClause<OMPC_If>,
  945. VersionedClause<OMPC_NumThreads>,
  946. VersionedClause<OMPC_Default>,
  947. VersionedClause<OMPC_ProcBind>,
  948. VersionedClause<OMPC_Private>,
  949. VersionedClause<OMPC_Shared>,
  950. VersionedClause<OMPC_Reduction>,
  951. VersionedClause<OMPC_Copyin>,
  952. VersionedClause<OMPC_Schedule>,
  953. VersionedClause<OMPC_Linear>,
  954. VersionedClause<OMPC_Aligned>,
  955. VersionedClause<OMPC_SafeLen>,
  956. VersionedClause<OMPC_SimdLen>,
  957. VersionedClause<OMPC_Allocate>,
  958. VersionedClause<OMPC_NonTemporal, 50>,
  959. VersionedClause<OMPC_Order, 50>
  960. ];
  961. }
  962. def OMP_DistributeParallelDoSimd : Directive<"distribute parallel do simd"> {
  963. let allowedClauses = [
  964. VersionedClause<OMPC_FirstPrivate>,
  965. VersionedClause<OMPC_LastPrivate>,
  966. VersionedClause<OMPC_Collapse>,
  967. VersionedClause<OMPC_DistSchedule>,
  968. VersionedClause<OMPC_If>,
  969. VersionedClause<OMPC_NumThreads>,
  970. VersionedClause<OMPC_Default>,
  971. VersionedClause<OMPC_ProcBind>,
  972. VersionedClause<OMPC_Private>,
  973. VersionedClause<OMPC_Shared>,
  974. VersionedClause<OMPC_Reduction>,
  975. VersionedClause<OMPC_Copyin>,
  976. VersionedClause<OMPC_Schedule>,
  977. VersionedClause<OMPC_Linear>,
  978. VersionedClause<OMPC_Aligned>,
  979. VersionedClause<OMPC_SafeLen>,
  980. VersionedClause<OMPC_SimdLen>,
  981. VersionedClause<OMPC_Allocate>,
  982. VersionedClause<OMPC_NonTemporal>,
  983. VersionedClause<OMPC_Order>
  984. ];
  985. }
  986. def OMP_DistributeSimd : Directive<"distribute simd"> {
  987. let allowedClauses = [
  988. VersionedClause<OMPC_Aligned>,
  989. VersionedClause<OMPC_Allocate>,
  990. VersionedClause<OMPC_Copyin>,
  991. VersionedClause<OMPC_Default>,
  992. VersionedClause<OMPC_Linear>,
  993. VersionedClause<OMPC_FirstPrivate>,
  994. VersionedClause<OMPC_LastPrivate>,
  995. VersionedClause<OMPC_NonTemporal, 50>,
  996. VersionedClause<OMPC_Order, 50>,
  997. VersionedClause<OMPC_Private>,
  998. VersionedClause<OMPC_Reduction>
  999. ];
  1000. let allowedOnceClauses = [
  1001. VersionedClause<OMPC_Collapse>,
  1002. VersionedClause<OMPC_DistSchedule>,
  1003. VersionedClause<OMPC_If, 50>,
  1004. VersionedClause<OMPC_NumThreads>,
  1005. VersionedClause<OMPC_Ordered>,
  1006. VersionedClause<OMPC_ProcBind>,
  1007. VersionedClause<OMPC_Schedule>,
  1008. VersionedClause<OMPC_SafeLen>,
  1009. VersionedClause<OMPC_SimdLen>
  1010. ];
  1011. }
  1012. def OMP_TargetParallelForSimd : Directive<"target parallel for simd"> {
  1013. let allowedClauses = [
  1014. VersionedClause<OMPC_If>,
  1015. VersionedClause<OMPC_Device>,
  1016. VersionedClause<OMPC_Map>,
  1017. VersionedClause<OMPC_Private>,
  1018. VersionedClause<OMPC_FirstPrivate>,
  1019. VersionedClause<OMPC_LastPrivate>,
  1020. VersionedClause<OMPC_NoWait>,
  1021. VersionedClause<OMPC_Depend>,
  1022. VersionedClause<OMPC_DefaultMap>,
  1023. VersionedClause<OMPC_NumThreads>,
  1024. VersionedClause<OMPC_Default>,
  1025. VersionedClause<OMPC_ProcBind>,
  1026. VersionedClause<OMPC_Shared>,
  1027. VersionedClause<OMPC_Reduction>,
  1028. VersionedClause<OMPC_Collapse>,
  1029. VersionedClause<OMPC_Schedule>,
  1030. VersionedClause<OMPC_Ordered>,
  1031. VersionedClause<OMPC_Linear>,
  1032. VersionedClause<OMPC_SafeLen>,
  1033. VersionedClause<OMPC_SimdLen>,
  1034. VersionedClause<OMPC_Aligned>,
  1035. VersionedClause<OMPC_IsDevicePtr>,
  1036. VersionedClause<OMPC_Allocate>,
  1037. VersionedClause<OMPC_NonTemporal, 50>,
  1038. VersionedClause<OMPC_Order, 50>,
  1039. VersionedClause<OMPC_UsesAllocators, 50>
  1040. ];
  1041. }
  1042. def OMP_TargetParallelDoSimd : Directive<"target parallel do simd"> {
  1043. let allowedClauses = [
  1044. VersionedClause<OMPC_If>,
  1045. VersionedClause<OMPC_Device>,
  1046. VersionedClause<OMPC_Map>,
  1047. VersionedClause<OMPC_Private>,
  1048. VersionedClause<OMPC_FirstPrivate>,
  1049. VersionedClause<OMPC_LastPrivate>,
  1050. VersionedClause<OMPC_NoWait>,
  1051. VersionedClause<OMPC_Depend>,
  1052. VersionedClause<OMPC_DefaultMap>,
  1053. VersionedClause<OMPC_NumThreads>,
  1054. VersionedClause<OMPC_Default>,
  1055. VersionedClause<OMPC_ProcBind>,
  1056. VersionedClause<OMPC_Shared>,
  1057. VersionedClause<OMPC_Reduction>,
  1058. VersionedClause<OMPC_Collapse>,
  1059. VersionedClause<OMPC_Schedule>,
  1060. VersionedClause<OMPC_Ordered>,
  1061. VersionedClause<OMPC_Linear>,
  1062. VersionedClause<OMPC_SafeLen>,
  1063. VersionedClause<OMPC_SimdLen>,
  1064. VersionedClause<OMPC_Aligned>,
  1065. VersionedClause<OMPC_IsDevicePtr>,
  1066. VersionedClause<OMPC_Allocate>,
  1067. VersionedClause<OMPC_NonTemporal>,
  1068. VersionedClause<OMPC_Order>,
  1069. VersionedClause<OMPC_UsesAllocators>
  1070. ];
  1071. }
  1072. def OMP_TargetSimd : Directive<"target simd"> {
  1073. let allowedClauses = [
  1074. VersionedClause<OMPC_Aligned>,
  1075. VersionedClause<OMPC_Allocate>,
  1076. VersionedClause<OMPC_Depend>,
  1077. VersionedClause<OMPC_FirstPrivate>,
  1078. VersionedClause<OMPC_IsDevicePtr>,
  1079. VersionedClause<OMPC_LastPrivate>,
  1080. VersionedClause<OMPC_Linear>,
  1081. VersionedClause<OMPC_Map>,
  1082. VersionedClause<OMPC_NonTemporal, 50>,
  1083. VersionedClause<OMPC_NoWait>,
  1084. VersionedClause<OMPC_Order, 50>,
  1085. VersionedClause<OMPC_Private>,
  1086. VersionedClause<OMPC_Reduction>,
  1087. VersionedClause<OMPC_Shared>,
  1088. VersionedClause<OMPC_UsesAllocators, 50>
  1089. ];
  1090. let allowedOnceClauses = [
  1091. VersionedClause<OMPC_Collapse>,
  1092. VersionedClause<OMPC_SafeLen>,
  1093. VersionedClause<OMPC_SimdLen>,
  1094. VersionedClause<OMPC_If>,
  1095. VersionedClause<OMPC_NumThreads>,
  1096. VersionedClause<OMPC_ProcBind>,
  1097. VersionedClause<OMPC_Device>,
  1098. VersionedClause<OMPC_DefaultMap>,
  1099. VersionedClause<OMPC_Schedule>
  1100. ];
  1101. }
  1102. def OMP_TeamsDistribute : Directive<"teams distribute"> {
  1103. let allowedClauses = [
  1104. VersionedClause<OMPC_Default>,
  1105. VersionedClause<OMPC_Private>,
  1106. VersionedClause<OMPC_FirstPrivate>,
  1107. VersionedClause<OMPC_Shared>,
  1108. VersionedClause<OMPC_Reduction>,
  1109. VersionedClause<OMPC_NumTeams>,
  1110. VersionedClause<OMPC_ThreadLimit>,
  1111. VersionedClause<OMPC_LastPrivate>,
  1112. VersionedClause<OMPC_Collapse>,
  1113. VersionedClause<OMPC_DistSchedule>,
  1114. VersionedClause<OMPC_Allocate>
  1115. ];
  1116. }
  1117. def OMP_TeamsDistributeSimd : Directive<"teams distribute simd"> {
  1118. let allowedClauses = [
  1119. VersionedClause<OMPC_Aligned>,
  1120. VersionedClause<OMPC_Allocate>,
  1121. VersionedClause<OMPC_FirstPrivate>,
  1122. VersionedClause<OMPC_LastPrivate>,
  1123. VersionedClause<OMPC_Linear>,
  1124. VersionedClause<OMPC_NonTemporal, 50>,
  1125. VersionedClause<OMPC_Order, 50>,
  1126. VersionedClause<OMPC_Private>,
  1127. VersionedClause<OMPC_Reduction>,
  1128. VersionedClause<OMPC_Shared>
  1129. ];
  1130. let allowedOnceClauses = [
  1131. VersionedClause<OMPC_Collapse>,
  1132. VersionedClause<OMPC_Default>,
  1133. VersionedClause<OMPC_DistSchedule>,
  1134. VersionedClause<OMPC_If, 50>,
  1135. VersionedClause<OMPC_NumTeams>,
  1136. VersionedClause<OMPC_SafeLen>,
  1137. VersionedClause<OMPC_SimdLen>,
  1138. VersionedClause<OMPC_ThreadLimit>
  1139. ];
  1140. }
  1141. def OMP_TeamsDistributeParallelForSimd :
  1142. Directive<"teams distribute parallel for simd"> {
  1143. let allowedClauses = [
  1144. VersionedClause<OMPC_FirstPrivate>,
  1145. VersionedClause<OMPC_LastPrivate>,
  1146. VersionedClause<OMPC_Collapse>,
  1147. VersionedClause<OMPC_DistSchedule>,
  1148. VersionedClause<OMPC_If>,
  1149. VersionedClause<OMPC_NumThreads>,
  1150. VersionedClause<OMPC_Default>,
  1151. VersionedClause<OMPC_ProcBind>,
  1152. VersionedClause<OMPC_Private>,
  1153. VersionedClause<OMPC_Shared>,
  1154. VersionedClause<OMPC_Reduction>,
  1155. VersionedClause<OMPC_Schedule>,
  1156. VersionedClause<OMPC_Linear>,
  1157. VersionedClause<OMPC_Aligned>,
  1158. VersionedClause<OMPC_SafeLen>,
  1159. VersionedClause<OMPC_SimdLen>,
  1160. VersionedClause<OMPC_NumTeams>,
  1161. VersionedClause<OMPC_ThreadLimit>,
  1162. VersionedClause<OMPC_Allocate>,
  1163. VersionedClause<OMPC_NonTemporal, 50>,
  1164. VersionedClause<OMPC_Order, 50>
  1165. ];
  1166. }
  1167. def OMP_TeamsDistributeParallelDoSimd :
  1168. Directive<"teams distribute parallel do simd"> {
  1169. let allowedClauses = [
  1170. VersionedClause<OMPC_Private>,
  1171. VersionedClause<OMPC_FirstPrivate>,
  1172. VersionedClause<OMPC_LastPrivate>,
  1173. VersionedClause<OMPC_Allocate>,
  1174. VersionedClause<OMPC_Shared>,
  1175. VersionedClause<OMPC_Reduction>,
  1176. VersionedClause<OMPC_Linear>,
  1177. VersionedClause<OMPC_Order>,
  1178. VersionedClause<OMPC_Aligned>,
  1179. VersionedClause<OMPC_NonTemporal>
  1180. ];
  1181. let allowedOnceClauses = [
  1182. VersionedClause<OMPC_Default>,
  1183. VersionedClause<OMPC_NumTeams>,
  1184. VersionedClause<OMPC_ThreadLimit>,
  1185. VersionedClause<OMPC_Collapse>,
  1186. VersionedClause<OMPC_DistSchedule>,
  1187. VersionedClause<OMPC_NumThreads>,
  1188. VersionedClause<OMPC_ProcBind>,
  1189. VersionedClause<OMPC_Schedule>,
  1190. VersionedClause<OMPC_SafeLen>,
  1191. VersionedClause<OMPC_SimdLen>,
  1192. VersionedClause<OMPC_If>,
  1193. ];
  1194. }
  1195. def OMP_TeamsDistributeParallelFor :
  1196. Directive<"teams distribute parallel for"> {
  1197. let allowedClauses = [
  1198. VersionedClause<OMPC_FirstPrivate>,
  1199. VersionedClause<OMPC_LastPrivate>,
  1200. VersionedClause<OMPC_Collapse>,
  1201. VersionedClause<OMPC_DistSchedule>,
  1202. VersionedClause<OMPC_If>,
  1203. VersionedClause<OMPC_NumThreads>,
  1204. VersionedClause<OMPC_Default>,
  1205. VersionedClause<OMPC_ProcBind>,
  1206. VersionedClause<OMPC_Private>,
  1207. VersionedClause<OMPC_Shared>,
  1208. VersionedClause<OMPC_Reduction>,
  1209. VersionedClause<OMPC_Schedule>,
  1210. VersionedClause<OMPC_NumTeams>,
  1211. VersionedClause<OMPC_ThreadLimit>,
  1212. VersionedClause<OMPC_Copyin>,
  1213. VersionedClause<OMPC_Allocate>,
  1214. VersionedClause<OMPC_Order, 50>
  1215. ];
  1216. }
  1217. def OMP_TeamsDistributeParallelDo :
  1218. Directive<"teams distribute parallel do"> {
  1219. let allowedClauses = [
  1220. VersionedClause<OMPC_Private>,
  1221. VersionedClause<OMPC_FirstPrivate>,
  1222. VersionedClause<OMPC_LastPrivate>,
  1223. VersionedClause<OMPC_Shared>,
  1224. VersionedClause<OMPC_Reduction>,
  1225. VersionedClause<OMPC_Allocate>,
  1226. VersionedClause<OMPC_Copyin>,
  1227. VersionedClause<OMPC_Linear>
  1228. ];
  1229. let allowedOnceClauses = [
  1230. VersionedClause<OMPC_NumTeams>,
  1231. VersionedClause<OMPC_ThreadLimit>,
  1232. VersionedClause<OMPC_Default>,
  1233. VersionedClause<OMPC_Collapse>,
  1234. VersionedClause<OMPC_DistSchedule>,
  1235. VersionedClause<OMPC_Ordered>,
  1236. VersionedClause<OMPC_Order>,
  1237. VersionedClause<OMPC_If>,
  1238. VersionedClause<OMPC_NumThreads>,
  1239. VersionedClause<OMPC_ProcBind>,
  1240. VersionedClause<OMPC_Schedule>
  1241. ];
  1242. }
  1243. def OMP_TargetTeams : Directive<"target teams"> {
  1244. let allowedClauses = [
  1245. VersionedClause<OMPC_If>,
  1246. VersionedClause<OMPC_Map>,
  1247. VersionedClause<OMPC_Private>,
  1248. VersionedClause<OMPC_Depend>,
  1249. VersionedClause<OMPC_FirstPrivate>,
  1250. VersionedClause<OMPC_IsDevicePtr>,
  1251. VersionedClause<OMPC_Reduction>,
  1252. VersionedClause<OMPC_Allocate>,
  1253. VersionedClause<OMPC_UsesAllocators, 50>,
  1254. VersionedClause<OMPC_Shared>
  1255. ];
  1256. let allowedOnceClauses = [
  1257. VersionedClause<OMPC_Device>,
  1258. VersionedClause<OMPC_NoWait>,
  1259. VersionedClause<OMPC_DefaultMap>,
  1260. VersionedClause<OMPC_Default>,
  1261. VersionedClause<OMPC_NumTeams>,
  1262. VersionedClause<OMPC_ThreadLimit>
  1263. ];
  1264. }
  1265. def OMP_TargetTeamsDistribute : Directive<"target teams distribute"> {
  1266. let allowedClauses = [
  1267. VersionedClause<OMPC_If>,
  1268. VersionedClause<OMPC_Map>,
  1269. VersionedClause<OMPC_Private>,
  1270. VersionedClause<OMPC_Depend>,
  1271. VersionedClause<OMPC_FirstPrivate>,
  1272. VersionedClause<OMPC_IsDevicePtr>,
  1273. VersionedClause<OMPC_Reduction>,
  1274. VersionedClause<OMPC_Allocate>,
  1275. VersionedClause<OMPC_UsesAllocators, 50>,
  1276. VersionedClause<OMPC_Shared>,
  1277. VersionedClause<OMPC_LastPrivate>
  1278. ];
  1279. let allowedOnceClauses = [
  1280. VersionedClause<OMPC_Device>,
  1281. VersionedClause<OMPC_NoWait>,
  1282. VersionedClause<OMPC_DefaultMap>,
  1283. VersionedClause<OMPC_Default>,
  1284. VersionedClause<OMPC_NumTeams>,
  1285. VersionedClause<OMPC_ThreadLimit>,
  1286. VersionedClause<OMPC_Collapse>,
  1287. VersionedClause<OMPC_DistSchedule>
  1288. ];
  1289. }
  1290. def OMP_TargetTeamsDistributeParallelFor :
  1291. Directive<"target teams distribute parallel for"> {
  1292. let allowedClauses = [
  1293. VersionedClause<OMPC_If>,
  1294. VersionedClause<OMPC_Device>,
  1295. VersionedClause<OMPC_Map>,
  1296. VersionedClause<OMPC_Private>,
  1297. VersionedClause<OMPC_NoWait>,
  1298. VersionedClause<OMPC_Depend>,
  1299. VersionedClause<OMPC_DefaultMap>,
  1300. VersionedClause<OMPC_FirstPrivate>,
  1301. VersionedClause<OMPC_IsDevicePtr>,
  1302. VersionedClause<OMPC_Default>,
  1303. VersionedClause<OMPC_Shared>,
  1304. VersionedClause<OMPC_Reduction>,
  1305. VersionedClause<OMPC_NumTeams>,
  1306. VersionedClause<OMPC_ThreadLimit>,
  1307. VersionedClause<OMPC_LastPrivate>,
  1308. VersionedClause<OMPC_Collapse>,
  1309. VersionedClause<OMPC_DistSchedule>,
  1310. VersionedClause<OMPC_NumThreads>,
  1311. VersionedClause<OMPC_ProcBind>,
  1312. VersionedClause<OMPC_Schedule>,
  1313. VersionedClause<OMPC_Allocate>,
  1314. VersionedClause<OMPC_Order, 50>,
  1315. VersionedClause<OMPC_UsesAllocators, 50>
  1316. ];
  1317. }
  1318. def OMP_TargetTeamsDistributeParallelDo :
  1319. Directive<"target teams distribute parallel do"> {
  1320. let allowedClauses = [
  1321. VersionedClause<OMPC_If>,
  1322. VersionedClause<OMPC_Map>,
  1323. VersionedClause<OMPC_Private>,
  1324. VersionedClause<OMPC_Depend>,
  1325. VersionedClause<OMPC_FirstPrivate>,
  1326. VersionedClause<OMPC_IsDevicePtr>,
  1327. VersionedClause<OMPC_Reduction>,
  1328. VersionedClause<OMPC_Allocate>,
  1329. VersionedClause<OMPC_UsesAllocators>,
  1330. VersionedClause<OMPC_Shared>,
  1331. VersionedClause<OMPC_LastPrivate>,
  1332. VersionedClause<OMPC_Copyin>,
  1333. VersionedClause<OMPC_Linear>,
  1334. VersionedClause<OMPC_Ordered>,
  1335. VersionedClause<OMPC_Order>
  1336. ];
  1337. let allowedOnceClauses = [
  1338. VersionedClause<OMPC_Device>,
  1339. VersionedClause<OMPC_DefaultMap>,
  1340. VersionedClause<OMPC_NoWait>,
  1341. VersionedClause<OMPC_Default>,
  1342. VersionedClause<OMPC_NumTeams>,
  1343. VersionedClause<OMPC_ThreadLimit>,
  1344. VersionedClause<OMPC_Collapse>,
  1345. VersionedClause<OMPC_DistSchedule>,
  1346. VersionedClause<OMPC_NumThreads>,
  1347. VersionedClause<OMPC_ProcBind>,
  1348. VersionedClause<OMPC_Schedule>,
  1349. ];
  1350. }
  1351. def OMP_TargetTeamsDistributeParallelForSimd :
  1352. Directive<"target teams distribute parallel for simd"> {
  1353. let allowedClauses = [
  1354. VersionedClause<OMPC_If>,
  1355. VersionedClause<OMPC_Device>,
  1356. VersionedClause<OMPC_Map>,
  1357. VersionedClause<OMPC_Private>,
  1358. VersionedClause<OMPC_NoWait>,
  1359. VersionedClause<OMPC_Depend>,
  1360. VersionedClause<OMPC_DefaultMap>,
  1361. VersionedClause<OMPC_FirstPrivate>,
  1362. VersionedClause<OMPC_IsDevicePtr>,
  1363. VersionedClause<OMPC_Default>,
  1364. VersionedClause<OMPC_Shared>,
  1365. VersionedClause<OMPC_Reduction>,
  1366. VersionedClause<OMPC_NumTeams>,
  1367. VersionedClause<OMPC_ThreadLimit>,
  1368. VersionedClause<OMPC_LastPrivate>,
  1369. VersionedClause<OMPC_Collapse>,
  1370. VersionedClause<OMPC_DistSchedule>,
  1371. VersionedClause<OMPC_NumThreads>,
  1372. VersionedClause<OMPC_ProcBind>,
  1373. VersionedClause<OMPC_Schedule>,
  1374. VersionedClause<OMPC_Linear>,
  1375. VersionedClause<OMPC_Aligned>,
  1376. VersionedClause<OMPC_SafeLen>,
  1377. VersionedClause<OMPC_SimdLen>,
  1378. VersionedClause<OMPC_Allocate>,
  1379. VersionedClause<OMPC_NonTemporal, 50>,
  1380. VersionedClause<OMPC_Order, 50>,
  1381. VersionedClause<OMPC_UsesAllocators, 50>
  1382. ];
  1383. }
  1384. def OMP_TargetTeamsDistributeParallelDoSimd :
  1385. Directive<"target teams distribute parallel do simd"> {
  1386. let allowedClauses = [
  1387. VersionedClause<OMPC_Map>,
  1388. VersionedClause<OMPC_Private>,
  1389. VersionedClause<OMPC_Depend>,
  1390. VersionedClause<OMPC_FirstPrivate>,
  1391. VersionedClause<OMPC_IsDevicePtr>,
  1392. VersionedClause<OMPC_Reduction>,
  1393. VersionedClause<OMPC_Allocate>,
  1394. VersionedClause<OMPC_UsesAllocators>,
  1395. VersionedClause<OMPC_Shared>,
  1396. VersionedClause<OMPC_LastPrivate>,
  1397. VersionedClause<OMPC_Copyin>,
  1398. VersionedClause<OMPC_Linear>,
  1399. VersionedClause<OMPC_Ordered>,
  1400. VersionedClause<OMPC_Order>,
  1401. VersionedClause<OMPC_Aligned>,
  1402. VersionedClause<OMPC_NonTemporal>
  1403. ];
  1404. let allowedOnceClauses = [
  1405. VersionedClause<OMPC_If>,
  1406. VersionedClause<OMPC_Device>,
  1407. VersionedClause<OMPC_NoWait>,
  1408. VersionedClause<OMPC_DefaultMap>,
  1409. VersionedClause<OMPC_Default>,
  1410. VersionedClause<OMPC_NumTeams>,
  1411. VersionedClause<OMPC_ThreadLimit>,
  1412. VersionedClause<OMPC_Collapse>,
  1413. VersionedClause<OMPC_DistSchedule>,
  1414. VersionedClause<OMPC_NumThreads>,
  1415. VersionedClause<OMPC_ProcBind>,
  1416. VersionedClause<OMPC_Schedule>,
  1417. VersionedClause<OMPC_SafeLen>,
  1418. VersionedClause<OMPC_SimdLen>
  1419. ];
  1420. }
  1421. def OMP_TargetTeamsDistributeSimd :
  1422. Directive<"target teams distribute simd"> {
  1423. let allowedClauses = [
  1424. VersionedClause<OMPC_Aligned>,
  1425. VersionedClause<OMPC_Allocate>,
  1426. VersionedClause<OMPC_Depend>,
  1427. VersionedClause<OMPC_FirstPrivate>,
  1428. VersionedClause<OMPC_If>,
  1429. VersionedClause<OMPC_IsDevicePtr>,
  1430. VersionedClause<OMPC_LastPrivate>,
  1431. VersionedClause<OMPC_Linear>,
  1432. VersionedClause<OMPC_Map>,
  1433. VersionedClause<OMPC_NonTemporal, 50>,
  1434. VersionedClause<OMPC_Order, 50>,
  1435. VersionedClause<OMPC_Private>,
  1436. VersionedClause<OMPC_Reduction>,
  1437. VersionedClause<OMPC_Shared>,
  1438. VersionedClause<OMPC_UsesAllocators, 50>
  1439. ];
  1440. let allowedOnceClauses = [
  1441. VersionedClause<OMPC_Device>,
  1442. VersionedClause<OMPC_DefaultMap>,
  1443. VersionedClause<OMPC_NoWait>,
  1444. VersionedClause<OMPC_NumTeams>,
  1445. VersionedClause<OMPC_ThreadLimit>,
  1446. VersionedClause<OMPC_Collapse>,
  1447. VersionedClause<OMPC_DistSchedule>,
  1448. VersionedClause<OMPC_SafeLen>,
  1449. VersionedClause<OMPC_SimdLen>,
  1450. ];
  1451. }
  1452. def OMP_Allocate : Directive<"allocate"> {
  1453. let allowedClauses = [
  1454. VersionedClause<OMPC_Allocator>
  1455. ];
  1456. }
  1457. def OMP_DeclareVariant : Directive<"declare variant"> {
  1458. let allowedClauses = [
  1459. VersionedClause<OMPC_Match>
  1460. ];
  1461. }
  1462. def OMP_MasterTaskloop : Directive<"master taskloop"> {
  1463. let allowedClauses = [
  1464. VersionedClause<OMPC_If>,
  1465. VersionedClause<OMPC_Shared>,
  1466. VersionedClause<OMPC_Private>,
  1467. VersionedClause<OMPC_FirstPrivate>,
  1468. VersionedClause<OMPC_LastPrivate>,
  1469. VersionedClause<OMPC_Default>,
  1470. VersionedClause<OMPC_Collapse>,
  1471. VersionedClause<OMPC_Final>,
  1472. VersionedClause<OMPC_Untied>,
  1473. VersionedClause<OMPC_Mergeable>,
  1474. VersionedClause<OMPC_Priority>,
  1475. VersionedClause<OMPC_GrainSize>,
  1476. VersionedClause<OMPC_NoGroup>,
  1477. VersionedClause<OMPC_NumTasks>,
  1478. VersionedClause<OMPC_Reduction>,
  1479. VersionedClause<OMPC_InReduction>,
  1480. VersionedClause<OMPC_Allocate>
  1481. ];
  1482. }
  1483. def OMP_ParallelMasterTaskloop :
  1484. Directive<"parallel master taskloop"> {
  1485. let allowedClauses = [
  1486. VersionedClause<OMPC_If>,
  1487. VersionedClause<OMPC_Shared>,
  1488. VersionedClause<OMPC_Private>,
  1489. VersionedClause<OMPC_FirstPrivate>,
  1490. VersionedClause<OMPC_LastPrivate>,
  1491. VersionedClause<OMPC_Default>,
  1492. VersionedClause<OMPC_Collapse>,
  1493. VersionedClause<OMPC_Final>,
  1494. VersionedClause<OMPC_Untied>,
  1495. VersionedClause<OMPC_Mergeable>,
  1496. VersionedClause<OMPC_Priority>,
  1497. VersionedClause<OMPC_GrainSize>,
  1498. VersionedClause<OMPC_NoGroup>,
  1499. VersionedClause<OMPC_NumTasks>,
  1500. VersionedClause<OMPC_Reduction>,
  1501. VersionedClause<OMPC_Allocate>,
  1502. VersionedClause<OMPC_NumThreads>,
  1503. VersionedClause<OMPC_ProcBind>,
  1504. VersionedClause<OMPC_Copyin>
  1505. ];
  1506. }
  1507. def OMP_MasterTaskloopSimd : Directive<"master taskloop simd"> {
  1508. let allowedClauses = [
  1509. VersionedClause<OMPC_If>,
  1510. VersionedClause<OMPC_Shared>,
  1511. VersionedClause<OMPC_Private>,
  1512. VersionedClause<OMPC_FirstPrivate>,
  1513. VersionedClause<OMPC_LastPrivate>,
  1514. VersionedClause<OMPC_Default>,
  1515. VersionedClause<OMPC_Collapse>,
  1516. VersionedClause<OMPC_Final>,
  1517. VersionedClause<OMPC_Untied>,
  1518. VersionedClause<OMPC_Mergeable>,
  1519. VersionedClause<OMPC_Priority>,
  1520. VersionedClause<OMPC_Linear>,
  1521. VersionedClause<OMPC_Aligned>,
  1522. VersionedClause<OMPC_SafeLen>,
  1523. VersionedClause<OMPC_SimdLen>,
  1524. VersionedClause<OMPC_GrainSize>,
  1525. VersionedClause<OMPC_NoGroup>,
  1526. VersionedClause<OMPC_NumTasks>,
  1527. VersionedClause<OMPC_Reduction>,
  1528. VersionedClause<OMPC_InReduction>,
  1529. VersionedClause<OMPC_Allocate>,
  1530. VersionedClause<OMPC_NonTemporal, 50>,
  1531. VersionedClause<OMPC_Order, 50>
  1532. ];
  1533. }
  1534. def OMP_ParallelMasterTaskloopSimd :
  1535. Directive<"parallel master taskloop simd"> {
  1536. let allowedClauses = [
  1537. VersionedClause<OMPC_If>,
  1538. VersionedClause<OMPC_Shared>,
  1539. VersionedClause<OMPC_Private>,
  1540. VersionedClause<OMPC_FirstPrivate>,
  1541. VersionedClause<OMPC_LastPrivate>,
  1542. VersionedClause<OMPC_Default>,
  1543. VersionedClause<OMPC_Collapse>,
  1544. VersionedClause<OMPC_Final>,
  1545. VersionedClause<OMPC_Untied>,
  1546. VersionedClause<OMPC_Mergeable>,
  1547. VersionedClause<OMPC_Priority>,
  1548. VersionedClause<OMPC_GrainSize>,
  1549. VersionedClause<OMPC_NoGroup>,
  1550. VersionedClause<OMPC_NumTasks>,
  1551. VersionedClause<OMPC_Reduction>,
  1552. VersionedClause<OMPC_Allocate>,
  1553. VersionedClause<OMPC_NumThreads>,
  1554. VersionedClause<OMPC_ProcBind>,
  1555. VersionedClause<OMPC_Copyin>,
  1556. VersionedClause<OMPC_Linear>,
  1557. VersionedClause<OMPC_Aligned>,
  1558. VersionedClause<OMPC_SafeLen>,
  1559. VersionedClause<OMPC_SimdLen>,
  1560. VersionedClause<OMPC_NonTemporal, 50>,
  1561. VersionedClause<OMPC_Order, 50>
  1562. ];
  1563. }
  1564. def OMP_Depobj : Directive<"depobj"> {
  1565. let allowedClauses = [
  1566. VersionedClause<OMPC_Depend, 50>,
  1567. VersionedClause<OMPC_Destroy, 50>,
  1568. VersionedClause<OMPC_Update, 50>,
  1569. // TODO This should ne `none` instead. Comment carried over from
  1570. // OMPKinds.def.
  1571. VersionedClause<OMPC_Depobj, 50>
  1572. ];
  1573. }
  1574. def OMP_Scan : Directive<"scan"> {
  1575. let allowedClauses = [
  1576. VersionedClause<OMPC_Inclusive, 50>,
  1577. VersionedClause<OMPC_Exclusive, 50>
  1578. ];
  1579. }
  1580. def OMP_Assumes : Directive<"assumes"> {}
  1581. def OMP_BeginAssumes : Directive<"begin assumes"> {}
  1582. def OMP_EndAssumes : Directive<"end assumes"> {}
  1583. def OMP_BeginDeclareVariant : Directive<"begin declare variant"> {}
  1584. def OMP_EndDeclareVariant : Directive<"end declare variant"> {}
  1585. def OMP_ParallelWorkshare : Directive<"parallel workshare"> {
  1586. let allowedClauses = [
  1587. VersionedClause<OMPC_Allocate>,
  1588. VersionedClause<OMPC_Copyin>,
  1589. VersionedClause<OMPC_Default>,
  1590. VersionedClause<OMPC_FirstPrivate>,
  1591. VersionedClause<OMPC_Private>,
  1592. VersionedClause<OMPC_Reduction>,
  1593. VersionedClause<OMPC_Shared>
  1594. ];
  1595. let allowedOnceClauses = [
  1596. VersionedClause<OMPC_If>,
  1597. VersionedClause<OMPC_NumThreads>,
  1598. VersionedClause<OMPC_ProcBind>
  1599. ];
  1600. }
  1601. def OMP_Workshare : Directive<"workshare"> {}
  1602. def OMP_EndDo : Directive<"end do"> {}
  1603. def OMP_EndDoSimd : Directive<"end do simd"> {}
  1604. def OMP_EndSections : Directive<"end sections"> {
  1605. let allowedOnceClauses = [
  1606. VersionedClause<OMPC_NoWait>
  1607. ];
  1608. }
  1609. def OMP_EndSingle : Directive<"end single"> {
  1610. let allowedClauses = [
  1611. VersionedClause<OMPC_CopyPrivate>
  1612. ];
  1613. let allowedOnceClauses = [
  1614. VersionedClause<OMPC_NoWait>
  1615. ];
  1616. }
  1617. def OMP_EndWorkshare : Directive<"end workshare"> {
  1618. let allowedClauses = [
  1619. VersionedClause<OMPC_NoWait>
  1620. ];
  1621. }
  1622. def OMP_Unknown : Directive<"unknown"> {
  1623. let isDefault = true;
  1624. }