1//===-- OpenMPEnums.td - OpenMP dialect enum 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#ifndef OPENMP_ENUMS 10#define OPENMP_ENUMS 11 12include "mlir/Dialect/OpenMP/OpenMPDialect.td" 13include "mlir/IR/EnumAttr.td" 14 15include "mlir/Dialect/OpenMP/OmpCommon.td" 16 17//===----------------------------------------------------------------------===// 18// Base classes for OpenMP enum attributes. 19//===----------------------------------------------------------------------===// 20 21class OpenMP_I32EnumAttr<string name, string summary, 22 list<I32EnumAttrCase> cases> 23 : I32EnumAttr<name, summary, cases> { 24 let genSpecializedAttr = 0; 25 let cppNamespace = "::mlir::omp"; 26} 27 28class OpenMP_BitEnumAttr<string name, string summary, 29 list<BitEnumAttrCaseBase> cases> 30 : I32BitEnumAttr<name, summary, cases> { 31 let genSpecializedAttr = 0; 32 let cppNamespace = "::mlir::omp"; 33} 34 35class OpenMP_EnumAttr<EnumAttrInfo enumInfo, string name> 36 : EnumAttr<OpenMP_Dialect, enumInfo, name>; 37 38 39//===----------------------------------------------------------------------===// 40// capture_clause enum. 41//===----------------------------------------------------------------------===// 42 43def CaptureClauseTo : I32EnumAttrCase<"to", 0>; 44def CaptureClauseLink : I32EnumAttrCase<"link", 1>; 45def CaptureClauseEnter : I32EnumAttrCase<"enter", 2>; 46 47def DeclareTargetCaptureClause : OpenMP_I32EnumAttr< 48 "DeclareTargetCaptureClause", 49 "capture clause", [ 50 CaptureClauseTo, 51 CaptureClauseLink, 52 CaptureClauseEnter 53 ]>; 54 55def DeclareTargetCaptureClauseAttr : OpenMP_EnumAttr<DeclareTargetCaptureClause, 56 "capture_clause"> { 57 let assemblyFormat = "`(` $value `)`"; 58} 59 60//===----------------------------------------------------------------------===// 61// clause_depend enum. 62//===----------------------------------------------------------------------===// 63 64def ClauseDependSource : I32EnumAttrCase<"dependsource", 0>; 65def ClauseDependSink : I32EnumAttrCase<"dependsink", 1>; 66 67def ClauseDepend : OpenMP_I32EnumAttr< 68 "ClauseDepend", 69 "depend clause", [ 70 ClauseDependSource, 71 ClauseDependSink 72 ]>; 73 74def ClauseDependAttr : OpenMP_EnumAttr<ClauseDepend, "clause_depend"> { 75 let assemblyFormat = "`(` $value `)`"; 76} 77 78//===----------------------------------------------------------------------===// 79// clause_requires enum. 80//===----------------------------------------------------------------------===// 81 82// atomic_default_mem_order clause values not defined here because they can be 83// represented by the OMPC_MemoryOrder enumeration instead. 84def ClauseRequiresNone : I32BitEnumAttrCaseNone<"none">; 85def ClauseRequiresReverseOffload : I32BitEnumAttrCaseBit<"reverse_offload", 0>; 86def ClauseRequiresUnifiedAddress : I32BitEnumAttrCaseBit<"unified_address", 1>; 87def ClauseRequiresUnifiedSharedMemory 88 : I32BitEnumAttrCaseBit<"unified_shared_memory", 2>; 89def ClauseRequiresDynamicAllocators 90 : I32BitEnumAttrCaseBit<"dynamic_allocators", 3>; 91 92def ClauseRequires : OpenMP_BitEnumAttr< 93 "ClauseRequires", 94 "requires clauses", [ 95 ClauseRequiresNone, 96 ClauseRequiresReverseOffload, 97 ClauseRequiresUnifiedAddress, 98 ClauseRequiresUnifiedSharedMemory, 99 ClauseRequiresDynamicAllocators 100 ]>; 101 102def ClauseRequiresAttr : OpenMP_EnumAttr<ClauseRequires, "clause_requires">; 103 104//===----------------------------------------------------------------------===// 105// clause_task_depend enum. 106//===----------------------------------------------------------------------===// 107 108def ClauseTaskDependIn : I32EnumAttrCase<"taskdependin", 0>; 109def ClauseTaskDependOut : I32EnumAttrCase<"taskdependout", 1>; 110def ClauseTaskDependInOut : I32EnumAttrCase<"taskdependinout", 2>; 111def ClauseTaskDependMutexInOutSet 112 : I32EnumAttrCase<"taskdependmutexinoutset", 3>; 113def ClauseTaskDependInOutSet : I32EnumAttrCase<"taskdependinoutset", 4>; 114 115def ClauseTaskDepend 116 : OpenMP_I32EnumAttr< 117 "ClauseTaskDepend", "depend clause in a target or task construct", 118 [ClauseTaskDependIn, ClauseTaskDependOut, ClauseTaskDependInOut, 119 ClauseTaskDependMutexInOutSet, ClauseTaskDependInOutSet]>; 120 121def ClauseTaskDependAttr : OpenMP_EnumAttr<ClauseTaskDepend, 122 "clause_task_depend"> { 123 let assemblyFormat = "`(` $value `)`"; 124} 125 126//===----------------------------------------------------------------------===// 127// data_sharing_type enum. 128//===----------------------------------------------------------------------===// 129 130def DataSharingTypePrivate : I32EnumAttrCase<"Private", 0, "private">; 131def DataSharingTypeFirstPrivate 132 : I32EnumAttrCase<"FirstPrivate", 1, "firstprivate">; 133 134def DataSharingClauseType : OpenMP_I32EnumAttr< 135 "DataSharingClauseType", 136 "Type of a data-sharing clause", [ 137 DataSharingTypePrivate, 138 DataSharingTypeFirstPrivate 139 ]>; 140 141def DataSharingClauseTypeAttr : OpenMP_EnumAttr<DataSharingClauseType, 142 "data_sharing_type"> { 143 let assemblyFormat = "`{` `type` `=` $value `}`"; 144} 145 146//===----------------------------------------------------------------------===// 147// device_type enum. 148//===----------------------------------------------------------------------===// 149 150def DeviceTypeAny : I32EnumAttrCase<"any", 0>; 151def DeviceTypeHost : I32EnumAttrCase<"host", 1>; 152def DeviceTypeNoHost : I32EnumAttrCase<"nohost", 2>; 153 154def DeclareTargetDeviceType : OpenMP_I32EnumAttr< 155 "DeclareTargetDeviceType", 156 "device_type clause", [ 157 DeviceTypeAny, 158 DeviceTypeHost, 159 DeviceTypeNoHost 160 ]>; 161 162def DeclareTargetDeviceTypeAttr : OpenMP_EnumAttr<DeclareTargetDeviceType, 163 "device_type"> { 164 let assemblyFormat = "`(` $value `)`"; 165} 166 167//===----------------------------------------------------------------------===// 168// order_modifer enum. 169//===----------------------------------------------------------------------===// 170 171def OMP_OrderModReproducible : I32EnumAttrCase<"reproducible", 0>; 172def OMP_OrderModUnconstrained : I32EnumAttrCase<"unconstrained", 1>; 173def OrderModifier 174 : I32EnumAttr<"OrderModifier", "OpenMP Order Modifier", 175 [OMP_OrderModReproducible, OMP_OrderModUnconstrained]> { 176 let genSpecializedAttr = 0; 177 let cppNamespace = "::mlir::omp"; 178} 179def OrderModifierAttr : EnumAttr<OpenMP_Dialect, OrderModifier, 180 "order_mod">; 181 182//===----------------------------------------------------------------------===// 183// reduction_modifier enum. 184//===----------------------------------------------------------------------===// 185 186def ReductionModifierDefault : I32EnumAttrCase<"defaultmod", 0>; 187def ReductionModifierInscan : I32EnumAttrCase<"inscan", 1>; 188def ReductionModifierTask : I32EnumAttrCase<"task", 2>; 189 190def ReductionModifier : OpenMP_I32EnumAttr< 191 "ReductionModifier", 192 "reduction modifier", [ 193 ReductionModifierDefault, 194 ReductionModifierInscan, 195 ReductionModifierTask 196 ]>; 197 198def ReductionModifierAttr : OpenMP_EnumAttr<ReductionModifier, 199 "reduction_modifier"> { 200 let assemblyFormat = "`(` $value `)`"; 201} 202 203//===----------------------------------------------------------------------===// 204// sched_mod enum. 205//===----------------------------------------------------------------------===// 206 207def OpenMP_ScheduleModNone : I32EnumAttrCase<"none", 0>; 208def OpenMP_ScheduleModMonotonic : I32EnumAttrCase<"monotonic", 1>; 209def OpenMP_ScheduleModNonmonotonic : I32EnumAttrCase<"nonmonotonic", 2>; 210// FIXME: remove this value for the modifier because this is handled using a 211// separate attribute 212def OpenMP_ScheduleModSimd : I32EnumAttrCase<"simd", 3>; 213 214def ScheduleModifier : OpenMP_I32EnumAttr< 215 "ScheduleModifier", 216 "OpenMP Schedule Modifier", [ 217 OpenMP_ScheduleModNone, 218 OpenMP_ScheduleModMonotonic, 219 OpenMP_ScheduleModNonmonotonic, 220 OpenMP_ScheduleModSimd 221 ]>; 222 223def ScheduleModifierAttr : OpenMP_EnumAttr<ScheduleModifier, "sched_mod">; 224 225//===----------------------------------------------------------------------===// 226// variable_capture_kind enum. 227//===----------------------------------------------------------------------===// 228 229def CaptureThis : I32EnumAttrCase<"This", 0>; 230def CaptureByRef : I32EnumAttrCase<"ByRef", 1>; 231def CaptureByCopy : I32EnumAttrCase<"ByCopy", 2>; 232def CaptureVLAType : I32EnumAttrCase<"VLAType", 3>; 233 234def VariableCaptureKind : OpenMP_I32EnumAttr< 235 "VariableCaptureKind", 236 "variable capture kind", [ 237 CaptureThis, 238 CaptureByRef, 239 CaptureByCopy, 240 CaptureVLAType 241 ]>; 242 243def VariableCaptureKindAttr : OpenMP_EnumAttr<VariableCaptureKind, 244 "variable_capture_kind"> { 245 let assemblyFormat = "`(` $value `)`"; 246} 247 248#endif // OPENMP_ENUMS 249