OMP.td 55 KB

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